summaryrefslogtreecommitdiffstats
path: root/net/sched
diff options
context:
space:
mode:
authorPaul Blakey <paulb@mellanox.com>2020-02-16 11:01:23 +0100
committerSaeed Mahameed <saeedm@mellanox.com>2020-02-20 02:49:48 +0100
commit43719298193224c9a76c355de1622bd70242bc08 (patch)
treeaf26f1d99e8d2bb9b429a8e078577eaefe1c1efb /net/sched
parentnet: sched: Pass ingress block to tcf_classify_ingress (diff)
downloadlinux-43719298193224c9a76c355de1622bd70242bc08.tar.xz
linux-43719298193224c9a76c355de1622bd70242bc08.zip
net: sched: Change the block's chain list to an rcu list
To allow lookup of a block's chain under atomic context. Co-developed-by: Vlad Buslov <vladbu@mellanox.com> Signed-off-by: Vlad Buslov <vladbu@mellanox.com> Signed-off-by: Paul Blakey <paulb@mellanox.com> Reviewed-by: Jiri Pirko <jiri@mellanox.com> Signed-off-by: Saeed Mahameed <saeedm@mellanox.com>
Diffstat (limited to 'net/sched')
-rw-r--r--net/sched/cls_api.c5
1 files changed, 3 insertions, 2 deletions
diff --git a/net/sched/cls_api.c b/net/sched/cls_api.c
index bbd8b5e7b74b..a634c85f1e0e 100644
--- a/net/sched/cls_api.c
+++ b/net/sched/cls_api.c
@@ -22,6 +22,7 @@
#include <linux/idr.h>
#include <linux/rhashtable.h>
#include <linux/jhash.h>
+#include <linux/rculist.h>
#include <net/net_namespace.h>
#include <net/sock.h>
#include <net/netlink.h>
@@ -354,7 +355,7 @@ static struct tcf_chain *tcf_chain_create(struct tcf_block *block,
chain = kzalloc(sizeof(*chain), GFP_KERNEL);
if (!chain)
return NULL;
- list_add_tail(&chain->list, &block->chain_list);
+ list_add_tail_rcu(&chain->list, &block->chain_list);
mutex_init(&chain->filter_chain_lock);
chain->block = block;
chain->index = chain_index;
@@ -394,7 +395,7 @@ static bool tcf_chain_detach(struct tcf_chain *chain)
ASSERT_BLOCK_LOCKED(block);
- list_del(&chain->list);
+ list_del_rcu(&chain->list);
if (!chain->index)
block->chain0.chain = NULL;