diff options
author | David S. Miller <davem@davemloft.net> | 2008-08-18 20:51:18 -0700 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2008-08-18 21:05:56 -0700 |
commit | 8608db031b4d2932d645709e2cfe8fbcd91a7305 (patch) | |
tree | 01b2e63f9f28dddcb5c0dd72e9c8c5b73c866685 | |
parent | 69747650c814a8a79fef412c7416adf823293a3e (diff) | |
download | linux-stable-8608db031b4d2932d645709e2cfe8fbcd91a7305.tar.gz linux-stable-8608db031b4d2932d645709e2cfe8fbcd91a7305.tar.bz2 linux-stable-8608db031b4d2932d645709e2cfe8fbcd91a7305.zip |
pkt_sched: Never schedule non-root qdiscs.
Based upon initial discovery and patch by Jarek Poplawski.
The qdisc watchdogs can be attached to any qdisc, not just the root,
so make sure we schedule the correct one.
CBQ has a similar bug.
Signed-off-by: David S. Miller <davem@davemloft.net>
-rw-r--r-- | net/sched/sch_api.c | 2 | ||||
-rw-r--r-- | net/sched/sch_cbq.c | 2 |
2 files changed, 2 insertions, 2 deletions
diff --git a/net/sched/sch_api.c b/net/sched/sch_api.c index c8dc72e12107..98c00847a3d2 100644 --- a/net/sched/sch_api.c +++ b/net/sched/sch_api.c @@ -426,7 +426,7 @@ static enum hrtimer_restart qdisc_watchdog(struct hrtimer *timer) wd->qdisc->flags &= ~TCQ_F_THROTTLED; smp_wmb(); - __netif_schedule(wd->qdisc); + __netif_schedule(qdisc_root(wd->qdisc)); return HRTIMER_NORESTART; } diff --git a/net/sched/sch_cbq.c b/net/sched/sch_cbq.c index 4e261ce62f48..47ef492c4ff4 100644 --- a/net/sched/sch_cbq.c +++ b/net/sched/sch_cbq.c @@ -654,7 +654,7 @@ static enum hrtimer_restart cbq_undelay(struct hrtimer *timer) } sch->flags &= ~TCQ_F_THROTTLED; - __netif_schedule(sch); + __netif_schedule(qdisc_root(sch)); return HRTIMER_NORESTART; } |