diff options
author | Jay Vosburgh <fubar@us.ibm.com> | 2008-01-17 16:25:03 -0800 |
---|---|---|
committer | Jeff Garzik <jeff@garzik.org> | 2008-01-18 14:38:39 -0500 |
commit | 5655662dab4ef044be7efd155f2f5fef2e486545 (patch) | |
tree | d4003635df3c8cba3554e023d831ff8d4e5828e5 | |
parent | 027ea0416c955778ceca7ef82e48a1dd6b4617c9 (diff) | |
download | op-kernel-dev-5655662dab4ef044be7efd155f2f5fef2e486545.zip op-kernel-dev-5655662dab4ef044be7efd155f2f5fef2e486545.tar.gz |
bonding: Don't hold lock when calling rtnl_unlock
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>
-rw-r--r-- | drivers/net/bonding/bond_main.c | 4 |
1 files changed, 3 insertions, 1 deletions
diff --git a/drivers/net/bonding/bond_main.c b/drivers/net/bonding/bond_main.c index 2c6da49..49a1982 100644 --- a/drivers/net/bonding/bond_main.c +++ b/drivers/net/bonding/bond_main.c @@ -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; |