diff options
author | Jarek Poplawski <jarkao2@gmail.com> | 2008-09-23 04:05:56 -0400 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2008-09-23 04:05:56 -0400 |
commit | f4ab543201992fe499bef5c406e09f23aa97b4d5 (patch) | |
tree | e5e52782cdc408bd27717d82e87535a24fd516d6 | |
parent | cd07a8ea0dd4b204919b4c9ced8d9efdd9924495 (diff) |
pkt_sched: Remove the tx queue state check in qdisc_run()
The current check wrongly uses the state of one (currently the first)
tx queue for all tx queues in case of non-default qdiscs. This check
mainly prevented requeuing loop with __netif_schedule(), but now it's
controlled inside __qdisc_run(), while dequeuing. The wrongness of
this check was first noticed by Herbert Xu.
Signed-off-by: Jarek Poplawski <jarkao2@gmail.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
-rw-r--r-- | include/net/pkt_sched.h | 5 |
1 files changed, 1 insertions, 4 deletions
diff --git a/include/net/pkt_sched.h b/include/net/pkt_sched.h index b786a5b09253..4082f39f5079 100644 --- a/include/net/pkt_sched.h +++ b/include/net/pkt_sched.h | |||
@@ -90,10 +90,7 @@ extern void __qdisc_run(struct Qdisc *q); | |||
90 | 90 | ||
91 | static inline void qdisc_run(struct Qdisc *q) | 91 | static inline void qdisc_run(struct Qdisc *q) |
92 | { | 92 | { |
93 | struct netdev_queue *txq = q->dev_queue; | 93 | if (!test_and_set_bit(__QDISC_STATE_RUNNING, &q->state)) |
94 | |||
95 | if (!netif_tx_queue_stopped(txq) && | ||
96 | !test_and_set_bit(__QDISC_STATE_RUNNING, &q->state)) | ||
97 | __qdisc_run(q); | 94 | __qdisc_run(q); |
98 | } | 95 | } |
99 | 96 | ||