summaryrefslogtreecommitdiffstats
path: root/net/ipv4
diff options
context:
space:
mode:
authorDimitris Michailidis <dm@chelsio.com>2010-10-07 14:48:38 +0000
committerDavid S. Miller <davem@davemloft.net>2010-10-08 10:51:08 -0700
commit8391d07b80e8da957cd888870e23f8e218438622 (patch)
tree8baab40bff5649b1f777af590f77a79a549b0491 /net/ipv4
parent993284dfff3ba4643f08b592427d0ac758d30156 (diff)
downloadlinux-8391d07b80e8da957cd888870e23f8e218438622.tar.gz
linux-8391d07b80e8da957cd888870e23f8e218438622.tar.bz2
linux-8391d07b80e8da957cd888870e23f8e218438622.zip
ipv4: Remove leftover rcu_read_unlock calls from __mkroute_output()
Commit "fib: RCU conversion of fib_lookup()" removed rcu_read_lock() from __mkroute_output but left a couple of calls to rcu_read_unlock() in there. This causes lockdep to complain that the rcu_read_unlock() call in __ip_route_output_key causes a lock inbalance and quickly crashes the kernel. The below fixes this for me. Signed-off-by: Dimitris Michailidis <dm@chelsio.com> Acked-by: Eric Dumazet <eric.dumazet@gmail.com> Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net/ipv4')
-rw-r--r--net/ipv4/route.c6
1 files changed, 2 insertions, 4 deletions
diff --git a/net/ipv4/route.c b/net/ipv4/route.c
index 7864d0c48968..3888f6ba0a5c 100644
--- a/net/ipv4/route.c
+++ b/net/ipv4/route.c
@@ -2396,12 +2396,10 @@ static int __mkroute_output(struct rtable **result,
rth = dst_alloc(&ipv4_dst_ops);
- if (!rth) {
- rcu_read_unlock();
+ if (!rth)
return -ENOBUFS;
- }
+
in_dev_hold(in_dev);
- rcu_read_unlock();
rth->idev = in_dev;
atomic_set(&rth->dst.__refcnt, 1);