From e9aaee200c8aa5a1e0ab79a94048ce04ee647bc3 Mon Sep 17 00:00:00 2001 From: "David S. Miller" Date: Mon, 11 Feb 2008 21:45:44 -0800 Subject: [PATCH] --- yaml --- r: 85643 b: refs/heads/master c: 69cc64d8d92bf852f933e90c888dfff083bd4fc9 h: refs/heads/master i: 85641: 678717d406523d84e2d93be7a4981f5ce8e1d37d 85639: aa50f79f2f38806c44cda25d03c82f721ba35e20 v: v3 --- [refs] | 2 +- trunk/net/core/neighbour.c | 12 +++--------- trunk/net/ipv4/arp.c | 3 --- 3 files changed, 4 insertions(+), 13 deletions(-) diff --git a/[refs] b/[refs] index 2942d14f4270..586dcb7f8e1a 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 3611f4d2a5e0f6135805f88bc5ecb63fa9ee5107 +refs/heads/master: 69cc64d8d92bf852f933e90c888dfff083bd4fc9 diff --git a/trunk/net/core/neighbour.c b/trunk/net/core/neighbour.c index a16cf1ec5e5e..7bb6a9a1256d 100644 --- a/trunk/net/core/neighbour.c +++ b/trunk/net/core/neighbour.c @@ -834,18 +834,12 @@ static void neigh_timer_handler(unsigned long arg) } if (neigh->nud_state & (NUD_INCOMPLETE | NUD_PROBE)) { struct sk_buff *skb = skb_peek(&neigh->arp_queue); - /* keep skb alive even if arp_queue overflows */ - if (skb) - skb_get(skb); - write_unlock(&neigh->lock); + neigh->ops->solicit(neigh, skb); atomic_inc(&neigh->probes); - if (skb) - kfree_skb(skb); - } else { -out: - write_unlock(&neigh->lock); } +out: + write_unlock(&neigh->lock); if (notify) neigh_update_notify(neigh); diff --git a/trunk/net/ipv4/arp.c b/trunk/net/ipv4/arp.c index 8e17f65f4002..c663fa5339ee 100644 --- a/trunk/net/ipv4/arp.c +++ b/trunk/net/ipv4/arp.c @@ -368,7 +368,6 @@ static void arp_solicit(struct neighbour *neigh, struct sk_buff *skb) if (!(neigh->nud_state&NUD_VALID)) printk(KERN_DEBUG "trying to ucast probe in NUD_INVALID\n"); dst_ha = neigh->ha; - read_lock_bh(&neigh->lock); } else if ((probes -= neigh->parms->app_probes) < 0) { #ifdef CONFIG_ARPD neigh_app_ns(neigh); @@ -378,8 +377,6 @@ static void arp_solicit(struct neighbour *neigh, struct sk_buff *skb) arp_send(ARPOP_REQUEST, ETH_P_ARP, target, dev, saddr, dst_ha, dev->dev_addr, NULL); - if (dst_ha) - read_unlock_bh(&neigh->lock); } static int arp_ignore(struct in_device *in_dev, __be32 sip, __be32 tip)