|
@@ -1437,22 +1437,17 @@ EXPORT_SYMBOL(dev_close);
|
|
|
*/
|
|
|
void dev_disable_lro(struct net_device *dev)
|
|
|
{
|
|
|
- /*
|
|
|
- * 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);
|
|
|
-
|
|
|
- /* the same for macvlan devices */
|
|
|
- if (netif_is_macvlan(dev))
|
|
|
- dev = macvlan_dev_real_dev(dev);
|
|
|
+ struct net_device *lower_dev;
|
|
|
+ struct list_head *iter;
|
|
|
|
|
|
dev->wanted_features &= ~NETIF_F_LRO;
|
|
|
netdev_update_features(dev);
|
|
|
|
|
|
if (unlikely(dev->features & NETIF_F_LRO))
|
|
|
netdev_WARN(dev, "failed to disable LRO!\n");
|
|
|
+
|
|
|
+ netdev_for_each_lower_dev(dev, lower_dev, iter)
|
|
|
+ dev_disable_lro(lower_dev);
|
|
|
}
|
|
|
EXPORT_SYMBOL(dev_disable_lro);
|
|
|
|