Received: by 10.223.185.111 with SMTP id b44csp903587wrg; Fri, 9 Mar 2018 16:27:36 -0800 (PST) X-Google-Smtp-Source: AG47ELtLx2yjv9ZuJ6QpqVsMpWuoPQPk4T+a7XY5uzYjIA+mK0JL+HvyKOYpjWJ5xryv3gQvL97m X-Received: by 10.99.116.23 with SMTP id p23mr289629pgc.178.1520641656630; Fri, 09 Mar 2018 16:27:36 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1520641656; cv=none; d=google.com; s=arc-20160816; b=vFA78j7w0o1a2WzezDbbJMpOWN/QCcelF1QSdDJqIcLQqUdUQEDo+LVnZhV9Qd9xPo fjvp7BwHhfz3lwKMAa9Fc+g68yRg/MqkbYObK74YTeoJ3xHrmsqRUp9XQNZZLkD4AF0F ORldfEAQKr8aXB05k7wHPkFPZIynp75Liu8Gf0TcuwORBAe0wLwZ2BgHkH42Jq1xk4GH g3n2ePtj1PaNbV97amB5JcKiqe3NVPv30co0tid+K7191rRAoE7BCVP3Zaxng22Rycv7 luNd4wzackMIldPg15fMvH4H42thosY7A2t2XfqWZcncqbJL30zH2n9U+C7j1FfJr8AW 7A+Q== 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=YZ2pwC1Tz4ydFS0kq9DNL7xEizYi8VBDfZOOIMcE6i8=; b=Inc7oXVDv9fmrt4HVAPUpg/duRDZrsQDQnHgI1shU4DcCu+nZfHx8E+3tan7kLv40t KYgQapLCaEqkVv4yCdZfsYvDj4GzPMJs6ed74QUpJqUiPQtsINfg2Zb0GqkzjkUH+u9z w7pP1Q5GGSj+YDmfkgLWj30ohEm6DXD7NQslc4hO9LN17cMtvnEvm6EkVgagzxxDnpBO NtQ42MCujcjpQrqhhkpG95cyahLB4kGCj4htbmJ1rTkZhGqSQMZh8THtk8P0T0Lrd6wP BRXvcbaJouprsUjW3LrU4aUvO2ggW7CdwAoJpPffc/0MhQq0FK3UO+SsRX5wv1e7B4JI eZgA== 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 l5-v6si1827367pls.438.2018.03.09.16.27.22; Fri, 09 Mar 2018 16:27:36 -0800 (PST) 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 S934141AbeCJAXk (ORCPT + 99 others); Fri, 9 Mar 2018 19:23:40 -0500 Received: from mail.linuxfoundation.org ([140.211.169.12]:40944 "EHLO mail.linuxfoundation.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S933088AbeCJAXi (ORCPT ); Fri, 9 Mar 2018 19:23:38 -0500 Received: from localhost (unknown [185.236.200.248]) by mail.linuxfoundation.org (Postfix) with ESMTPSA id 628A8E10; Sat, 10 Mar 2018 00:23:37 +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.15 10/11] scsi: mpt3sas: wait for and flush running commands on shutdown/unload Date: Fri, 9 Mar 2018 16:19:24 -0800 Message-Id: <20180310001835.126447960@linuxfoundation.org> X-Mailer: git-send-email 2.16.2 In-Reply-To: <20180310001834.560857664@linuxfoundation.org> References: <20180310001834.560857664@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.15-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.15.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 @@ -6289,14 +6289,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; @@ -6375,7 +6375,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 @@ -1435,6 +1435,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 @@ -4614,7 +4614,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; @@ -9904,6 +9904,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); @@ -9980,6 +9984,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);