1 From foo@baz Tue Apr 10 23:19:36 CEST 2018
2 From: Xin Long <lucien.xin@gmail.com>
3 Date: Mon, 26 Mar 2018 01:25:06 +0800
4 Subject: team: move dev_mc_sync after master_upper_dev_link in team_port_add
6 From: Xin Long <lucien.xin@gmail.com>
9 [ Upstream commit 982cf3b3999d39a2eaca0a65542df33c19b5d814 ]
11 The same fix as in 'bonding: move dev_mc_sync after master_upper_dev_link
12 in bond_enslave' is needed for team driver.
14 The panic can be reproduced easily:
16 ip link add team1 type team
18 ip link add link team1 vlan1 type vlan id 80
19 ip link set vlan1 master team1
21 Fixes: cb41c997d444 ("team: team should sync the port's uc/mc addrs when add a port")
22 Signed-off-by: Xin Long <lucien.xin@gmail.com>
23 Acked-by: Jiri Pirko <jiri@mellanox.com>
24 Signed-off-by: David S. Miller <davem@davemloft.net>
25 Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
27 drivers/net/team/team.c | 12 +++++-------
28 1 file changed, 5 insertions(+), 7 deletions(-)
30 --- a/drivers/net/team/team.c
31 +++ b/drivers/net/team/team.c
32 @@ -1197,11 +1197,6 @@ static int team_port_add(struct team *te
36 - netif_addr_lock_bh(dev);
37 - dev_uc_sync_multiple(port_dev, dev);
38 - dev_mc_sync_multiple(port_dev, dev);
39 - netif_addr_unlock_bh(dev);
41 err = vlan_vids_add_by_dev(port_dev, dev);
43 netdev_err(dev, "Failed to add vlan ids to device %s\n",
44 @@ -1241,6 +1236,11 @@ static int team_port_add(struct team *te
45 goto err_option_port_add;
48 + netif_addr_lock_bh(dev);
49 + dev_uc_sync_multiple(port_dev, dev);
50 + dev_mc_sync_multiple(port_dev, dev);
51 + netif_addr_unlock_bh(dev);
54 list_add_tail_rcu(&port->list, &team->port_list);
55 team_port_enable(team, port);
56 @@ -1265,8 +1265,6 @@ err_enable_netpoll:
57 vlan_vids_del_by_dev(port_dev, dev);
60 - dev_uc_unsync(port_dev, dev);
61 - dev_mc_unsync(port_dev, dev);