[NEIGH]: Make neigh_add_timer symmetrical to neigh_del_timer.
The neigh_del_timer() looks sane - it removes the timer and (conditionally) puts the neighbor. I expected, that the neigh_add_timer() is symmetrical to the del one - i.e. it holds the neighbor and arms the timer - but it turned out that it was not so. I think, that making them look symmetrical makes the code more readable. Signed-off-by: Pavel Emelyanov <xemul@openvz.org> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
7054fb9376
commit
a43d8994b9
1 changed files with 11 additions and 14 deletions
|
@ -165,6 +165,16 @@ static int neigh_forced_gc(struct neigh_table *tbl)
|
|||
return shrunk;
|
||||
}
|
||||
|
||||
static void neigh_add_timer(struct neighbour *n, unsigned long when)
|
||||
{
|
||||
neigh_hold(n);
|
||||
if (unlikely(mod_timer(&n->timer, when))) {
|
||||
printk("NEIGH: BUG, double timer add, state is %x\n",
|
||||
n->nud_state);
|
||||
dump_stack();
|
||||
}
|
||||
}
|
||||
|
||||
static int neigh_del_timer(struct neighbour *n)
|
||||
{
|
||||
if ((n->nud_state & NUD_IN_TIMER) &&
|
||||
|
@ -716,15 +726,6 @@ static __inline__ int neigh_max_probes(struct neighbour *n)
|
|||
p->ucast_probes + p->app_probes + p->mcast_probes);
|
||||
}
|
||||
|
||||
static inline void neigh_add_timer(struct neighbour *n, unsigned long when)
|
||||
{
|
||||
if (unlikely(mod_timer(&n->timer, when))) {
|
||||
printk("NEIGH: BUG, double timer add, state is %x\n",
|
||||
n->nud_state);
|
||||
dump_stack();
|
||||
}
|
||||
}
|
||||
|
||||
/* Called when a timer expires for a neighbour entry. */
|
||||
|
||||
static void neigh_timer_handler(unsigned long arg)
|
||||
|
@ -856,7 +857,6 @@ int __neigh_event_send(struct neighbour *neigh, struct sk_buff *skb)
|
|||
atomic_set(&neigh->probes, neigh->parms->ucast_probes);
|
||||
neigh->nud_state = NUD_INCOMPLETE;
|
||||
neigh->updated = jiffies;
|
||||
neigh_hold(neigh);
|
||||
neigh_add_timer(neigh, now + 1);
|
||||
} else {
|
||||
neigh->nud_state = NUD_FAILED;
|
||||
|
@ -869,7 +869,6 @@ int __neigh_event_send(struct neighbour *neigh, struct sk_buff *skb)
|
|||
}
|
||||
} else if (neigh->nud_state & NUD_STALE) {
|
||||
NEIGH_PRINTK2("neigh %p is delayed.\n", neigh);
|
||||
neigh_hold(neigh);
|
||||
neigh->nud_state = NUD_DELAY;
|
||||
neigh->updated = jiffies;
|
||||
neigh_add_timer(neigh,
|
||||
|
@ -1013,13 +1012,11 @@ int neigh_update(struct neighbour *neigh, const u8 *lladdr, u8 new,
|
|||
|
||||
if (new != old) {
|
||||
neigh_del_timer(neigh);
|
||||
if (new & NUD_IN_TIMER) {
|
||||
neigh_hold(neigh);
|
||||
if (new & NUD_IN_TIMER)
|
||||
neigh_add_timer(neigh, (jiffies +
|
||||
((new & NUD_REACHABLE) ?
|
||||
neigh->parms->reachable_time :
|
||||
0)));
|
||||
}
|
||||
neigh->nud_state = new;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue