aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/bonding/bond_main.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/net/bonding/bond_main.c')
-rw-r--r--drivers/net/bonding/bond_main.c24
1 files changed, 8 insertions, 16 deletions
diff --git a/drivers/net/bonding/bond_main.c b/drivers/net/bonding/bond_main.c
index ea71abd6f728..fd87dbe7999a 100644
--- a/drivers/net/bonding/bond_main.c
+++ b/drivers/net/bonding/bond_main.c
@@ -1567,14 +1567,12 @@ int bond_enslave(struct net_device *bond_dev, struct net_device *slave_dev)
1567 goto err_close; 1567 goto err_close;
1568 } 1568 }
1569 1569
1570 netif_tx_lock_bh(bond_dev); 1570 netif_addr_lock_bh(bond_dev);
1571 netif_addr_lock(bond_dev);
1572 /* upload master's mc_list to new slave */ 1571 /* upload master's mc_list to new slave */
1573 for (dmi = bond_dev->mc_list; dmi; dmi = dmi->next) { 1572 for (dmi = bond_dev->mc_list; dmi; dmi = dmi->next) {
1574 dev_mc_add (slave_dev, dmi->dmi_addr, dmi->dmi_addrlen, 0); 1573 dev_mc_add (slave_dev, dmi->dmi_addr, dmi->dmi_addrlen, 0);
1575 } 1574 }
1576 netif_addr_unlock(bond_dev); 1575 netif_addr_unlock_bh(bond_dev);
1577 netif_tx_unlock_bh(bond_dev);
1578 } 1576 }
1579 1577
1580 if (bond->params.mode == BOND_MODE_8023AD) { 1578 if (bond->params.mode == BOND_MODE_8023AD) {
@@ -1938,11 +1936,9 @@ int bond_release(struct net_device *bond_dev, struct net_device *slave_dev)
1938 } 1936 }
1939 1937
1940 /* flush master's mc_list from slave */ 1938 /* flush master's mc_list from slave */
1941 netif_tx_lock_bh(bond_dev); 1939 netif_addr_lock_bh(bond_dev);
1942 netif_addr_lock(bond_dev);
1943 bond_mc_list_flush(bond_dev, slave_dev); 1940 bond_mc_list_flush(bond_dev, slave_dev);
1944 netif_addr_unlock(bond_dev); 1941 netif_addr_unlock_bh(bond_dev);
1945 netif_tx_unlock_bh(bond_dev);
1946 } 1942 }
1947 1943
1948 netdev_set_master(slave_dev, NULL); 1944 netdev_set_master(slave_dev, NULL);
@@ -2063,11 +2059,9 @@ static int bond_release_all(struct net_device *bond_dev)
2063 } 2059 }
2064 2060
2065 /* flush master's mc_list from slave */ 2061 /* flush master's mc_list from slave */
2066 netif_tx_lock_bh(bond_dev); 2062 netif_addr_lock_bh(bond_dev);
2067 netif_addr_lock(bond_dev);
2068 bond_mc_list_flush(bond_dev, slave_dev); 2063 bond_mc_list_flush(bond_dev, slave_dev);
2069 netif_addr_unlock(bond_dev); 2064 netif_addr_unlock_bh(bond_dev);
2070 netif_tx_unlock_bh(bond_dev);
2071 } 2065 }
2072 2066
2073 netdev_set_master(slave_dev, NULL); 2067 netdev_set_master(slave_dev, NULL);
@@ -4679,11 +4673,9 @@ static void bond_free_all(void)
4679 struct net_device *bond_dev = bond->dev; 4673 struct net_device *bond_dev = bond->dev;
4680 4674
4681 bond_work_cancel_all(bond); 4675 bond_work_cancel_all(bond);
4682 netif_tx_lock_bh(bond_dev); 4676 netif_addr_lock_bh(bond_dev);
4683 netif_addr_lock(bond_dev);
4684 bond_mc_list_destroy(bond); 4677 bond_mc_list_destroy(bond);
4685 netif_addr_unlock(bond_dev); 4678 netif_addr_unlock_bh(bond_dev);
4686 netif_tx_unlock_bh(bond_dev);
4687 /* Release the bonded slaves */ 4679 /* Release the bonded slaves */
4688 bond_release_all(bond_dev); 4680 bond_release_all(bond_dev);
4689 bond_destroy(bond); 4681 bond_destroy(bond);