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
