Răsfoiți Sursa

bonding: fix rtnl locking merge error

	Looks like I incorrectly merged one of the rtnl lock changes,
so that one function, bonding_show_active_slave, held rtnl but didn't
release it, and another, bonding_store_active_slave, never held rtnl but
did release it.

	Fixed so the first function doesn't mess with rtnl, and the
second correctly acquires and releases rtnl.

	Bug reported by Moni Shoua <monis@voltaire.com>

Signed-off-by: Jay Vosburgh <fubar@us.ibm.com>
Signed-off-by: Jeff Garzik <jeff@garzik.org>
Jay Vosburgh 17 ani în urmă
părinte
comite
1466a21997
1 a modificat fișierele cu 2 adăugiri și 2 ștergeri
  1. 2 2
      drivers/net/bonding/bond_sysfs.c

+ 2 - 2
drivers/net/bonding/bond_sysfs.c

@@ -1193,8 +1193,6 @@ static ssize_t bonding_show_active_slave(struct device *d,
 	struct bonding *bond = to_bond(d);
 	struct bonding *bond = to_bond(d);
 	int count;
 	int count;
 
 
-	rtnl_lock();
-
 	read_lock(&bond->curr_slave_lock);
 	read_lock(&bond->curr_slave_lock);
 	curr = bond->curr_active_slave;
 	curr = bond->curr_active_slave;
 	read_unlock(&bond->curr_slave_lock);
 	read_unlock(&bond->curr_slave_lock);
@@ -1216,7 +1214,9 @@ static ssize_t bonding_store_active_slave(struct device *d,
         struct slave *new_active = NULL;
         struct slave *new_active = NULL;
 	struct bonding *bond = to_bond(d);
 	struct bonding *bond = to_bond(d);
 
 
+	rtnl_lock();
 	write_lock_bh(&bond->lock);
 	write_lock_bh(&bond->lock);
+
 	if (!USES_PRIMARY(bond->params.mode)) {
 	if (!USES_PRIMARY(bond->params.mode)) {
 		printk(KERN_INFO DRV_NAME
 		printk(KERN_INFO DRV_NAME
 		       ": %s: Unable to change active slave; %s is in mode %d\n",
 		       ": %s: Unable to change active slave; %s is in mode %d\n",