aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEric Dumazet <eric.dumazet@gmail.com>2009-09-03 05:19:58 -0400
committerDavid S. Miller <davem@davemloft.net>2009-09-03 05:19:58 -0400
commit2f8bc32b7a08502a79e0ccec8697000f2977f2fd (patch)
treec08fc64bc8b7cfe5b71d832ca9854f2dc21e6991
parentd1b19dff9159bb88fe839c30a7c071faf4761933 (diff)
vlan: enable multiqueue xmits
vlan_dev_hard_start_xmit() & vlan_dev_hwaccel_hard_start_xmit() select txqueue number 0, instead of using index provided by skb_get_queue_mapping(). This is not correct after commit 2e59af3dcbdf11635c03f [vlan: multiqueue vlan device] because txq->tx_packets & txq->tx_bytes changes are performed on a single location, and not the right locking. Fix is to take the appropriate struct netdev_queue pointer Signed-off-by: Eric Dumazet <eric.dumazet@gmail.com> Signed-off-by: David S. Miller <davem@davemloft.net>
-rw-r--r--net/8021q/vlan_dev.c6
1 files changed, 4 insertions, 2 deletions
diff --git a/net/8021q/vlan_dev.c b/net/8021q/vlan_dev.c
index 53f84c743928..3938c3e50fb1 100644
--- a/net/8021q/vlan_dev.c
+++ b/net/8021q/vlan_dev.c
@@ -291,7 +291,8 @@ static int vlan_dev_hard_header(struct sk_buff *skb, struct net_device *dev,
291static netdev_tx_t vlan_dev_hard_start_xmit(struct sk_buff *skb, 291static netdev_tx_t vlan_dev_hard_start_xmit(struct sk_buff *skb,
292 struct net_device *dev) 292 struct net_device *dev)
293{ 293{
294 struct netdev_queue *txq = netdev_get_tx_queue(dev, 0); 294 int i = skb_get_queue_mapping(skb);
295 struct netdev_queue *txq = netdev_get_tx_queue(dev, i);
295 struct vlan_ethhdr *veth = (struct vlan_ethhdr *)(skb->data); 296 struct vlan_ethhdr *veth = (struct vlan_ethhdr *)(skb->data);
296 297
297 /* Handle non-VLAN frames if they are sent to us, for example by DHCP. 298 /* Handle non-VLAN frames if they are sent to us, for example by DHCP.
@@ -329,7 +330,8 @@ static netdev_tx_t vlan_dev_hard_start_xmit(struct sk_buff *skb,
329static netdev_tx_t vlan_dev_hwaccel_hard_start_xmit(struct sk_buff *skb, 330static netdev_tx_t vlan_dev_hwaccel_hard_start_xmit(struct sk_buff *skb,
330 struct net_device *dev) 331 struct net_device *dev)
331{ 332{
332 struct netdev_queue *txq = netdev_get_tx_queue(dev, 0); 333 int i = skb_get_queue_mapping(skb);
334 struct netdev_queue *txq = netdev_get_tx_queue(dev, i);
333 u16 vlan_tci; 335 u16 vlan_tci;
334 336
335 vlan_tci = vlan_dev_info(dev)->vlan_id; 337 vlan_tci = vlan_dev_info(dev)->vlan_id;