diff options
Diffstat (limited to 'drivers/net/bonding/bond_main.c')
-rw-r--r-- | drivers/net/bonding/bond_main.c | 12 |
1 files changed, 7 insertions, 5 deletions
diff --git a/drivers/net/bonding/bond_main.c b/drivers/net/bonding/bond_main.c index f0f5eab0fab1..dcd331bd0c17 100644 --- a/drivers/net/bonding/bond_main.c +++ b/drivers/net/bonding/bond_main.c | |||
@@ -1687,13 +1687,15 @@ static int __bond_release_one(struct net_device *bond_dev, | |||
1687 | * for this slave anymore. | 1687 | * for this slave anymore. |
1688 | */ | 1688 | */ |
1689 | netdev_rx_handler_unregister(slave_dev); | 1689 | netdev_rx_handler_unregister(slave_dev); |
1690 | write_lock_bh(&bond->lock); | ||
1691 | 1690 | ||
1692 | /* Inform AD package of unbinding of slave. */ | 1691 | if (BOND_MODE(bond) == BOND_MODE_8023AD) { |
1693 | if (BOND_MODE(bond) == BOND_MODE_8023AD) | 1692 | /* Sync against bond_3ad_rx_indication and |
1693 | * bond_3ad_state_machine_handler | ||
1694 | */ | ||
1695 | write_lock_bh(&bond->curr_slave_lock); | ||
1694 | bond_3ad_unbind_slave(slave); | 1696 | bond_3ad_unbind_slave(slave); |
1695 | 1697 | write_unlock_bh(&bond->curr_slave_lock); | |
1696 | write_unlock_bh(&bond->lock); | 1698 | } |
1697 | 1699 | ||
1698 | netdev_info(bond_dev, "Releasing %s interface %s\n", | 1700 | netdev_info(bond_dev, "Releasing %s interface %s\n", |
1699 | bond_is_active_slave(slave) ? "active" : "backup", | 1701 | bond_is_active_slave(slave) ? "active" : "backup", |