]> err.no Git - linux-2.6/commitdiff
bonding: Don't hold lock when calling rtnl_unlock
authorJay Vosburgh <fubar@us.ibm.com>
Fri, 18 Jan 2008 00:25:03 +0000 (16:25 -0800)
committerJeff Garzik <jeff@garzik.org>
Fri, 18 Jan 2008 19:38:39 +0000 (14:38 -0500)
Change bond_mii_monitor to not hold any locks when calling rtnl_unlock,
as rtnl_unlock can sleep (when acquring another mutex in netdev_run_todo).

Bug reported by Makito SHIOKAWA <mshiokawa@miraclelinux.com>, who
included a different patch.

Signed-off-by: Jay Vosburgh <fubar@us.ibm.com>
Signed-off-by: Jeff Garzik <jeff@garzik.org>
drivers/net/bonding/bond_main.c

index 2c6da49693824866ac48e1eea9ff0a0d25c295de..49a198206e3de901a74f34fc40694bb056ad922c 100644 (file)
@@ -2386,7 +2386,9 @@ void bond_mii_monitor(struct work_struct *work)
                rtnl_lock();
                read_lock(&bond->lock);
                __bond_mii_monitor(bond, 1);
-               rtnl_unlock();
+               read_unlock(&bond->lock);
+               rtnl_unlock();  /* might sleep, hold no other locks */
+               read_lock(&bond->lock);
        }
 
        delay = ((bond->params.miimon * HZ) / 1000) ? : 1;