diff options
Diffstat (limited to 'net/sched/sch_prio.c')
-rw-r--r-- | net/sched/sch_prio.c | 11 |
1 files changed, 8 insertions, 3 deletions
diff --git a/net/sched/sch_prio.c b/net/sched/sch_prio.c index 3fc0c0fa5bcc..2567b4c96c1e 100644 --- a/net/sched/sch_prio.c +++ b/net/sched/sch_prio.c | |||
@@ -222,8 +222,10 @@ static int prio_tune(struct Qdisc *sch, struct rtattr *opt) | |||
222 | 222 | ||
223 | for (i=q->bands; i<TCQ_PRIO_BANDS; i++) { | 223 | for (i=q->bands; i<TCQ_PRIO_BANDS; i++) { |
224 | struct Qdisc *child = xchg(&q->queues[i], &noop_qdisc); | 224 | struct Qdisc *child = xchg(&q->queues[i], &noop_qdisc); |
225 | if (child != &noop_qdisc) | 225 | if (child != &noop_qdisc) { |
226 | qdisc_tree_decrease_qlen(child, child->q.qlen); | ||
226 | qdisc_destroy(child); | 227 | qdisc_destroy(child); |
228 | } | ||
227 | } | 229 | } |
228 | sch_tree_unlock(sch); | 230 | sch_tree_unlock(sch); |
229 | 231 | ||
@@ -236,8 +238,11 @@ static int prio_tune(struct Qdisc *sch, struct rtattr *opt) | |||
236 | sch_tree_lock(sch); | 238 | sch_tree_lock(sch); |
237 | child = xchg(&q->queues[i], child); | 239 | child = xchg(&q->queues[i], child); |
238 | 240 | ||
239 | if (child != &noop_qdisc) | 241 | if (child != &noop_qdisc) { |
242 | qdisc_tree_decrease_qlen(child, | ||
243 | child->q.qlen); | ||
240 | qdisc_destroy(child); | 244 | qdisc_destroy(child); |
245 | } | ||
241 | sch_tree_unlock(sch); | 246 | sch_tree_unlock(sch); |
242 | } | 247 | } |
243 | } | 248 | } |
@@ -295,7 +300,7 @@ static int prio_graft(struct Qdisc *sch, unsigned long arg, struct Qdisc *new, | |||
295 | sch_tree_lock(sch); | 300 | sch_tree_lock(sch); |
296 | *old = q->queues[band]; | 301 | *old = q->queues[band]; |
297 | q->queues[band] = new; | 302 | q->queues[band] = new; |
298 | sch->q.qlen -= (*old)->q.qlen; | 303 | qdisc_tree_decrease_qlen(*old, (*old)->q.qlen); |
299 | qdisc_reset(*old); | 304 | qdisc_reset(*old); |
300 | sch_tree_unlock(sch); | 305 | sch_tree_unlock(sch); |
301 | 306 | ||