Message ID | 1286498918-30636-1-git-send-email-dm@chelsio.com |
---|---|
State | Accepted, archived |
Delegated to: | David Miller |
Headers | show |
Le jeudi 07 octobre 2010 à 17:48 -0700, Dimitris Michailidis a écrit : > 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> Thanks Dimitris ! -- To unsubscribe from this list: send the line "unsubscribe netdev" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
From: Eric Dumazet <eric.dumazet@gmail.com> Date: Fri, 08 Oct 2010 06:47:58 +0200 > Le jeudi 07 octobre 2010 à 17:48 -0700, Dimitris Michailidis a écrit : >> 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> Applied, thanks everyone. -- To unsubscribe from this list: send the line "unsubscribe netdev" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
diff --git a/net/ipv4/route.c b/net/ipv4/route.c index 7864d0c..3888f6b 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);
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> --- net/ipv4/route.c | 6 ++---- 1 files changed, 2 insertions(+), 4 deletions(-)