From 041c4130c1bfa08546ef0e95c6d90d15ece05b4c Mon Sep 17 00:00:00 2001 From: "roy.qing.li@gmail.com" Date: Mon, 17 Oct 2011 22:32:42 +0000 Subject: [PATCH] --- yaml --- r: 266885 b: refs/heads/master c: e049f28883126c689cf95859480d9ee4ab23b7fa h: refs/heads/master i: 266883: f8db7947f6aea093607a7289acae90238937d51b v: v3 --- [refs] | 2 +- trunk/net/core/neighbour.c | 4 ++++ 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/[refs] b/[refs] index d72f647ed07a..5fe325801541 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 4f25af27827080c3163e59c7af1ca84a05ce121c +refs/heads/master: e049f28883126c689cf95859480d9ee4ab23b7fa diff --git a/trunk/net/core/neighbour.c b/trunk/net/core/neighbour.c index 43449649cf73..909ecb3c2a33 100644 --- a/trunk/net/core/neighbour.c +++ b/trunk/net/core/neighbour.c @@ -1168,10 +1168,14 @@ int neigh_update(struct neighbour *neigh, const u8 *lladdr, u8 new, struct dst_entry *dst = skb_dst(skb); struct neighbour *n2, *n1 = neigh; write_unlock_bh(&neigh->lock); + + rcu_read_lock(); /* On shaper/eql skb->dst->neighbour != neigh :( */ if (dst && (n2 = dst_get_neighbour(dst)) != NULL) n1 = n2; n1->output(n1, skb); + rcu_read_unlock(); + write_lock_bh(&neigh->lock); } skb_queue_purge(&neigh->arp_queue);