neigh: support smaller retrans_time settting
Currently, we limited the retrans_time to be greater than HZ/2. i.e. setting retrans_time less than 500ms will not work. This makes the user unable to achieve a more accurate control for bonding arp fast failover. Update the sanity check to HZ/100, which is 10ms, to let users have more ability on the retrans_time control. v3: sync the behavior with IPv6 and update all the timer handler v2: use HZ instead of hard code number Signed-off-by: Hangbin Liu <liuhangbin@gmail.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:

committed by
David S. Miller

parent
64948427a6
commit
19e16d220f
@@ -1065,11 +1065,12 @@ static void neigh_timer_handler(struct timer_list *t)
|
||||
neigh->updated = jiffies;
|
||||
atomic_set(&neigh->probes, 0);
|
||||
notify = 1;
|
||||
next = now + NEIGH_VAR(neigh->parms, RETRANS_TIME);
|
||||
next = now + max(NEIGH_VAR(neigh->parms, RETRANS_TIME),
|
||||
HZ/100);
|
||||
}
|
||||
} else {
|
||||
/* NUD_PROBE|NUD_INCOMPLETE */
|
||||
next = now + NEIGH_VAR(neigh->parms, RETRANS_TIME);
|
||||
next = now + max(NEIGH_VAR(neigh->parms, RETRANS_TIME), HZ/100);
|
||||
}
|
||||
|
||||
if ((neigh->nud_state & (NUD_INCOMPLETE | NUD_PROBE)) &&
|
||||
@@ -1125,7 +1126,7 @@ int __neigh_event_send(struct neighbour *neigh, struct sk_buff *skb)
|
||||
neigh->nud_state = NUD_INCOMPLETE;
|
||||
neigh->updated = now;
|
||||
next = now + max(NEIGH_VAR(neigh->parms, RETRANS_TIME),
|
||||
HZ/2);
|
||||
HZ/100);
|
||||
neigh_add_timer(neigh, next);
|
||||
immediate_probe = true;
|
||||
} else {
|
||||
@@ -1427,7 +1428,8 @@ void __neigh_set_probe_once(struct neighbour *neigh)
|
||||
neigh->nud_state = NUD_INCOMPLETE;
|
||||
atomic_set(&neigh->probes, neigh_max_probes(neigh));
|
||||
neigh_add_timer(neigh,
|
||||
jiffies + NEIGH_VAR(neigh->parms, RETRANS_TIME));
|
||||
jiffies + max(NEIGH_VAR(neigh->parms, RETRANS_TIME),
|
||||
HZ/100));
|
||||
}
|
||||
EXPORT_SYMBOL(__neigh_set_probe_once);
|
||||
|
||||
|
Reference in New Issue
Block a user