diff options
Diffstat (limited to 'net/sched/sch_generic.c')
-rw-r--r-- | net/sched/sch_generic.c | 6 |
1 files changed, 5 insertions, 1 deletions
diff --git a/net/sched/sch_generic.c b/net/sched/sch_generic.c index 16bc83b2842a..80742edea96f 100644 --- a/net/sched/sch_generic.c +++ b/net/sched/sch_generic.c | |||
@@ -159,12 +159,15 @@ int sch_direct_xmit(struct sk_buff *skb, struct Qdisc *q, | |||
159 | if (validate) | 159 | if (validate) |
160 | skb = validate_xmit_skb_list(skb, dev); | 160 | skb = validate_xmit_skb_list(skb, dev); |
161 | 161 | ||
162 | if (skb) { | 162 | if (likely(skb)) { |
163 | HARD_TX_LOCK(dev, txq, smp_processor_id()); | 163 | HARD_TX_LOCK(dev, txq, smp_processor_id()); |
164 | if (!netif_xmit_frozen_or_stopped(txq)) | 164 | if (!netif_xmit_frozen_or_stopped(txq)) |
165 | skb = dev_hard_start_xmit(skb, dev, txq, &ret); | 165 | skb = dev_hard_start_xmit(skb, dev, txq, &ret); |
166 | 166 | ||
167 | HARD_TX_UNLOCK(dev, txq); | 167 | HARD_TX_UNLOCK(dev, txq); |
168 | } else { | ||
169 | spin_lock(root_lock); | ||
170 | return qdisc_qlen(q); | ||
168 | } | 171 | } |
169 | spin_lock(root_lock); | 172 | spin_lock(root_lock); |
170 | 173 | ||
@@ -567,6 +570,7 @@ struct Qdisc_ops pfifo_fast_ops __read_mostly = { | |||
567 | .dump = pfifo_fast_dump, | 570 | .dump = pfifo_fast_dump, |
568 | .owner = THIS_MODULE, | 571 | .owner = THIS_MODULE, |
569 | }; | 572 | }; |
573 | EXPORT_SYMBOL(pfifo_fast_ops); | ||
570 | 574 | ||
571 | static struct lock_class_key qdisc_tx_busylock; | 575 | static struct lock_class_key qdisc_tx_busylock; |
572 | 576 | ||