diff options
-rw-r--r-- | drivers/net/bonding/bond_main.c | 11 |
1 files changed, 9 insertions, 2 deletions
diff --git a/drivers/net/bonding/bond_main.c b/drivers/net/bonding/bond_main.c index 3ad4f501949e..a93d9417dc15 100644 --- a/drivers/net/bonding/bond_main.c +++ b/drivers/net/bonding/bond_main.c | |||
@@ -4341,11 +4341,18 @@ static u16 bond_select_queue(struct net_device *dev, struct sk_buff *skb) | |||
4341 | { | 4341 | { |
4342 | /* | 4342 | /* |
4343 | * This helper function exists to help dev_pick_tx get the correct | 4343 | * This helper function exists to help dev_pick_tx get the correct |
4344 | * destination queue. Using a helper function skips the a call to | 4344 | * destination queue. Using a helper function skips a call to |
4345 | * skb_tx_hash and will put the skbs in the queue we expect on their | 4345 | * skb_tx_hash and will put the skbs in the queue we expect on their |
4346 | * way down to the bonding driver. | 4346 | * way down to the bonding driver. |
4347 | */ | 4347 | */ |
4348 | return skb->queue_mapping; | 4348 | u16 txq = skb_rx_queue_recorded(skb) ? skb_get_rx_queue(skb) : 0; |
4349 | |||
4350 | if (unlikely(txq >= dev->real_num_tx_queues)) { | ||
4351 | do | ||
4352 | txq -= dev->real_num_tx_queues; | ||
4353 | while (txq >= dev->real_num_tx_queues); | ||
4354 | } | ||
4355 | return txq; | ||
4349 | } | 4356 | } |
4350 | 4357 | ||
4351 | static netdev_tx_t bond_start_xmit(struct sk_buff *skb, struct net_device *dev) | 4358 | static netdev_tx_t bond_start_xmit(struct sk_buff *skb, struct net_device *dev) |