aboutsummaryrefslogtreecommitdiffstats
path: root/net/sched/sch_api.c
diff options
context:
space:
mode:
Diffstat (limited to 'net/sched/sch_api.c')
-rw-r--r--net/sched/sch_api.c13
1 files changed, 9 insertions, 4 deletions
diff --git a/net/sched/sch_api.c b/net/sched/sch_api.c
index cd81505662b8..a07d55e75698 100644
--- a/net/sched/sch_api.c
+++ b/net/sched/sch_api.c
@@ -135,7 +135,7 @@ static DEFINE_RWLOCK(qdisc_mod_lock);
135 135
136static struct Qdisc_ops *qdisc_base; 136static struct Qdisc_ops *qdisc_base;
137 137
138/* Register/uregister queueing discipline */ 138/* Register/unregister queueing discipline */
139 139
140int register_qdisc(struct Qdisc_ops *qops) 140int register_qdisc(struct Qdisc_ops *qops)
141{ 141{
@@ -271,11 +271,16 @@ static struct Qdisc *qdisc_match_from_root(struct Qdisc *root, u32 handle)
271 return NULL; 271 return NULL;
272} 272}
273 273
274static void qdisc_list_add(struct Qdisc *q) 274void qdisc_list_add(struct Qdisc *q)
275{ 275{
276 if ((q->parent != TC_H_ROOT) && !(q->flags & TCQ_F_INGRESS)) 276 if ((q->parent != TC_H_ROOT) && !(q->flags & TCQ_F_INGRESS)) {
277 list_add_tail(&q->list, &qdisc_dev(q)->qdisc->list); 277 struct Qdisc *root = qdisc_dev(q)->qdisc;
278
279 WARN_ON_ONCE(root == &noop_qdisc);
280 list_add_tail(&q->list, &root->list);
281 }
278} 282}
283EXPORT_SYMBOL(qdisc_list_add);
279 284
280void qdisc_list_del(struct Qdisc *q) 285void qdisc_list_del(struct Qdisc *q)
281{ 286{