rcu_read_unlock(); 
static int dn_neigh_construct(struct neighbour *neigh){	struct net_device *dev = neigh->dev;	struct dn_neigh *dn = (struct dn_neigh *)neigh;	struct dn_dev *dn_db;	struct neigh_parms *parms;	rcu_read_lock();	dn_db = rcu_dereference(dev->dn_ptr);	if (dn_db == NULL) {		rcu_read_unlock();		return -EINVAL;	}	parms = dn_db->neigh_parms;	if (!parms) {		rcu_read_unlock();		return -EINVAL;	}	__neigh_parms_put(neigh->parms);	neigh->parms = neigh_parms_clone(parms);	rcu_read_unlock();	if (dn_db->use_long)		neigh->ops = &dn_long_ops;	else		neigh->ops = &dn_short_ops;	if (dn->flags & DN_NDFLAG_P3)		neigh->ops = &dn_phase3_ops;	neigh->nud_state = NUD_NOARP;	neigh->output = neigh->ops->connected_output;	if ((dev->type == ARPHRD_IPGRE) || (dev->flags & IFF_POINTOPOINT))		memcpy(neigh->ha, dev->broadcast, dev->addr_len);	else if ((dev->type == ARPHRD_ETHER) || (dev->type == ARPHRD_LOOPBACK))		dn_dn2eth(neigh->ha, dn->addr);	else {		if (net_ratelimit())			printk(KERN_DEBUG "Trying to create neigh for hw %d\n",  dev->type);		return -EINVAL;	}	/*	 * Make an estimate of the remote block size by assuming that its	 * two less then the device mtu, which it true for ethernet (and	 * other things which support long format headers) since there is	 * an extra length field (of 16 bits) which isn't part of the	 * ethernet headers and which the DECnet specs won't admit is part	 * of the DECnet routing headers either.	 *	 * If we over estimate here its no big deal, the NSP negotiations	 * will prevent us from sending packets which are too large for the	 * remote node to handle. In any case this figure is normally updated	 * by a hello message in most cases.	 */	dn->blksize = dev->mtu - 2;	return 0;}
10457	/local/tlutelli/issta_data/temp/c/2005_temp/2005/10457/1f07247de51efd30c88ad8e3e06a8b5382fc7d35/dn_neigh.c/buggy/net/decnet/dn_neigh.c