aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/net/bonding/bond_main.c3
-rw-r--r--drivers/net/team/team.c3
-rw-r--r--net/core/dev.c15
3 files changed, 11 insertions, 10 deletions
diff --git a/drivers/net/bonding/bond_main.c b/drivers/net/bonding/bond_main.c
index b9b34566b9b8..8575fee8b359 100644
--- a/drivers/net/bonding/bond_main.c
+++ b/drivers/net/bonding/bond_main.c
@@ -1526,6 +1526,9 @@ int bond_enslave(struct net_device *bond_dev, struct net_device *slave_dev)
1526 } 1526 }
1527#endif 1527#endif
1528 1528
1529 if (!(bond_dev->features & NETIF_F_LRO))
1530 dev_disable_lro(slave_dev);
1531
1529 res = netdev_rx_handler_register(slave_dev, bond_handle_frame, 1532 res = netdev_rx_handler_register(slave_dev, bond_handle_frame,
1530 new_slave); 1533 new_slave);
1531 if (res) { 1534 if (res) {
diff --git a/drivers/net/team/team.c b/drivers/net/team/team.c
index 2368395d8ae5..93e224217e24 100644
--- a/drivers/net/team/team.c
+++ b/drivers/net/team/team.c
@@ -1179,6 +1179,9 @@ static int team_port_add(struct team *team, struct net_device *port_dev)
1179 goto err_enable_netpoll; 1179 goto err_enable_netpoll;
1180 } 1180 }
1181 1181
1182 if (!(dev->features & NETIF_F_LRO))
1183 dev_disable_lro(port_dev);
1184
1182 err = netdev_rx_handler_register(port_dev, team_handle_frame, 1185 err = netdev_rx_handler_register(port_dev, team_handle_frame,
1183 port); 1186 port);
1184 if (err) { 1187 if (err) {
diff --git a/net/core/dev.c b/net/core/dev.c
index bb09b0364619..1ab168e0fdf7 100644
--- a/net/core/dev.c
+++ b/net/core/dev.c
@@ -1437,22 +1437,17 @@ EXPORT_SYMBOL(dev_close);
1437 */ 1437 */
1438void dev_disable_lro(struct net_device *dev) 1438void dev_disable_lro(struct net_device *dev)
1439{ 1439{
1440 /* 1440 struct net_device *lower_dev;
1441 * If we're trying to disable lro on a vlan device 1441 struct list_head *iter;
1442 * use the underlying physical device instead
1443 */
1444 if (is_vlan_dev(dev))
1445 dev = vlan_dev_real_dev(dev);
1446
1447 /* the same for macvlan devices */
1448 if (netif_is_macvlan(dev))
1449 dev = macvlan_dev_real_dev(dev);
1450 1442
1451 dev->wanted_features &= ~NETIF_F_LRO; 1443 dev->wanted_features &= ~NETIF_F_LRO;
1452 netdev_update_features(dev); 1444 netdev_update_features(dev);
1453 1445
1454 if (unlikely(dev->features & NETIF_F_LRO)) 1446 if (unlikely(dev->features & NETIF_F_LRO))
1455 netdev_WARN(dev, "failed to disable LRO!\n"); 1447 netdev_WARN(dev, "failed to disable LRO!\n");
1448
1449 netdev_for_each_lower_dev(dev, lower_dev, iter)
1450 dev_disable_lro(lower_dev);
1456} 1451}
1457EXPORT_SYMBOL(dev_disable_lro); 1452EXPORT_SYMBOL(dev_disable_lro);
1458 1453