net_sched: cls_flow: remove faulty use of list_for_each_entry_rcu
authorJiri Pirko <jiri@resnulli.us>
Tue, 2 Dec 2014 17:00:34 +0000 (18:00 +0100)
committerDavid S. Miller <davem@davemloft.net>
Tue, 9 Dec 2014 01:53:40 +0000 (20:53 -0500)
rcu variant is not correct here. The code is called by updater (rtnl
lock is held), not by reader (no rcu_read_lock is held).

Signed-off-by: Jiri Pirko <jiri@resnulli.us>
Signed-off-by: David S. Miller <davem@davemloft.net>
net/sched/cls_flow.c

index 4ac515f..a605739 100644 (file)
@@ -578,7 +578,7 @@ static unsigned long flow_get(struct tcf_proto *tp, u32 handle)
        struct flow_head *head = rtnl_dereference(tp->root);
        struct flow_filter *f;
 
-       list_for_each_entry_rcu(f, &head->filters, list)
+       list_for_each_entry(f, &head->filters, list)
                if (f->handle == handle)
                        return (unsigned long)f;
        return 0;
@@ -654,7 +654,7 @@ static void flow_walk(struct tcf_proto *tp, struct tcf_walker *arg)
        struct flow_head *head = rtnl_dereference(tp->root);
        struct flow_filter *f;
 
-       list_for_each_entry_rcu(f, &head->filters, list) {
+       list_for_each_entry(f, &head->filters, list) {
                if (arg->count < arg->skip)
                        goto skip;
                if (arg->fn(tp, (unsigned long)f, arg) < 0) {