diff options
Diffstat (limited to 'net/core/dev.c')
-rw-r--r-- | net/core/dev.c | 12 |
1 files changed, 11 insertions, 1 deletions
diff --git a/net/core/dev.c b/net/core/dev.c index bcb05cb799c1..c7e305d13b71 100644 --- a/net/core/dev.c +++ b/net/core/dev.c | |||
@@ -1308,6 +1308,13 @@ void dev_disable_lro(struct net_device *dev) | |||
1308 | { | 1308 | { |
1309 | u32 flags; | 1309 | u32 flags; |
1310 | 1310 | ||
1311 | /* | ||
1312 | * If we're trying to disable lro on a vlan device | ||
1313 | * use the underlying physical device instead | ||
1314 | */ | ||
1315 | if (is_vlan_dev(dev)) | ||
1316 | dev = vlan_dev_real_dev(dev); | ||
1317 | |||
1311 | if (dev->ethtool_ops && dev->ethtool_ops->get_flags) | 1318 | if (dev->ethtool_ops && dev->ethtool_ops->get_flags) |
1312 | flags = dev->ethtool_ops->get_flags(dev); | 1319 | flags = dev->ethtool_ops->get_flags(dev); |
1313 | else | 1320 | else |
@@ -5954,7 +5961,10 @@ EXPORT_SYMBOL(free_netdev); | |||
5954 | void synchronize_net(void) | 5961 | void synchronize_net(void) |
5955 | { | 5962 | { |
5956 | might_sleep(); | 5963 | might_sleep(); |
5957 | synchronize_rcu(); | 5964 | if (rtnl_is_locked()) |
5965 | synchronize_rcu_expedited(); | ||
5966 | else | ||
5967 | synchronize_rcu(); | ||
5958 | } | 5968 | } |
5959 | EXPORT_SYMBOL(synchronize_net); | 5969 | EXPORT_SYMBOL(synchronize_net); |
5960 | 5970 | ||