Re: [PATCH] bonding: bond_select_queue off by one
From: Ben Hutchings <hidden>
Date: 2011-02-18 03:46:38
On Thu, 2011-02-17 at 18:07 -0800, Phil Oester wrote:
The bonding driver's bond_select_queue function simply returns skb->queue_mapping. However queue_mapping could be == 16 for queue #16. This causes the following message to be flooded to syslog: kernel: bondx selects TX queue 16, but real number of TX queues is 16 ndo_select_queue wants a zero-based number, so bonding driver needs to subtract one to return the proper queue number. Also fix grammar in a comment while in the vicinity. Phil Oester Signed-off-by: Phil Oester <redacted>
quoted hunk ↗ jump to hunk
--- linux-2.6/drivers/net/bonding/bond_main.c.orig 2011-01-30 09:15:09.813843817 -0800 +++ linux-2.6/drivers/net/bonding/bond_main.c 2011-02-17 18:02:46.919050909 -0800@@ -4537,11 +4537,11 @@ { /* * This helper function exists to help dev_pick_tx get the correct - * destination queue. Using a helper function skips the a call to + * destination queue. Using a helper function skips a call to * skb_tx_hash and will put the skbs in the queue we expect on their * way down to the bonding driver. */ - return skb->queue_mapping; + return skb->queue_mapping ? skb->queue_mapping - 1 : 0; } static netdev_tx_t bond_start_xmit(struct sk_buff *skb, struct net_device *dev)
This looks basically correct, but it should use the proper functions: skb_rx_queue_recorded(skb) ? skb_get_rx_queue(skb) : 0; Ben. -- Ben Hutchings, Senior Software Engineer, Solarflare Communications Not speaking for my employer; that's the marketing department's job. They asked us to note that Solarflare product names are trademarked.