bonding: fix alb mode locking regression

Fix locking issue in alb MAC address management; removed
incorrect locking and replaced with correct locking. This bug was
introduced in commit 059fe7a578fba5bbb0fdc0365bfcf6218fa25eb0
("bonding: Convert locks to _bh, rework alb locking for new locking")

Bug reported by Paul Smith <paul@mad-scientist.net>, who also
tested the fix.

Signed-off-by: Jay Vosburgh <fubar@us.ibm.com>
Signed-off-by: David S. Miller <davem@davemloft.net>

authored by Jay Vosburgh and committed by David S. Miller 815bcc27 9f722c09

+3 -9
+3 -9
drivers/net/bonding/bond_alb.c
··· 1706 1706 * Called with RTNL 1707 1707 */ 1708 1708 int bond_alb_set_mac_address(struct net_device *bond_dev, void *addr) 1709 - __releases(&bond->curr_slave_lock) 1710 - __releases(&bond->lock) 1711 1709 __acquires(&bond->lock) 1712 - __acquires(&bond->curr_slave_lock) 1710 + __releases(&bond->lock) 1713 1711 { 1714 1712 struct bonding *bond = netdev_priv(bond_dev); 1715 1713 struct sockaddr *sa = addr; ··· 1743 1745 } 1744 1746 } 1745 1747 1746 - write_unlock_bh(&bond->curr_slave_lock); 1747 - read_unlock(&bond->lock); 1748 - 1749 1748 if (swap_slave) { 1750 1749 alb_swap_mac_addr(bond, swap_slave, bond->curr_active_slave); 1751 1750 alb_fasten_mac_swap(bond, swap_slave, bond->curr_active_slave); ··· 1750 1755 alb_set_slave_mac_addr(bond->curr_active_slave, bond_dev->dev_addr, 1751 1756 bond->alb_info.rlb_enabled); 1752 1757 1758 + read_lock(&bond->lock); 1753 1759 alb_send_learning_packets(bond->curr_active_slave, bond_dev->dev_addr); 1754 1760 if (bond->alb_info.rlb_enabled) { 1755 1761 /* inform clients mac address has changed */ 1756 1762 rlb_req_update_slave_clients(bond, bond->curr_active_slave); 1757 1763 } 1764 + read_unlock(&bond->lock); 1758 1765 } 1759 - 1760 - read_lock(&bond->lock); 1761 - write_lock_bh(&bond->curr_slave_lock); 1762 1766 1763 1767 return 0; 1764 1768 }