diff options
Diffstat (limited to 'net/sched/sch_teql.c')
-rw-r--r-- | net/sched/sch_teql.c | 6 |
1 files changed, 5 insertions, 1 deletions
diff --git a/net/sched/sch_teql.c b/net/sched/sch_teql.c index f05ad9a30b4c..dfe7e4520988 100644 --- a/net/sched/sch_teql.c +++ b/net/sched/sch_teql.c | |||
@@ -277,6 +277,7 @@ static int teql_master_xmit(struct sk_buff *skb, struct net_device *dev) | |||
277 | int busy; | 277 | int busy; |
278 | int nores; | 278 | int nores; |
279 | int len = skb->len; | 279 | int len = skb->len; |
280 | int subq = skb->queue_mapping; | ||
280 | struct sk_buff *skb_res = NULL; | 281 | struct sk_buff *skb_res = NULL; |
281 | 282 | ||
282 | start = master->slaves; | 283 | start = master->slaves; |
@@ -293,7 +294,9 @@ restart: | |||
293 | 294 | ||
294 | if (slave->qdisc_sleeping != q) | 295 | if (slave->qdisc_sleeping != q) |
295 | continue; | 296 | continue; |
296 | if (netif_queue_stopped(slave) || ! netif_running(slave)) { | 297 | if (netif_queue_stopped(slave) || |
298 | netif_subqueue_stopped(slave, subq) || | ||
299 | !netif_running(slave)) { | ||
297 | busy = 1; | 300 | busy = 1; |
298 | continue; | 301 | continue; |
299 | } | 302 | } |
@@ -302,6 +305,7 @@ restart: | |||
302 | case 0: | 305 | case 0: |
303 | if (netif_tx_trylock(slave)) { | 306 | if (netif_tx_trylock(slave)) { |
304 | if (!netif_queue_stopped(slave) && | 307 | if (!netif_queue_stopped(slave) && |
308 | !netif_subqueue_stopped(slave, subq) && | ||
305 | slave->hard_start_xmit(skb, slave) == 0) { | 309 | slave->hard_start_xmit(skb, slave) == 0) { |
306 | netif_tx_unlock(slave); | 310 | netif_tx_unlock(slave); |
307 | master->slaves = NEXT_SLAVE(q); | 311 | master->slaves = NEXT_SLAVE(q); |