net: Abstract dst->neighbour accesses behind helpers.
dst_{get,set}_neighbour() Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
@@ -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);
|
||||
}
|
||||
|
@@ -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);
|
||||
}
|
||||
|
Reference in New Issue
Block a user