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