[PATCH 4.9 305/310] team: move dev_mc_sync after master_upper_dev_link in team_port_add

2018-04-11 Thread Greg Kroah-Hartman
4.9-stable review patch.  If anyone has any objections, please let me know.

--

From: Xin Long 


[ Upstream commit 982cf3b3999d39a2eaca0a65542df33c19b5d814 ]

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 
Acked-by: Jiri Pirko 
Signed-off-by: David S. Miller 
Signed-off-by: Greg Kroah-Hartman 
---
 drivers/net/team/team.c |   12 +---
 1 file changed, 5 insertions(+), 7 deletions(-)

--- a/drivers/net/team/team.c
+++ b/drivers/net/team/team.c
@@ -1203,11 +1203,6 @@ static int team_port_add(struct team *te
goto err_dev_open;
}
 
-   netif_addr_lock_bh(dev);
-   dev_uc_sync_multiple(port_dev, dev);
-   dev_mc_sync_multiple(port_dev, dev);
-   netif_addr_unlock_bh(dev);
-
err = vlan_vids_add_by_dev(port_dev, dev);
if (err) {
netdev_err(dev, "Failed to add vlan ids to device %s\n",
@@ -1247,6 +1242,11 @@ static int team_port_add(struct team *te
goto err_option_port_add;
}
 
+   netif_addr_lock_bh(dev);
+   dev_uc_sync_multiple(port_dev, dev);
+   dev_mc_sync_multiple(port_dev, dev);
+   netif_addr_unlock_bh(dev);
+
port->index = -1;
list_add_tail_rcu(>list, >port_list);
team_port_enable(team, port);
@@ -1271,8 +1271,6 @@ err_enable_netpoll:
vlan_vids_del_by_dev(port_dev, dev);
 
 err_vids_add:
-   dev_uc_unsync(port_dev, dev);
-   dev_mc_unsync(port_dev, dev);
dev_close(port_dev);
 
 err_dev_open:




[PATCH 4.9 305/310] team: move dev_mc_sync after master_upper_dev_link in team_port_add

2018-04-11 Thread Greg Kroah-Hartman
4.9-stable review patch.  If anyone has any objections, please let me know.

--

From: Xin Long 


[ Upstream commit 982cf3b3999d39a2eaca0a65542df33c19b5d814 ]

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 
Acked-by: Jiri Pirko 
Signed-off-by: David S. Miller 
Signed-off-by: Greg Kroah-Hartman 
---
 drivers/net/team/team.c |   12 +---
 1 file changed, 5 insertions(+), 7 deletions(-)

--- a/drivers/net/team/team.c
+++ b/drivers/net/team/team.c
@@ -1203,11 +1203,6 @@ static int team_port_add(struct team *te
goto err_dev_open;
}
 
-   netif_addr_lock_bh(dev);
-   dev_uc_sync_multiple(port_dev, dev);
-   dev_mc_sync_multiple(port_dev, dev);
-   netif_addr_unlock_bh(dev);
-
err = vlan_vids_add_by_dev(port_dev, dev);
if (err) {
netdev_err(dev, "Failed to add vlan ids to device %s\n",
@@ -1247,6 +1242,11 @@ static int team_port_add(struct team *te
goto err_option_port_add;
}
 
+   netif_addr_lock_bh(dev);
+   dev_uc_sync_multiple(port_dev, dev);
+   dev_mc_sync_multiple(port_dev, dev);
+   netif_addr_unlock_bh(dev);
+
port->index = -1;
list_add_tail_rcu(>list, >port_list);
team_port_enable(team, port);
@@ -1271,8 +1271,6 @@ err_enable_netpoll:
vlan_vids_del_by_dev(port_dev, dev);
 
 err_vids_add:
-   dev_uc_unsync(port_dev, dev);
-   dev_mc_unsync(port_dev, dev);
dev_close(port_dev);
 
 err_dev_open: