diff options
Diffstat (limited to 'net/sched/sch_generic.c')
-rw-r--r-- | net/sched/sch_generic.c | 11 |
1 files changed, 6 insertions, 5 deletions
diff --git a/net/sched/sch_generic.c b/net/sched/sch_generic.c index aefc1504dc88..5d81a4478514 100644 --- a/net/sched/sch_generic.c +++ b/net/sched/sch_generic.c | |||
@@ -53,20 +53,19 @@ static inline int dev_requeue_skb(struct sk_buff *skb, struct Qdisc *q) | |||
53 | static inline struct sk_buff *dequeue_skb(struct Qdisc *q) | 53 | static inline struct sk_buff *dequeue_skb(struct Qdisc *q) |
54 | { | 54 | { |
55 | struct sk_buff *skb = q->gso_skb; | 55 | struct sk_buff *skb = q->gso_skb; |
56 | const struct netdev_queue *txq = q->dev_queue; | ||
56 | 57 | ||
57 | if (unlikely(skb)) { | 58 | if (unlikely(skb)) { |
58 | struct net_device *dev = qdisc_dev(q); | ||
59 | struct netdev_queue *txq; | ||
60 | |||
61 | /* check the reason of requeuing without tx lock first */ | 59 | /* check the reason of requeuing without tx lock first */ |
62 | txq = netdev_get_tx_queue(dev, skb_get_queue_mapping(skb)); | 60 | txq = netdev_get_tx_queue(txq->dev, skb_get_queue_mapping(skb)); |
63 | if (!netif_xmit_frozen_or_stopped(txq)) { | 61 | if (!netif_xmit_frozen_or_stopped(txq)) { |
64 | q->gso_skb = NULL; | 62 | q->gso_skb = NULL; |
65 | q->q.qlen--; | 63 | q->q.qlen--; |
66 | } else | 64 | } else |
67 | skb = NULL; | 65 | skb = NULL; |
68 | } else { | 66 | } else { |
69 | skb = q->dequeue(q); | 67 | if (!(q->flags & TCQ_F_ONETXQUEUE) || !netif_xmit_frozen_or_stopped(txq)) |
68 | skb = q->dequeue(q); | ||
70 | } | 69 | } |
71 | 70 | ||
72 | return skb; | 71 | return skb; |
@@ -686,6 +685,8 @@ static void attach_one_default_qdisc(struct net_device *dev, | |||
686 | netdev_info(dev, "activation failed\n"); | 685 | netdev_info(dev, "activation failed\n"); |
687 | return; | 686 | return; |
688 | } | 687 | } |
688 | if (!netif_is_multiqueue(dev)) | ||
689 | qdisc->flags |= TCQ_F_ONETXQUEUE; | ||
689 | } | 690 | } |
690 | dev_queue->qdisc_sleeping = qdisc; | 691 | dev_queue->qdisc_sleeping = qdisc; |
691 | } | 692 | } |