diff options
author | 2014-10-05 21:28:20 -0700 | |
---|---|---|
committer | 2014-10-06 18:02:32 -0400 | |
commit | 13990f8156862fe945a1a226850a6550c8988a33 (patch) | |
tree | 9246262a5c0728e0e0f40c5208697cd2dda38126 /net | |
parent | net: sched: remove tcf_proto from ematch calls (diff) | |
download | linux-13990f8156862fe945a1a226850a6550c8988a33.tar.gz linux-13990f8156862fe945a1a226850a6550c8988a33.tar.bz2 linux-13990f8156862fe945a1a226850a6550c8988a33.zip |
net: sched: cls_cgroup tear down exts and ematch from rcu callback
It is not RCU safe to destroy the action chain while there
is a possibility of readers accessing it. Move this code
into the rcu callback using the same rcu callback used in the
code patch to make a change to head.
Signed-off-by: John Fastabend <john.r.fastabend@intel.com>
Acked-by: Cong Wang <cwang@twopensource.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net')
-rw-r--r-- | net/sched/cls_cgroup.c | 4 |
1 files changed, 1 insertions, 3 deletions
diff --git a/net/sched/cls_cgroup.c b/net/sched/cls_cgroup.c index 2f77a89655dc..d61a801222c1 100644 --- a/net/sched/cls_cgroup.c +++ b/net/sched/cls_cgroup.c @@ -156,10 +156,8 @@ static void cls_cgroup_destroy(struct tcf_proto *tp) struct cls_cgroup_head *head = rtnl_dereference(tp->root); if (head) { - tcf_exts_destroy(&head->exts); - tcf_em_tree_destroy(&head->ematches); RCU_INIT_POINTER(tp->root, NULL); - kfree_rcu(head, rcu); + call_rcu(&head->rcu, cls_cgroup_destroy_rcu); } } |