Received: by 2002:a25:4158:0:0:0:0:0 with SMTP id o85csp1019910yba; Thu, 4 Apr 2019 02:34:34 -0700 (PDT) X-Google-Smtp-Source: APXvYqyJiZ2Uf1Oo01gL52ACjy4RrWVhjq2VP0Xb36kbedSURDy7mWJSwULgRzHBDd2XPEIMroth X-Received: by 2002:a17:902:b286:: with SMTP id u6mr5366849plr.310.1554370474630; Thu, 04 Apr 2019 02:34:34 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1554370474; cv=none; d=google.com; s=arc-20160816; b=ISSNsimV/mahpOla37oUl1hGZdSCYWQVB+7DWkkyldN2RCnRE98fvC1yIVMrNTgP+h PcRMtWzIAKZTF7hO2/+NtJEcNHypy7AqSDbiwLSWek8XMd0DrNTjqDquoxxJzi9NuE0H RBKX4Pca7f75ZiP9zv75stLKkI0bXj4ZoKO22uRewlWWlQrL4yqA+OqpxJ6e3rAC47jk zVqzxrJrIbtVN0jqQ8E35gxJRBUF0p3whPCgal2+0jIMW7kSaV6NDSXfrFa6M3/JbuKg LAuP9Fkx+QN1i2oWcoy1FVabK3i2J8UbZ1apUfs+oeDRKcZOJ60lEsdgAoQdk+n/7gc4 tNiQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:mime-version :user-agent:references:in-reply-to:message-id:date:subject:cc:to :from:dkim-signature; bh=C6wbJgyRMVOnD5CAV70+aBzycxCJOj+lnlMgDKTBUmU=; b=D6Syr79ZQjrpi83Mo61CHwoFEN1U3/0/LugvjARt0DoG3eT+NG8Z8LL7q6TiDfbg6f lQoopPbpIdDjMguS2Z6+sjkqfto1v4kLtSMcO6TV69n9GUntSBcIbMUHk8GuM8twRH6X ei1mb47m1PtpnnVXRN2cwrr2E4x7EP0JRS+fzg6JSp8sLt4jE92jWjiksf4Pk6EBY1HI 7ERzBOAojHYRy76Drt1PsEzliPxcqzQp7As4mTLBF/0aZGltHps4zNFxpMHUS83H3+IU 3Jr/XUCFhI7M8kOEsb66354ukYjIEJn6/U7NHVu8CXkwtDjZm/c5JulE44t8apOwYHRG spYA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=aA9q99WK; 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 g10si15927487pll.374.2019.04.04.02.34.19; Thu, 04 Apr 2019 02:34:34 -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; dkim=pass header.i=@kernel.org header.s=default header.b=aA9q99WK; 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 S1732636AbfDDJIV (ORCPT + 99 others); Thu, 4 Apr 2019 05:08:21 -0400 Received: from mail.kernel.org ([198.145.29.99]:47364 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1732189AbfDDJIT (ORCPT ); Thu, 4 Apr 2019 05:08:19 -0400 Received: from localhost (83-86-89-107.cable.dynamic.v4.ziggo.nl [83.86.89.107]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPSA id C5821218FF; Thu, 4 Apr 2019 09:08:17 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1554368898; bh=chVVm/2/4OKB5cIRpVAtGVf8rX01/FTP83VSQQiQMuY=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=aA9q99WK5rnIx7mery1T7dFmQOXb2xduhqG1i8ISqBhcPg/4Y+Qq2DP5PVzPRoyvr vgztnP6hA83bVA4hAd4pIwK3rUn0pCd0tBRGLFpY1F9oAbaaS8h7P7rNisGOn7VGZY Le9R5vWKcpzazSfqKjZYZx/Ba4q9l5mxKr8x8VkA= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Xiang Chen , John Garry , "Martin K. Petersen" , Sasha Levin Subject: [PATCH 5.0 022/246] scsi: hisi_sas: Fix a timeout race of driver internal and SMP IO Date: Thu, 4 Apr 2019 10:45:22 +0200 Message-Id: <20190404084619.916001143@linuxfoundation.org> X-Mailer: git-send-email 2.21.0 In-Reply-To: <20190404084619.236418459@linuxfoundation.org> References: <20190404084619.236418459@linuxfoundation.org> User-Agent: quilt/0.65 X-stable: review X-Patchwork-Hint: ignore MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org 5.0-stable review patch. If anyone has any objections, please let me know. ------------------ [ Upstream commit 4790595723d4b833b18c994973d39f9efb842887 ] For internal IO and SMP IO, there is a time-out timer for them. In the timer handler, it checks whether IO is done according to the flag task->task_state_lock. There is an issue which may cause system suspended: internal IO or SMP IO is sent, but at that time because of hardware exception (such as inject 2Bit ECC error), so IO is not completed and also not timeout. But, at that time, the SAS controller reset occurs to recover system. It will release the resource and set the status of IO to be SAS_TASK_STATE_DONE, so when IO timeout, it will never complete the completion of IO and wait for ever. [ 729.123632] Call trace: [ 729.126791] [] __switch_to+0x94/0xa8 [ 729.133106] [] __schedule+0x1e8/0x7fc [ 729.138975] [] schedule+0x34/0x8c [ 729.144401] [] schedule_timeout+0x1d8/0x3cc [ 729.150690] [] wait_for_common+0xdc/0x1a0 [ 729.157101] [] wait_for_completion+0x28/0x34 [ 729.165973] [] hisi_sas_internal_task_abort+0x2a0/0x424 [hisi_sas_test_main] [ 729.176447] [] hisi_sas_abort_task+0x244/0x2d8 [hisi_sas_test_main] [ 729.185258] [] sas_eh_handle_sas_errors+0x1c8/0x7b8 [ 729.192391] [] sas_scsi_recover_host+0x130/0x398 [ 729.199237] [] scsi_error_handler+0x148/0x5c0 [ 729.206009] [] kthread+0x10c/0x138 [ 729.211563] [] ret_from_fork+0x10/0x18 To solve the issue, callback function task_done of those IOs need to be called when on SAS controller reset. Signed-off-by: Xiang Chen Signed-off-by: John Garry Signed-off-by: Martin K. Petersen Signed-off-by: Sasha Levin --- drivers/scsi/hisi_sas/hisi_sas_main.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/drivers/scsi/hisi_sas/hisi_sas_main.c b/drivers/scsi/hisi_sas/hisi_sas_main.c index 88ae415e907a..62d158574281 100644 --- a/drivers/scsi/hisi_sas/hisi_sas_main.c +++ b/drivers/scsi/hisi_sas/hisi_sas_main.c @@ -873,7 +873,8 @@ static void hisi_sas_do_release_task(struct hisi_hba *hisi_hba, struct sas_task spin_lock_irqsave(&task->task_state_lock, flags); task->task_state_flags &= ~(SAS_TASK_STATE_PENDING | SAS_TASK_AT_INITIATOR); - task->task_state_flags |= SAS_TASK_STATE_DONE; + if (!slot->is_internal && task->task_proto != SAS_PROTOCOL_SMP) + task->task_state_flags |= SAS_TASK_STATE_DONE; spin_unlock_irqrestore(&task->task_state_lock, flags); } -- 2.19.1