projects
/
GitHub
/
mt8127
/
android_kernel_alcatel_ttab.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
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
diff --git
a/net/core/dev.c
b/net/core/dev.c
index bcb05cb799c11ff4373ca112b3c3b62a46d55ad2..939307891e71ed36fcc888ea3194f57b7026c6cc 100644
(file)
--- a/
net/core/dev.c
+++ b/
net/core/dev.c
@@
-1308,6
+1308,13
@@
void dev_disable_lro(struct net_device *dev)
{
u32 flags;
{
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
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;
{
const struct net_device_ops *ops = dev->netdev_ops;
int rc = NETDEV_TX_OK;
+ unsigned int skb_len;
if (likely(!skb->next)) {
u32 features;
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);
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;
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);
if (dev->priv_flags & IFF_XMIT_DST_RELEASE)
skb_dst_drop(nskb);
+ skb_len = nskb->len;
rc = ops->ndo_start_xmit(nskb, dev);
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;
if (unlikely(rc != NETDEV_TX_OK)) {
if (rc & ~NETDEV_TX_MASK)
goto out_kfree_gso_skb;
@@
-5954,7
+5964,10
@@
EXPORT_SYMBOL(free_netdev);
void synchronize_net(void)
{
might_sleep();
void synchronize_net(void)
{
might_sleep();
- synchronize_rcu();
+ if (rtnl_is_locked())
+ synchronize_rcu_expedited();
+ else
+ synchronize_rcu();
}
EXPORT_SYMBOL(synchronize_net);
}
EXPORT_SYMBOL(synchronize_net);