On Thu, 2016-09-01 at 22:57 -0700, Cong Wang wrote:
Missing changelog ? Here I have no idea what you want to fix, since John already took care all this infra. Adding extra rcu_dereference() and rcu_read_lock() while the critical RCU dereferences already happen in callers is not needed. > Signed-off-by: Cong Wang <xiyou.wangc...@gmail.com> > --- > net/sched/act_api.c | 6 +++++- > 1 file changed, 5 insertions(+), 1 deletion(-) > > diff --git a/net/sched/act_api.c b/net/sched/act_api.c > index 2f8db3c..fb6ff52 100644 > --- a/net/sched/act_api.c > +++ b/net/sched/act_api.c > @@ -470,10 +470,14 @@ int tcf_action_exec(struct sk_buff *skb, struct > tc_action **actions, > goto exec_done; > } > for (i = 0; i < nr_actions; i++) { > - const struct tc_action *a = actions[i]; > + const struct tc_action *a; > > + rcu_read_lock(); But the caller already has rcu_read_lock() or rcu_read_lock_bh() This was done in commit 25d8c0d55f241ce2 ("net: rcu-ify tcf_proto") > + a = rcu_dereference(actions[i]); Add in your .config : CONFIG_SPARSE_RCU_POINTER=y make C=2 M=net/sched > repeat: > ret = a->ops->act(skb, a, res); > + rcu_read_unlock(); > + > if (ret == TC_ACT_REPEAT) > goto repeat; /* we need a ttl - JHS */ > if (ret != TC_ACT_PIPE) I do not believe this patch is necessary. Please add John as reviewer next time. Thanks.