diff options
Diffstat (limited to 'net/core/neighbour.c')
-rw-r--r-- | net/core/neighbour.c | 12 |
1 files changed, 3 insertions, 9 deletions
diff --git a/net/core/neighbour.c b/net/core/neighbour.c index a16cf1ec5e5e..7bb6a9a1256d 100644 --- a/net/core/neighbour.c +++ b/net/core/neighbour.c | |||
@@ -834,18 +834,12 @@ static void neigh_timer_handler(unsigned long arg) | |||
834 | } | 834 | } |
835 | if (neigh->nud_state & (NUD_INCOMPLETE | NUD_PROBE)) { | 835 | if (neigh->nud_state & (NUD_INCOMPLETE | NUD_PROBE)) { |
836 | struct sk_buff *skb = skb_peek(&neigh->arp_queue); | 836 | struct sk_buff *skb = skb_peek(&neigh->arp_queue); |
837 | /* keep skb alive even if arp_queue overflows */ | 837 | |
838 | if (skb) | ||
839 | skb_get(skb); | ||
840 | write_unlock(&neigh->lock); | ||
841 | neigh->ops->solicit(neigh, skb); | 838 | neigh->ops->solicit(neigh, skb); |
842 | atomic_inc(&neigh->probes); | 839 | atomic_inc(&neigh->probes); |
843 | if (skb) | ||
844 | kfree_skb(skb); | ||
845 | } else { | ||
846 | out: | ||
847 | write_unlock(&neigh->lock); | ||
848 | } | 840 | } |
841 | out: | ||
842 | write_unlock(&neigh->lock); | ||
849 | 843 | ||
850 | if (notify) | 844 | if (notify) |
851 | neigh_update_notify(neigh); | 845 | neigh_update_notify(neigh); |