diff options
Diffstat (limited to 'drivers/net/bonding')
-rw-r--r-- | drivers/net/bonding/bond_main.c | 6 |
1 files changed, 4 insertions, 2 deletions
diff --git a/drivers/net/bonding/bond_main.c b/drivers/net/bonding/bond_main.c index 532153db1f9c..d0aade04e49a 100644 --- a/drivers/net/bonding/bond_main.c +++ b/drivers/net/bonding/bond_main.c | |||
@@ -1917,14 +1917,16 @@ err_detach: | |||
1917 | bond_detach_slave(bond, new_slave); | 1917 | bond_detach_slave(bond, new_slave); |
1918 | if (bond->primary_slave == new_slave) | 1918 | if (bond->primary_slave == new_slave) |
1919 | bond->primary_slave = NULL; | 1919 | bond->primary_slave = NULL; |
1920 | write_unlock_bh(&bond->lock); | ||
1921 | if (bond->curr_active_slave == new_slave) { | 1920 | if (bond->curr_active_slave == new_slave) { |
1921 | bond_change_active_slave(bond, NULL); | ||
1922 | write_unlock_bh(&bond->lock); | ||
1922 | read_lock(&bond->lock); | 1923 | read_lock(&bond->lock); |
1923 | write_lock_bh(&bond->curr_slave_lock); | 1924 | write_lock_bh(&bond->curr_slave_lock); |
1924 | bond_change_active_slave(bond, NULL); | ||
1925 | bond_select_active_slave(bond); | 1925 | bond_select_active_slave(bond); |
1926 | write_unlock_bh(&bond->curr_slave_lock); | 1926 | write_unlock_bh(&bond->curr_slave_lock); |
1927 | read_unlock(&bond->lock); | 1927 | read_unlock(&bond->lock); |
1928 | } else { | ||
1929 | write_unlock_bh(&bond->lock); | ||
1928 | } | 1930 | } |
1929 | slave_disable_netpoll(new_slave); | 1931 | slave_disable_netpoll(new_slave); |
1930 | 1932 | ||