Received: by 10.213.65.68 with SMTP id h4csp284724imn; Fri, 23 Mar 2018 04:44:00 -0700 (PDT) X-Google-Smtp-Source: AG47ELsODx2C/VA2adbefWndkQxnWCaDlkb6O1VRJyc/1GYd1xOOb7Ztg9ETdg7X4ICq1IBJArNI X-Received: by 2002:a17:902:788e:: with SMTP id q14-v6mr29918019pll.396.1521805440350; Fri, 23 Mar 2018 04:44:00 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1521805440; cv=none; d=google.com; s=arc-20160816; b=dd5/QcETRf3hTTji7GJDlkNRYWZlZv4QgQLIwxUvLQMUwPZ6x1xwq/bWOYuzgniJva sn3+SXC121mauAF341UkgKoNt1T35gqqAvwx5g7jZwPNktMY6588JclOS1tgN8DvAydi kESL7g2E0vJ5AiaeGPxSQnu/jLM2gt2BhNL26QYV42/7cjrqtEN7xkgwnA/Z6+ptaOJ+ gFR5RPCGViWpiwnGNCotB03wBMOqV5OK5UGVq/lIClRRgl1VDeVNZ4CqMgl+yf03wvKa ZOBD53zc3iX2U0PK/jnz1tkKLlNkGa5kGiInBrdSRKB6fUB2QWLlRogbv71NLY0Cunpn sScQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:mime-version:user-agent:references :in-reply-to:message-id:date:subject:cc:to:from :arc-authentication-results; bh=T5U+A+OLkNEeiH1i9+LOuZGNc4kTxjVNbLJ1SdiKAjw=; b=VNsUk6CTjA5HBJeojkIjoqezZSsCYV7W1XD5L9ZkrYR/DKHKbrIvKUSPYug6adNdld xdf1emjNCdn2VPmhRaxwq6hq9/8P2+nZ9XS0ZqU4XHuGSy4ydDP8LZh3w1ZVkTDHBhNj hKQKwg5Sd+NZ9rkN4xjvmp77REf0kNNTr4zcmnqNuqJc1kb2AiFUR8g9ygV0BMVE66oc obq/kMS5PKYmlPWSKlz4BJ+uxTbv2hrwl1KFq0cYB1+Q4JzpSV5q5wG7ZyihBF5ppgog cJu+eTyXITui5JPiDK53D2BtcKSME3OVK3Sd9B+n76QhLKmaMuz2oEE/WM2yGKP/xGBk 3HLg== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id g11si5957390pgu.216.2018.03.23.04.43.45; Fri, 23 Mar 2018 04:44:00 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1754566AbeCWKDy (ORCPT + 99 others); Fri, 23 Mar 2018 06:03:54 -0400 Received: from mail.linuxfoundation.org ([140.211.169.12]:38924 "EHLO mail.linuxfoundation.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1754550AbeCWKDv (ORCPT ); Fri, 23 Mar 2018 06:03:51 -0400 Received: from localhost (LFbn-1-12247-202.w90-92.abo.wanadoo.fr [90.92.61.202]) by mail.linuxfoundation.org (Postfix) with ESMTPSA id 38BFB132F; Fri, 23 Mar 2018 10:03:50 +0000 (UTC) From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Sreekanth Reddy , Mauricio Faria de Oliveira , "Martin K. Petersen" Subject: [PATCH 4.14 68/77] scsi: mpt3sas: wait for and flush running commands on shutdown/unload Date: Fri, 23 Mar 2018 10:54:42 +0100 Message-Id: <20180323094146.843289647@linuxfoundation.org> X-Mailer: git-send-email 2.16.2 In-Reply-To: <20180323094142.260022880@linuxfoundation.org> References: <20180323094142.260022880@linuxfoundation.org> User-Agent: quilt/0.65 X-stable: review MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org 4.14-stable review patch. If anyone has any objections, please let me know. ------------------ From: Sreekanth Reddy commit c666d3be99c000bb889a33353e9be0fa5808d3de upstream. This patch finishes all outstanding SCSI IO commands (but not other commands, e.g., task management) in the shutdown and unload paths. It first waits for the commands to complete (this is done after setting 'ioc->remove_host = 1 ', which prevents new commands to be queued) then it flushes commands that might still be running. This avoids triggering error handling (e.g., abort command) for all commands possibly completed by the adapter after interrupts disabled. [mauricfo: introduced something in commit message.] Signed-off-by: Sreekanth Reddy Tested-by: Mauricio Faria de Oliveira Signed-off-by: Mauricio Faria de Oliveira Signed-off-by: Martin K. Petersen [mauricfo: backport to linux-4.14.y (a few updates to context lines)] Signed-off-by: Mauricio Faria de Oliveira Signed-off-by: Greg Kroah-Hartman --- drivers/scsi/mpt3sas/mpt3sas_base.c | 8 ++++---- drivers/scsi/mpt3sas/mpt3sas_base.h | 3 +++ drivers/scsi/mpt3sas/mpt3sas_scsih.c | 10 +++++++++- 3 files changed, 16 insertions(+), 5 deletions(-) --- a/drivers/scsi/mpt3sas/mpt3sas_base.c +++ b/drivers/scsi/mpt3sas/mpt3sas_base.c @@ -5659,14 +5659,14 @@ _base_reset_handler(struct MPT3SAS_ADAPT } /** - * _wait_for_commands_to_complete - reset controller + * mpt3sas_wait_for_commands_to_complete - reset controller * @ioc: Pointer to MPT_ADAPTER structure * * This function waiting(3s) for all pending commands to complete * prior to putting controller in reset. */ -static void -_wait_for_commands_to_complete(struct MPT3SAS_ADAPTER *ioc) +void +mpt3sas_wait_for_commands_to_complete(struct MPT3SAS_ADAPTER *ioc) { u32 ioc_state; unsigned long flags; @@ -5745,7 +5745,7 @@ mpt3sas_base_hard_reset_handler(struct M is_fault = 1; } _base_reset_handler(ioc, MPT3_IOC_PRE_RESET); - _wait_for_commands_to_complete(ioc); + mpt3sas_wait_for_commands_to_complete(ioc); _base_mask_interrupts(ioc); r = _base_make_ioc_ready(ioc, type); if (r) --- a/drivers/scsi/mpt3sas/mpt3sas_base.h +++ b/drivers/scsi/mpt3sas/mpt3sas_base.h @@ -1292,6 +1292,9 @@ void mpt3sas_base_update_missing_delay(s int mpt3sas_port_enable(struct MPT3SAS_ADAPTER *ioc); +void +mpt3sas_wait_for_commands_to_complete(struct MPT3SAS_ADAPTER *ioc); + /* scsih shared API */ u8 mpt3sas_scsih_event_callback(struct MPT3SAS_ADAPTER *ioc, u8 msix_index, --- a/drivers/scsi/mpt3sas/mpt3sas_scsih.c +++ b/drivers/scsi/mpt3sas/mpt3sas_scsih.c @@ -3960,7 +3960,7 @@ _scsih_flush_running_cmds(struct MPT3SAS _scsih_set_satl_pending(scmd, false); mpt3sas_base_free_smid(ioc, smid); scsi_dma_unmap(scmd); - if (ioc->pci_error_recovery) + if (ioc->pci_error_recovery || ioc->remove_host) scmd->result = DID_NO_CONNECT << 16; else scmd->result = DID_RESET << 16; @@ -8243,6 +8243,10 @@ static void scsih_remove(struct pci_dev unsigned long flags; ioc->remove_host = 1; + + mpt3sas_wait_for_commands_to_complete(ioc); + _scsih_flush_running_cmds(ioc); + _scsih_fw_event_cleanup_queue(ioc); spin_lock_irqsave(&ioc->fw_event_lock, flags); @@ -8313,6 +8317,10 @@ scsih_shutdown(struct pci_dev *pdev) unsigned long flags; ioc->remove_host = 1; + + mpt3sas_wait_for_commands_to_complete(ioc); + _scsih_flush_running_cmds(ioc); + _scsih_fw_event_cleanup_queue(ioc); spin_lock_irqsave(&ioc->fw_event_lock, flags);