[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <1394294479.20149.66.camel@edumazet-glaptop2.roam.corp.google.com>
Date: Sat, 08 Mar 2014 08:01:19 -0800
From: Eric Dumazet <eric.dumazet@...il.com>
To: Valdis Kletnieks <Valdis.Kletnieks@...edu>,
David Miller <davem@...emloft.net>,
Mirco Tischler <mt-ml@....de>
Cc: Eric Dumazet <edumazet@...gle.com>, netdev@...r.kernel.org
Subject: [PATCH net] pkt_sched: move the sanity test in qdisc_list_add()
From: Eric Dumazet <edumazet@...gle.com>
The WARN_ON(root == &noop_qdisc)) added in qdisc_list_add()
can trigger in normal conditions when devices are not up.
It should be done only right before the list_add_tail() call.
Fixes: e57a784d8cae4 ("pkt_sched: set root qdisc before change() in attach_default_qdiscs()")
Reported-by: Valdis Kletnieks <Valdis.Kletnieks@...edu>
Tested-by: Mirco Tischler <mt-ml@....de>
Signed-off-by: Eric Dumazet <edumazet@...gle.com>
---
net/sched/sch_api.c | 7 ++++---
1 file changed, 4 insertions(+), 3 deletions(-)
diff --git a/net/sched/sch_api.c b/net/sched/sch_api.c
index c31190e29b90..17c03198ebbc 100644
--- a/net/sched/sch_api.c
+++ b/net/sched/sch_api.c
@@ -273,11 +273,12 @@ static struct Qdisc *qdisc_match_from_root(struct Qdisc *root, u32 handle)
void qdisc_list_add(struct Qdisc *q)
{
- struct Qdisc *root = qdisc_dev(q)->qdisc;
+ if ((q->parent != TC_H_ROOT) && !(q->flags & TCQ_F_INGRESS)) {
+ struct Qdisc *root = qdisc_dev(q)->qdisc;
- WARN_ON_ONCE(root == &noop_qdisc);
- if ((q->parent != TC_H_ROOT) && !(q->flags & TCQ_F_INGRESS))
+ WARN_ON_ONCE(root == &noop_qdisc);
list_add_tail(&q->list, &root->list);
+ }
}
EXPORT_SYMBOL(qdisc_list_add);
--
To unsubscribe from this list: send the line "unsubscribe netdev" in
the body of a message to majordomo@...r.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Powered by blists - more mailing lists