diff options
Diffstat (limited to 'net/core/neighbour.c')
-rw-r--r-- | net/core/neighbour.c | 5 |
1 files changed, 3 insertions, 2 deletions
diff --git a/net/core/neighbour.c b/net/core/neighbour.c index 6072610a8672..932c6d7cf666 100644 --- a/net/core/neighbour.c +++ b/net/core/neighbour.c | |||
@@ -867,7 +867,7 @@ static void neigh_invalidate(struct neighbour *neigh) | |||
867 | static void neigh_probe(struct neighbour *neigh) | 867 | static void neigh_probe(struct neighbour *neigh) |
868 | __releases(neigh->lock) | 868 | __releases(neigh->lock) |
869 | { | 869 | { |
870 | struct sk_buff *skb = skb_peek(&neigh->arp_queue); | 870 | struct sk_buff *skb = skb_peek_tail(&neigh->arp_queue); |
871 | /* keep skb alive even if arp_queue overflows */ | 871 | /* keep skb alive even if arp_queue overflows */ |
872 | if (skb) | 872 | if (skb) |
873 | skb = skb_copy(skb, GFP_ATOMIC); | 873 | skb = skb_copy(skb, GFP_ATOMIC); |
@@ -1161,6 +1161,7 @@ int neigh_update(struct neighbour *neigh, const u8 *lladdr, u8 new, | |||
1161 | neigh->parms->reachable_time : | 1161 | neigh->parms->reachable_time : |
1162 | 0))); | 1162 | 0))); |
1163 | neigh->nud_state = new; | 1163 | neigh->nud_state = new; |
1164 | notify = 1; | ||
1164 | } | 1165 | } |
1165 | 1166 | ||
1166 | if (lladdr != neigh->ha) { | 1167 | if (lladdr != neigh->ha) { |
@@ -1274,7 +1275,7 @@ int neigh_compat_output(struct neighbour *neigh, struct sk_buff *skb) | |||
1274 | 1275 | ||
1275 | if (dev_hard_header(skb, dev, ntohs(skb->protocol), NULL, NULL, | 1276 | if (dev_hard_header(skb, dev, ntohs(skb->protocol), NULL, NULL, |
1276 | skb->len) < 0 && | 1277 | skb->len) < 0 && |
1277 | dev->header_ops->rebuild(skb)) | 1278 | dev_rebuild_header(skb)) |
1278 | return 0; | 1279 | return 0; |
1279 | 1280 | ||
1280 | return dev_queue_xmit(skb); | 1281 | return dev_queue_xmit(skb); |