summaryrefslogtreecommitdiff
path: root/net/core/neighbour.c
diff options
context:
space:
mode:
authorPaul Mundt <lethal@linux-sh.org>2011-09-05 12:52:08 +0900
committerPaul Mundt <lethal@linux-sh.org>2011-09-05 12:52:08 +0900
commitf5a18f932e051ff0f19dcd80a421a4dd9b11f10f (patch)
tree9189ffc9fa735e5297ed8c3678a9463e8dbb1561 /net/core/neighbour.c
parentb9a3acf46afdafc601947136f63e9dd228cd86e8 (diff)
parent9e79e3e9dd9672b37ac9412e9a926714306551fe (diff)
Merge branch 'master' of git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux into sh-latest
Diffstat (limited to 'net/core/neighbour.c')
-rw-r--r--net/core/neighbour.c8
1 files changed, 6 insertions, 2 deletions
diff --git a/net/core/neighbour.c b/net/core/neighbour.c
index 8fab9b0bb203..1334d7e56f02 100644
--- a/net/core/neighbour.c
+++ b/net/core/neighbour.c
@@ -1319,11 +1319,15 @@ static void neigh_proxy_process(unsigned long arg)
if (tdif <= 0) {
struct net_device *dev = skb->dev;
+
__skb_unlink(skb, &tbl->proxy_queue);
- if (tbl->proxy_redo && netif_running(dev))
+ if (tbl->proxy_redo && netif_running(dev)) {
+ rcu_read_lock();
tbl->proxy_redo(skb);
- else
+ rcu_read_unlock();
+ } else {
kfree_skb(skb);
+ }
dev_put(dev);
} else if (!sched_next || tdif < sched_next)