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);
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);
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)