struct nlmsghdr *nlh, void *_rtattr) 
struct nlmsghdr *nlh, void *_rtattr, struct netlink_skb_parms *req) 
static void fib6_del_route(struct fib6_node *fn, struct rt6_info **rtp,    struct nlmsghdr *nlh, void *_rtattr){	struct fib6_walker_t *w;	struct rt6_info *rt = *rtp;	RT6_TRACE("fib6_del_route\n");	/* Unlink it */	*rtp = rt->u.next;	rt->rt6i_node = NULL;	rt6_stats.fib_rt_entries--;	rt6_stats.fib_discarded_routes++;	/* Adjust walkers */	read_lock(&fib6_walker_lock);	FOR_WALKERS(w) {		if (w->state == FWS_C && w->leaf == rt) {			RT6_TRACE("walker %p adjusted by delroute\n", w);			w->leaf = rt->u.next;			if (w->leaf == NULL)				w->state = FWS_U;		}	}	read_unlock(&fib6_walker_lock);	rt->u.next = NULL;	if (fn->leaf == NULL && fn->fn_flags&RTN_TL_ROOT)		fn->leaf = &ip6_null_entry;	/* If it was last route, expunge its radix tree node */	if (fn->leaf == NULL) {		fn->fn_flags &= ~RTN_RTINFO;		rt6_stats.fib_route_nodes--;		fn = fib6_repair_tree(fn);	}	if (atomic_read(&rt->rt6i_ref) != 1) {		/* This route is used as dummy address holder in some split		 * nodes. It is not leaked, but it still holds other resources,		 * which must be released in time. So, scan ascendant nodes		 * and replace dummy references to this route with references		 * to still alive ones.		 */		while (fn) {			if (!(fn->fn_flags&RTN_RTINFO) && fn->leaf == rt) {				fn->leaf = fib6_find_prefix(fn);				atomic_inc(&fn->leaf->rt6i_ref);				rt6_release(rt);			}			fn = fn->parent;		}		/* No more references are possible at this point. */		if (atomic_read(&rt->rt6i_ref) != 1) BUG();	}	inet6_rt_notify(RTM_DELROUTE, rt, nlh);	rt6_release(rt);}
10457	/local/tlutelli/issta_data/temp/c/2005_temp/2005/10457/0d51aa80a9b1db43920c0770c3bb842dd823c005/ip6_fib.c/buggy/net/ipv6/ip6_fib.c