diff options
Diffstat (limited to 'net/sched')
-rw-r--r-- | net/sched/sch_generic.c | 5 |
1 files changed, 3 insertions, 2 deletions
diff --git a/net/sched/sch_generic.c b/net/sched/sch_generic.c index fa1a6f45dc41..e595e6570ce0 100644 --- a/net/sched/sch_generic.c +++ b/net/sched/sch_generic.c | |||
@@ -134,7 +134,7 @@ static inline int qdisc_restart(struct net_device *dev) | |||
134 | { | 134 | { |
135 | struct Qdisc *q = dev->qdisc; | 135 | struct Qdisc *q = dev->qdisc; |
136 | struct sk_buff *skb; | 136 | struct sk_buff *skb; |
137 | int ret; | 137 | int ret = NETDEV_TX_BUSY; |
138 | 138 | ||
139 | /* Dequeue packet */ | 139 | /* Dequeue packet */ |
140 | if (unlikely((skb = dev_dequeue_skb(dev, q)) == NULL)) | 140 | if (unlikely((skb = dev_dequeue_skb(dev, q)) == NULL)) |
@@ -145,7 +145,8 @@ static inline int qdisc_restart(struct net_device *dev) | |||
145 | spin_unlock(&dev->queue_lock); | 145 | spin_unlock(&dev->queue_lock); |
146 | 146 | ||
147 | HARD_TX_LOCK(dev, smp_processor_id()); | 147 | HARD_TX_LOCK(dev, smp_processor_id()); |
148 | ret = dev_hard_start_xmit(skb, dev); | 148 | if (!netif_subqueue_stopped(dev, skb)) |
149 | ret = dev_hard_start_xmit(skb, dev); | ||
149 | HARD_TX_UNLOCK(dev); | 150 | HARD_TX_UNLOCK(dev); |
150 | 151 | ||
151 | spin_lock(&dev->queue_lock); | 152 | spin_lock(&dev->queue_lock); |