if (ip6_ins_rt(rt, NULL, NULL)) 
if (ip6_ins_rt(rt, NULL, NULL, NULL)) 
int ipv6_dev_ac_inc(struct net_device *dev, struct in6_addr *addr){	struct ifacaddr6 *aca;	struct inet6_dev *idev;	struct rt6_info *rt;	int err;	idev = in6_dev_get(dev);	if (idev == NULL)		return -EINVAL;	write_lock_bh(&idev->lock);	if (idev->dead) {		err = -ENODEV;		goto out;	}	for (aca = idev->ac_list; aca; aca = aca->aca_next) {		if (ipv6_addr_equal(&aca->aca_addr, addr)) {			aca->aca_users++;			err = 0;			goto out;		}	}	/*	 *	not found: create a new one.	 */	aca = kmalloc(sizeof(struct ifacaddr6), GFP_ATOMIC);	if (aca == NULL) {		err = -ENOMEM;		goto out;	}	rt = addrconf_dst_alloc(idev, addr, 1);	if (IS_ERR(rt)) {		kfree(aca);		err = PTR_ERR(rt);		goto out;	}	memset(aca, 0, sizeof(struct ifacaddr6));	ipv6_addr_copy(&aca->aca_addr, addr);	aca->aca_idev = idev;	aca->aca_rt = rt;	aca->aca_users = 1;	/* aca_tstamp should be updated upon changes */	aca->aca_cstamp = aca->aca_tstamp = jiffies;	atomic_set(&aca->aca_refcnt, 2);	spin_lock_init(&aca->aca_lock);	aca->aca_next = idev->ac_list;	idev->ac_list = aca;	write_unlock_bh(&idev->lock);	dst_hold(&rt->u.dst);	if (ip6_ins_rt(rt, NULL, NULL))		dst_release(&rt->u.dst);	addrconf_join_solict(dev, &aca->aca_addr);	aca_put(aca);	return 0;out:	write_unlock_bh(&idev->lock);	in6_dev_put(idev);	return err;}
10457	/local/tlutelli/issta_data/temp/c/2005_temp/2005/10457/0d51aa80a9b1db43920c0770c3bb842dd823c005/anycast.c/buggy/net/ipv6/anycast.c