/* Do not decrement MOD_USE_COUNT here. */ 
static struct ip_tunnel * ipip6_tunnel_locate(struct ip_tunnel_parm *parms, int create){	u32 remote = parms->iph.daddr;	u32 local = parms->iph.saddr;	struct ip_tunnel *t, **tp, *nt;	struct net_device *dev;	unsigned h = 0;	int prio = 0;	char name[IFNAMSIZ];	if (remote) {		prio |= 2;		h ^= HASH(remote);	}	if (local) {		prio |= 1;		h ^= HASH(local);	}	for (tp = &tunnels[prio][h]; (t = *tp) != NULL; tp = &t->next) {		if (local == t->parms.iph.saddr && remote == t->parms.iph.daddr)			return t;	}	if (!create)		goto failed;	if (parms->name[0])		strlcpy(name, parms->name, IFNAMSIZ);	else {		int i;		for (i=1; i<100; i++) {			sprintf(name, "sit%d", i);			if (__dev_get_by_name(name) == NULL)				break;		}		if (i==100)			goto failed;	}	dev = alloc_netdev(sizeof(*t), name, ipip6_tunnel_setup);	if (dev == NULL)		return NULL;	nt = dev->priv;	dev->init = ipip6_tunnel_init;	nt->parms = *parms;	if (register_netdevice(dev) < 0) {		free_netdev(dev);		goto failed;	}	dev_hold(dev);	ipip6_tunnel_link(nt);	/* Do not decrement MOD_USE_COUNT here. */	return nt;failed:	return NULL;}
4520	/local/tlutelli/issta_data/temp/c/2005_temp/2005/4520/db44575f6fd55df6ff67ddd21f7ad5be5a741136/sit.c/clean/net/ipv6/sit.c