err = fib6_add_rt2node(fn, rt, nlh); 
err = fib6_add_rt2node(fn, rt, nlh, req); 
int fib6_add(struct fib6_node *root, struct rt6_info *rt, struct nlmsghdr *nlh, void *_rtattr){	struct fib6_node *fn;	int err = -ENOMEM;	fn = fib6_add_1(root, &rt->rt6i_dst.addr, sizeof(struct in6_addr),			rt->rt6i_dst.plen, offsetof(struct rt6_info, rt6i_dst));	if (fn == NULL)		goto out;#ifdef CONFIG_IPV6_SUBTREES	if (rt->rt6i_src.plen) {		struct fib6_node *sn;		if (fn->subtree == NULL) {			struct fib6_node *sfn;			/*			 * Create subtree.			 *			 *		fn[main tree]			 *		|			 *		sfn[subtree root]			 *		   \			 *		    sn[new leaf node]			 */			/* Create subtree root node */			sfn = node_alloc();			if (sfn == NULL)				goto st_failure;			sfn->leaf = &ip6_null_entry;			atomic_inc(&ip6_null_entry.rt6i_ref);			sfn->fn_flags = RTN_ROOT;			sfn->fn_sernum = fib6_new_sernum();			/* Now add the first leaf node to new subtree */			sn = fib6_add_1(sfn, &rt->rt6i_src.addr,					sizeof(struct in6_addr), rt->rt6i_src.plen,					offsetof(struct rt6_info, rt6i_src));			if (sn == NULL) {				/* If it is failed, discard just allocated				   root, and then (in st_failure) stale node				   in main tree.				 */				node_free(sfn);				goto st_failure;			}			/* Now link new subtree to main tree */			sfn->parent = fn;			fn->subtree = sfn;			if (fn->leaf == NULL) {				fn->leaf = rt;				atomic_inc(&rt->rt6i_ref);			}		} else {			sn = fib6_add_1(fn->subtree, &rt->rt6i_src.addr,					sizeof(struct in6_addr), rt->rt6i_src.plen,					offsetof(struct rt6_info, rt6i_src));			if (sn == NULL)				goto st_failure;		}		fn = sn;	}#endif	err = fib6_add_rt2node(fn, rt, nlh);	if (err == 0) {		fib6_start_gc(rt);		if (!(rt->rt6i_flags&RTF_CACHE))			fib6_prune_clones(fn, rt);	}out:	if (err)		dst_free(&rt->u.dst);	return err;#ifdef CONFIG_IPV6_SUBTREES	/* Subtree creation failed, probably main tree node	   is orphan. If it is, shoot it.	 */st_failure:	if (fn && !(fn->fn_flags & (RTN_RTINFO|RTN_ROOT)))		fib6_repair_tree(fn);	dst_free(&rt->u.dst);	return err;#endif}
10457	/local/tlutelli/issta_data/temp/c/2005_temp/2005/10457/0d51aa80a9b1db43920c0770c3bb842dd823c005/ip6_fib.c/buggy/net/ipv6/ip6_fib.c