aboutsummaryrefslogtreecommitdiffstats
path: root/net/core
diff options
context:
space:
mode:
Diffstat (limited to 'net/core')
-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 799f06e03a2..16db8870780 100644
--- a/net/core/neighbour.c
+++ b/net/core/neighbour.c
@@ -1383,11 +1383,15 @@ static void neigh_proxy_process(unsigned long arg)
1383 1383
1384 if (tdif <= 0) { 1384 if (tdif <= 0) {
1385 struct net_device *dev = skb->dev; 1385 struct net_device *dev = skb->dev;
1386
1386 __skb_unlink(skb, &tbl->proxy_queue); 1387 __skb_unlink(skb, &tbl->proxy_queue);
1387 if (tbl->proxy_redo && netif_running(dev)) 1388 if (tbl->proxy_redo && netif_running(dev)) {
1389 rcu_read_lock();
1388 tbl->proxy_redo(skb); 1390 tbl->proxy_redo(skb);
1389 else 1391 rcu_read_unlock();
1392 } else {
1390 kfree_skb(skb); 1393 kfree_skb(skb);
1394 }
1391 1395
1392 dev_put(dev); 1396 dev_put(dev);
1393 } else if (!sched_next || tdif < sched_next) 1397 } else if (!sched_next || tdif < sched_next)