From patchwork Tue Sep 29 18:39:24 2009 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Ron Mercer X-Patchwork-Id: 34449 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.176.167]) by ozlabs.org (Postfix) with ESMTP id 3C41FB7BE9 for ; Wed, 30 Sep 2009 04:45:40 +1000 (EST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753812AbZI2SpU (ORCPT ); Tue, 29 Sep 2009 14:45:20 -0400 Received: (majordomo@vger.kernel.org) by vger.kernel.org id S1753188AbZI2SpT (ORCPT ); Tue, 29 Sep 2009 14:45:19 -0400 Received: from avexch1.qlogic.com ([198.70.193.115]:8737 "EHLO avexch1.qlogic.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1753762AbZI2SpP (ORCPT ); Tue, 29 Sep 2009 14:45:15 -0400 Received: from linux-ox1b.qlogic.com ([172.17.161.157]) by avexch1.qlogic.com with Microsoft SMTPSVC(6.0.3790.1830); Tue, 29 Sep 2009 11:44:37 -0700 Received: by linux-ox1b.qlogic.com (Postfix, from userid 1000) id 5717D2C6AC; Tue, 29 Sep 2009 11:39:26 -0700 (PDT) From: Ron Mercer To: davem@davemloft.net Cc: netdev@vger.kernel.org, ron.mercer@qlogic.com Subject: [net-2.6 PATCH 4/5] qlge: Protect reset recovery with rtnl_lock(). Date: Tue, 29 Sep 2009 11:39:24 -0700 Message-Id: <1254249565-16381-5-git-send-email-ron.mercer@qlogic.com> X-Mailer: git-send-email 1.6.0.2 In-Reply-To: <1254249565-16381-1-git-send-email-ron.mercer@qlogic.com> References: <1254249565-16381-1-git-send-email-ron.mercer@qlogic.com> X-OriginalArrivalTime: 29 Sep 2009 18:44:37.0286 (UTC) FILETIME=[E5323C60:01CA4134] Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org Move the call to rtnl_lock() to before the internal call to ql_adapter_down()/ql_adapter_up(). This prevents collisions that can happen when recovering from an asic error. Signed-off-by: Ron Mercer --- drivers/net/qlge/qlge_main.c | 6 +++--- 1 files changed, 3 insertions(+), 3 deletions(-) diff --git a/drivers/net/qlge/qlge_main.c b/drivers/net/qlge/qlge_main.c index b05300d..fbef305 100644 --- a/drivers/net/qlge/qlge_main.c +++ b/drivers/net/qlge/qlge_main.c @@ -3703,7 +3703,7 @@ static void ql_asic_reset_work(struct work_struct *work) struct ql_adapter *qdev = container_of(work, struct ql_adapter, asic_reset_work.work); int status; - + rtnl_lock(); status = ql_adapter_down(qdev); if (status) goto error; @@ -3711,12 +3711,12 @@ static void ql_asic_reset_work(struct work_struct *work) status = ql_adapter_up(qdev); if (status) goto error; - + rtnl_unlock(); return; error: QPRINTK(qdev, IFUP, ALERT, "Driver up/down cycle failed, closing device\n"); - rtnl_lock(); + set_bit(QL_ADAPTER_UP, &qdev->flags); dev_close(qdev->ndev); rtnl_unlock();