diff options
| author | David S. Miller <davem@davemloft.net> | 2011-07-17 23:09:49 -0700 | 
|---|---|---|
| committer | David S. Miller <davem@davemloft.net> | 2011-07-17 23:11:35 -0700 | 
| commit | 69cce1d1404968f78b177a0314f5822d5afdbbfb (patch) | |
| tree | 26223264fd69ea8078d0013fd5a76eb7aeb04c12 /net/core | |
| parent | 9cbb7ecbcff85077bb12301aaf4c9b5a56c5993d (diff) | |
net: Abstract dst->neighbour accesses behind helpers.
dst_{get,set}_neighbour()
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net/core')
| -rw-r--r-- | net/core/dst.c | 10 | ||||
| -rw-r--r-- | net/core/neighbour.c | 7 | 
2 files changed, 9 insertions, 8 deletions
| diff --git a/net/core/dst.c b/net/core/dst.c index 4aacc14936a0..14b33baf0733 100644 --- a/net/core/dst.c +++ b/net/core/dst.c @@ -171,7 +171,7 @@ void *dst_alloc(struct dst_ops *ops, struct net_device *dev,  	dst_init_metrics(dst, dst_default_metrics, true);  	dst->expires = 0UL;  	dst->path = dst; -	dst->neighbour = NULL; +	dst->_neighbour = NULL;  #ifdef CONFIG_XFRM  	dst->xfrm = NULL;  #endif @@ -229,11 +229,11 @@ struct dst_entry *dst_destroy(struct dst_entry * dst)  	smp_rmb();  again: -	neigh = dst->neighbour; +	neigh = dst->_neighbour;  	child = dst->child;  	if (neigh) { -		dst->neighbour = NULL; +		dst->_neighbour = NULL;  		neigh_release(neigh);  	} @@ -363,8 +363,8 @@ static void dst_ifdown(struct dst_entry *dst, struct net_device *dev,  		dst->dev = dev_net(dst->dev)->loopback_dev;  		dev_hold(dst->dev);  		dev_put(dev); -		if (dst->neighbour && dst->neighbour->dev == dev) { -			dst->neighbour->dev = dst->dev; +		if (dst->_neighbour && dst->_neighbour->dev == dev) { +			dst->_neighbour->dev = dst->dev;  			dev_hold(dst->dev);  			dev_put(dev);  		} diff --git a/net/core/neighbour.c b/net/core/neighbour.c index cefb8e52615e..8fab9b0bb203 100644 --- a/net/core/neighbour.c +++ b/net/core/neighbour.c @@ -1153,11 +1153,12 @@ int neigh_update(struct neighbour *neigh, const u8 *lladdr, u8 new,  		while (neigh->nud_state & NUD_VALID &&  		       (skb = __skb_dequeue(&neigh->arp_queue)) != NULL) { -			struct neighbour *n1 = neigh; +			struct dst_entry *dst = skb_dst(skb); +			struct neighbour *n2, *n1 = neigh;  			write_unlock_bh(&neigh->lock);  			/* On shaper/eql skb->dst->neighbour != neigh :( */ -			if (skb_dst(skb) && skb_dst(skb)->neighbour) -				n1 = skb_dst(skb)->neighbour; +			if (dst && (n2 = dst_get_neighbour(dst)) != NULL) +				n1 = n2;  			n1->output(n1, skb);  			write_lock_bh(&neigh->lock);  		} | 
