Merge git://git.kernel.org/pub/scm/linux/kernel/git/jejb/scsi-rc-fixes-2.6
[GitHub/mt8127/android_kernel_alcatel_ttab.git] / net / core / dev.c
index ec11d757c1fc2a87221afb50490eb1a8117aac66..939307891e71ed36fcc888ea3194f57b7026c6cc 100644 (file)
@@ -1308,6 +1308,13 @@ void dev_disable_lro(struct net_device *dev)
 {
        u32 flags;
 
+       /*
+        * If we're trying to disable lro on a vlan device
+        * use the underlying physical device instead
+        */
+       if (is_vlan_dev(dev))
+               dev = vlan_dev_real_dev(dev);
+
        if (dev->ethtool_ops && dev->ethtool_ops->get_flags)
                flags = dev->ethtool_ops->get_flags(dev);
        else
@@ -2089,6 +2096,7 @@ int dev_hard_start_xmit(struct sk_buff *skb, struct net_device *dev,
 {
        const struct net_device_ops *ops = dev->netdev_ops;
        int rc = NETDEV_TX_OK;
+       unsigned int skb_len;
 
        if (likely(!skb->next)) {
                u32 features;
@@ -2139,8 +2147,9 @@ int dev_hard_start_xmit(struct sk_buff *skb, struct net_device *dev,
                        }
                }
 
+               skb_len = skb->len;
                rc = ops->ndo_start_xmit(skb, dev);
-               trace_net_dev_xmit(skb, rc);
+               trace_net_dev_xmit(skb, rc, dev, skb_len);
                if (rc == NETDEV_TX_OK)
                        txq_trans_update(txq);
                return rc;
@@ -2160,8 +2169,9 @@ gso:
                if (dev->priv_flags & IFF_XMIT_DST_RELEASE)
                        skb_dst_drop(nskb);
 
+               skb_len = nskb->len;
                rc = ops->ndo_start_xmit(nskb, dev);
-               trace_net_dev_xmit(nskb, rc);
+               trace_net_dev_xmit(nskb, rc, dev, skb_len);
                if (unlikely(rc != NETDEV_TX_OK)) {
                        if (rc & ~NETDEV_TX_MASK)
                                goto out_kfree_gso_skb;