aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorXin Long <lucien.xin@gmail.com>2018-03-25 13:25:06 -0400
committerDavid S. Miller <davem@davemloft.net>2018-03-26 12:51:45 -0400
commit982cf3b3999d39a2eaca0a65542df33c19b5d814 (patch)
tree36d984cbe955ff04323c64fa4032c16809f2daa7
parente49c78f4aa1d3985226a61edcd48dc002227581f (diff)
team: move dev_mc_sync after master_upper_dev_link in team_port_add
The same fix as in 'bonding: move dev_mc_sync after master_upper_dev_link in bond_enslave' is needed for team driver. The panic can be reproduced easily: ip link add team1 type team ip link set team1 up ip link add link team1 vlan1 type vlan id 80 ip link set vlan1 master team1 Fixes: cb41c997d444 ("team: team should sync the port's uc/mc addrs when add a port") Signed-off-by: Xin Long <lucien.xin@gmail.com> Acked-by: Jiri Pirko <jiri@mellanox.com> Signed-off-by: David S. Miller <davem@davemloft.net>
-rw-r--r--drivers/net/team/team.c12
1 files changed, 5 insertions, 7 deletions
diff --git a/drivers/net/team/team.c b/drivers/net/team/team.c
index 56c701b73c12..befed2d22bf4 100644
--- a/drivers/net/team/team.c
+++ b/drivers/net/team/team.c
@@ -1197,11 +1197,6 @@ static int team_port_add(struct team *team, struct net_device *port_dev)
1197 goto err_dev_open; 1197 goto err_dev_open;
1198 } 1198 }
1199 1199
1200 netif_addr_lock_bh(dev);
1201 dev_uc_sync_multiple(port_dev, dev);
1202 dev_mc_sync_multiple(port_dev, dev);
1203 netif_addr_unlock_bh(dev);
1204
1205 err = vlan_vids_add_by_dev(port_dev, dev); 1200 err = vlan_vids_add_by_dev(port_dev, dev);
1206 if (err) { 1201 if (err) {
1207 netdev_err(dev, "Failed to add vlan ids to device %s\n", 1202 netdev_err(dev, "Failed to add vlan ids to device %s\n",
@@ -1241,6 +1236,11 @@ static int team_port_add(struct team *team, struct net_device *port_dev)
1241 goto err_option_port_add; 1236 goto err_option_port_add;
1242 } 1237 }
1243 1238
1239 netif_addr_lock_bh(dev);
1240 dev_uc_sync_multiple(port_dev, dev);
1241 dev_mc_sync_multiple(port_dev, dev);
1242 netif_addr_unlock_bh(dev);
1243
1244 port->index = -1; 1244 port->index = -1;
1245 list_add_tail_rcu(&port->list, &team->port_list); 1245 list_add_tail_rcu(&port->list, &team->port_list);
1246 team_port_enable(team, port); 1246 team_port_enable(team, port);
@@ -1265,8 +1265,6 @@ err_enable_netpoll:
1265 vlan_vids_del_by_dev(port_dev, dev); 1265 vlan_vids_del_by_dev(port_dev, dev);
1266 1266
1267err_vids_add: 1267err_vids_add:
1268 dev_uc_unsync(port_dev, dev);
1269 dev_mc_unsync(port_dev, dev);
1270 dev_close(port_dev); 1268 dev_close(port_dev);
1271 1269
1272err_dev_open: 1270err_dev_open: