diff options
author | Grant Likely <grant.likely@secretlab.ca> | 2011-11-04 07:32:20 +0400 |
---|---|---|
committer | Grant Likely <grant.likely@secretlab.ca> | 2011-11-04 07:32:20 +0400 |
commit | 3983138c017b6aeab6ce3dbb1e9afbe80bdac496 (patch) | |
tree | 9fdcddfdb8ada91504c90e2551ba6a565ade7325 /drivers/net/bonding/bond_alb.c | |
parent | ed5f886d16369fed5a69d96b8e85777c47206de1 (diff) | |
parent | 02aac316abf436a7529d46a71f7083f9f9ef4b49 (diff) | |
download | linux-3983138c017b6aeab6ce3dbb1e9afbe80bdac496.tar.xz |
Merge branch 'for-grant' of git://sources.calxeda.com/kernel/linux into devicetree/merge
Diffstat (limited to 'drivers/net/bonding/bond_alb.c')
-rw-r--r-- | drivers/net/bonding/bond_alb.c | 16 |
1 files changed, 7 insertions, 9 deletions
diff --git a/drivers/net/bonding/bond_alb.c b/drivers/net/bonding/bond_alb.c index d4fbd2e62616..106b88a04738 100644 --- a/drivers/net/bonding/bond_alb.c +++ b/drivers/net/bonding/bond_alb.c @@ -1343,10 +1343,6 @@ void bond_alb_monitor(struct work_struct *work) read_lock(&bond->lock); - if (bond->kill_timers) { - goto out; - } - if (bond->slave_cnt == 0) { bond_info->tx_rebalance_counter = 0; bond_info->lp_counter = 0; @@ -1401,10 +1397,13 @@ void bond_alb_monitor(struct work_struct *work) /* * dev_set_promiscuity requires rtnl and - * nothing else. + * nothing else. Avoid race with bond_close. */ read_unlock(&bond->lock); - rtnl_lock(); + if (!rtnl_trylock()) { + read_lock(&bond->lock); + goto re_arm; + } bond_info->rlb_promisc_timeout_counter = 0; @@ -1440,9 +1439,8 @@ void bond_alb_monitor(struct work_struct *work) } re_arm: - if (!bond->kill_timers) - queue_delayed_work(bond->wq, &bond->alb_work, alb_delta_in_ticks); -out: + queue_delayed_work(bond->wq, &bond->alb_work, alb_delta_in_ticks); + read_unlock(&bond->lock); } |