提交 e1a75214 编写于 作者: Y Yunsheng Lin 提交者: Yang Yingliang

net: sch_generic: fix the missing new qdisc assignment bug

stable inclusion
from linux-4.19.158
commit 81504d1952d712c8bb9c3966896efee8a37ea966

--------------------------------

When commit 2fb541c8 ("net: sch_generic: aviod concurrent reset and
enqueue op for lockless qdisc") is backported to stable kernel, one
assignment is missing, which causes two problems reported by Joakim and
Vishwanath, see [1] and [2].

So add the assignment back to fix it.

1. https://www.spinics.net/lists/netdev/msg693916.html
2. https://www.spinics.net/lists/netdev/msg695131.html

Fixes: 749cc0b0c7f3 ("net: sch_generic: aviod concurrent reset and enqueue op for lockless qdisc")
Signed-off-by: NYunsheng Lin <linyunsheng@huawei.com>
Acked-by: NJakub Kicinski <kuba@kernel.org>
Tested-by: NBrian Norris <briannorris@chromium.org>
Signed-off-by: NGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Signed-off-by: NYang Yingliang <yangyingliang@huawei.com>
Signed-off-by: NCheng Jian <cj.chengjian@huawei.com>
上级 a7a03371
...@@ -1116,10 +1116,13 @@ static void dev_deactivate_queue(struct net_device *dev, ...@@ -1116,10 +1116,13 @@ static void dev_deactivate_queue(struct net_device *dev,
void *_qdisc_default) void *_qdisc_default)
{ {
struct Qdisc *qdisc = rtnl_dereference(dev_queue->qdisc); struct Qdisc *qdisc = rtnl_dereference(dev_queue->qdisc);
struct Qdisc *qdisc_default = _qdisc_default;
if (qdisc) { if (qdisc) {
if (!(qdisc->flags & TCQ_F_BUILTIN)) if (!(qdisc->flags & TCQ_F_BUILTIN))
set_bit(__QDISC_STATE_DEACTIVATED, &qdisc->state); set_bit(__QDISC_STATE_DEACTIVATED, &qdisc->state);
rcu_assign_pointer(dev_queue->qdisc, qdisc_default);
} }
} }
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册