If my debugging code is correct, I've tracked down the
leaked neighbour structure as being referenced here:

        if (!(neigh->nud_state & (NUD_STALE | NUD_INCOMPLETE))) {
                if (neigh->parms->mcast_probes + neigh->parms->app_probes) {
                        atomic_set(&neigh->probes, neigh->parms->ucast_probes);
                        neigh->nud_state     = NUD_INCOMPLETE;
***                     neigh_hold(neigh, NDRK_NEIGH_TIMER);
                        neigh->timer.expires = now + 1;
                        add_timer(&neigh->timer);


From looking at this code:

static int neigh_del_timer(struct neighbour *n)
{
        if ((n->nud_state & NUD_IN_TIMER) &&
            del_timer(&n->timer)) {
                neigh_release(n, NDRK_NEIGH_TIMER);
                return 1;
        }
        return 0;
}

Shouldn't we always do something similar to neigh->nud_state |= NUD_IN_TIMER
before calling the add_timer() method?


Thanks,
Ben

--
Ben Greear <[EMAIL PROTECTED]>
Candela Technologies Inc  http://www.candelatech.com

-
To unsubscribe from this list: send the line "unsubscribe netdev" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to