On 16-09-12 06:01 PM, Eric Dumazet wrote:
On Mon, 2016-09-12 at 16:46 -0400, Jamal Hadi Salim wrote:

+
+static int tcf_skbmod_dump(struct sk_buff *skb, struct tc_action *a,
+                          int bind, int ref)
+{
+       struct tcf_skbmod *d = to_skbmod(a);
+       unsigned char *b = skb_tail_pointer(skb);
+       struct tcf_skbmod_params  *p = rtnl_dereference(d->skbmod_p);
+       struct tc_skbmod opt = {
+               .index   = d->tcf_index,
+               .refcnt  = d->tcf_refcnt - ref,
+               .bindcnt = d->tcf_bindcnt - bind,
+               .action  = d->tcf_action,
+       };
+       struct tcf_t t;
+
+       rcu_read_lock();

You do not need rcu read lock protection here, RTNL is enough.

I noticed some very weird issues when I took that out.
Running sufficiently large amount of traffic (ping -f is sufficient)
I saw that when i did a dump it took anywhere between 6-15 seconds.
With the read_lock in place response was immediate.
I can go back and run things to verify - but it was very odd.

cheers,
jamal




Reply via email to