aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/net/sched
diff options
context:
space:
mode:
authorwenxu <wenxu@ucloud.cn>2020-06-18 20:49:10 +0800
committerDavid S. Miller <davem@davemloft.net>2020-06-19 20:12:58 -0700
commita1db217861f33b8d9ea8171bcacee51186e2d5ba (patch)
tree6719e7474a02c935b8d296f550de67ddb7290945 /net/sched
parentflow_offload: use flow_indr_block_cb_alloc/remove function (diff)
downloadwireguard-linux-a1db217861f33b8d9ea8171bcacee51186e2d5ba.tar.xz
wireguard-linux-a1db217861f33b8d9ea8171bcacee51186e2d5ba.zip
net: flow_offload: fix flow_indr_dev_unregister path
If the representor is removed, then identify the indirect flow_blocks that need to be removed by the release callback and the port representor structure. To identify the port representor structure, a new indr.cb_priv field needs to be introduced. The flow_block also needs to be removed from the driver list from the cleanup path. Fixes: 1fac52da5942 ("net: flow_offload: consolidate indirect flow_block infrastructure") Signed-off-by: wenxu <wenxu@ucloud.cn> Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net/sched')
-rw-r--r--net/sched/cls_api.c1
1 files changed, 1 insertions, 0 deletions
diff --git a/net/sched/cls_api.c b/net/sched/cls_api.c
index a00a203b2ef5..f8028d73edf1 100644
--- a/net/sched/cls_api.c
+++ b/net/sched/cls_api.c
@@ -652,6 +652,7 @@ static void tc_block_indr_cleanup(struct flow_block_cb *block_cb)
&block->flow_block, tcf_block_shared(block),
&extack);
down_write(&block->cb_lock);
+ list_del(&block_cb->driver_list);
list_move(&block_cb->list, &bo.cb_list);
up_write(&block->cb_lock);
rtnl_lock();