From patchwork Fri Oct 8 00:48:38 2010 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Dimitris Michailidis X-Patchwork-Id: 67124 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: patchwork-incoming@ozlabs.org Delivered-To: patchwork-incoming@ozlabs.org Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 23F70B6EEE for ; Fri, 8 Oct 2010 11:52:43 +1100 (EST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1754552Ab0JHAwj (ORCPT ); Thu, 7 Oct 2010 20:52:39 -0400 Received: from stargate.chelsio.com ([67.207.112.58]:18594 "EHLO stargate.chelsio.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752162Ab0JHAwi (ORCPT ); Thu, 7 Oct 2010 20:52:38 -0400 Received: from maui.asicdesigners.com (maui.asicdesigners.com [10.192.180.15]) by stargate.chelsio.com (8.13.1/8.13.1) with SMTP id o980qa4O004213; Thu, 7 Oct 2010 17:52:36 -0700 Received: from darkside.asicdesigners.com ([10.192.161.150]) by maui.asicdesigners.com with Microsoft SMTPSVC(6.0.3790.4675); Thu, 7 Oct 2010 17:48:38 -0700 Received: from darkside.asicdesigners.com (localhost.localdomain [127.0.0.1]) by darkside.asicdesigners.com (8.13.4/8.13.4) with ESMTP id o980mcvh030670; Thu, 7 Oct 2010 17:48:38 -0700 Received: (from dm@localhost) by darkside.asicdesigners.com (8.13.4/8.13.4/Submit) id o980mcAi030669; Thu, 7 Oct 2010 17:48:38 -0700 From: Dimitris Michailidis To: eric.dumazet@gmail.com, netdev@vger.kernel.org Subject: [PATCH] remove leftover rcu_read_unlock calls from __mkroute_output Date: Thu, 7 Oct 2010 17:48:38 -0700 Message-Id: <1286498918-30636-1-git-send-email-dm@chelsio.com> X-Mailer: git-send-email 1.5.4 X-OriginalArrivalTime: 08 Oct 2010 00:48:38.0727 (UTC) FILETIME=[8BCA6570:01CB6682] Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org 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 Acked-by: Eric Dumazet --- net/ipv4/route.c | 6 ++---- 1 files changed, 2 insertions(+), 4 deletions(-) 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);