diff options
| -rw-r--r-- | drivers/net/bonding/bond_main.c | 16 |
1 files changed, 9 insertions, 7 deletions
diff --git a/drivers/net/bonding/bond_main.c b/drivers/net/bonding/bond_main.c index 16418e1dc10a..98f391ac761f 100644 --- a/drivers/net/bonding/bond_main.c +++ b/drivers/net/bonding/bond_main.c @@ -3759,7 +3759,7 @@ check_state: static void bond_activebackup_arp_mon(struct bonding *bond) { - bool should_notify_rtnl = false; + bool should_notify_rtnl; int delta_in_ticks; delta_in_ticks = msecs_to_jiffies(bond->params.arp_interval); @@ -3787,13 +3787,11 @@ static void bond_activebackup_arp_mon(struct bonding *bond) should_notify_rtnl = bond_ab_arp_probe(bond); rcu_read_unlock(); -re_arm: - if (bond->params.arp_interval) - queue_delayed_work(bond->wq, &bond->arp_work, delta_in_ticks); - if (bond->send_peer_notif || should_notify_rtnl) { - if (!rtnl_trylock()) - return; + if (!rtnl_trylock()) { + delta_in_ticks = 1; + goto re_arm; + } if (bond->send_peer_notif) bond_peer_notify_may_events(bond, true); @@ -3805,6 +3803,10 @@ re_arm: rtnl_unlock(); } + +re_arm: + if (bond->params.arp_interval) + queue_delayed_work(bond->wq, &bond->arp_work, delta_in_ticks); } static void bond_arp_monitor(struct work_struct *work) |
