Messages in this thread Patch in this message | | | Date | Fri, 28 May 2010 16:16:34 +0800 | From | Cong Wang <> | Subject | Re: [v5 Patch 1/3] netpoll: add generic support for bridge and bonding devices |
| |
On 05/28/10 02:05, Flavio Leitner wrote: > > Hi guys! > > I finally could test this to see if an old problem reported on bugzilla[1] was > fixed now, but unfortunately it is still there. > > The ticket is private I guess, but basically the problem happens when bonding > driver tries to print something after it had taken the write_lock (monitor > functions, enslave/de-enslave), so the printk() will pass through netpoll, then > on bonding again which no matter what mode you use, it will try to read_lock() > the lock again. The result is a deadlock and the entire system hangs. >
Does the attached patch fix this hang?
Thanks!
----------------------->
We should notify netconsole that bond is changing its slaves when we use active-backup mode.
Signed-off-by: WANG Cong <amwang@redhat.com>
----
diff --git a/drivers/net/bonding/bond_main.c b/drivers/net/bonding/bond_main.c index 5e12462..9494c02 100644 --- a/drivers/net/bonding/bond_main.c +++ b/drivers/net/bonding/bond_main.c @@ -1199,6 +1199,7 @@ void bond_select_active_slave(struct bonding *bond) best_slave = bond_find_best_slave(bond); if (best_slave != bond->curr_active_slave) { + netdev_bonding_change(bond->dev, NETDEV_BONDING_DESLAVE); bond_change_active_slave(bond, best_slave); rv = bond_set_carrier(bond); if (!rv) @@ -2154,6 +2155,7 @@ static int bond_ioctl_change_active(struct net_device *bond_dev, struct net_devi (old_active) && (new_active->link == BOND_LINK_UP) && IS_UP(new_active->dev)) { + netdev_bonding_change(bond->dev, NETDEV_BONDING_DESLAVE); write_lock_bh(&bond->curr_slave_lock); bond_change_active_slave(bond, new_active); write_unlock_bh(&bond->curr_slave_lock); | |