Message ID | 4A9F8999.1060404@gmail.com |
---|---|
State | Accepted, archived |
Delegated to: | David Miller |
Headers | show |
From: Eric Dumazet <eric.dumazet@gmail.com> Date: Thu, 03 Sep 2009 11:17:13 +0200 > [PATCH net-next-2.6] 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> Details details :-) Looks good, applied! -- To unsubscribe from this list: send the line "unsubscribe netdev" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
diff --git a/net/8021q/vlan_dev.c b/net/8021q/vlan_dev.c index 53f84c7..3938c3e 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, static netdev_tx_t vlan_dev_hard_start_xmit(struct sk_buff *skb, struct net_device *dev) { - struct netdev_queue *txq = netdev_get_tx_queue(dev, 0); + int i = skb_get_queue_mapping(skb); + struct netdev_queue *txq = netdev_get_tx_queue(dev, i); struct vlan_ethhdr *veth = (struct vlan_ethhdr *)(skb->data); /* 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, static netdev_tx_t vlan_dev_hwaccel_hard_start_xmit(struct sk_buff *skb, struct net_device *dev) { - struct netdev_queue *txq = netdev_get_tx_queue(dev, 0); + int i = skb_get_queue_mapping(skb); + struct netdev_queue *txq = netdev_get_tx_queue(dev, i); u16 vlan_tci; vlan_tci = vlan_dev_info(dev)->vlan_id;