Received: by 2002:a05:6a10:d5a5:0:0:0:0 with SMTP id gn37csp2274090pxb; Fri, 8 Oct 2021 04:43:14 -0700 (PDT) X-Google-Smtp-Source: ABdhPJwUfHepX1Yj0+PA+r7kpFIci0o763wcYbOOl7+2C+XDM7XT4hoxWYIGGd1cMXu+S2Kehjy4 X-Received: by 2002:a05:6a00:190b:b0:447:b298:423f with SMTP id y11-20020a056a00190b00b00447b298423fmr9674687pfi.10.1633693393956; Fri, 08 Oct 2021 04:43:13 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1633693393; cv=none; d=google.com; s=arc-20160816; b=mdQkivs0zmYExGH8dbuIDrjg+e3EM5e2yUJi04uzc4QiuYe8BCB8d35ggCW0o86G+x KOBzyoVn24WpNA3I0IdETIC6tI0hPpa9p9F4zKfymgjZpknmpakpteLskPgRTjyb9GpV eizxpC+t63WseDvZ9I1eCyTLASFYssIAxfwv6yEo4JlqROAZDH4osZvInnToGRM5jn53 DOf2SpiXJgEbZ+JmcRrPux4uBQhe8Cpcc70cCCAWPci7ECHHPDsSxY1mHzZinJkthusm tQ+Ks4UUoBNJpzUStvJK+BKT9UoSuDhKWzpkC71DyFwkJL0lwnwWj8a6456DBOZB4soW g4Pw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :user-agent:references:in-reply-to:message-id:date:subject:cc:to :from:dkim-signature; bh=Vh2DzqyyH5MFCp77/cPwePSnG1oISZPbwNEmIkGkAc0=; b=O4m1+mYfS1oHBt1XUf8wDAp04V/qwp6xHSiwhnzCgdqKfVpD7BmFPQixhEmfG3A/lB OSw+aXciTwlYUvO//Dw9Dtd7dkSOQjlPJuiJ1+h4ZopbabACDTikwDfNf1MeiegfdN/7 Zpoarg1OCtANlOkWSoiP2R5oGMGgzuwNXLktv6sL97oAsQxcWcRpoaiNxkvVwWhoHK5k a55Z90lcgqdVVqi1gMAsqJV1SqPwoGHykUSBtnlXQBQKYhmujRHmLuxLHwNxUpwjhhoq rSc8ID3mLhlJ+J9iPjHzrPAHiCsD5Aba0DZlMNzAgz/AaX5Yv0evlAxtP3uF5EokQsAM Vmvw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linuxfoundation.org header.s=korg header.b=w0YRlsQC; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linuxfoundation.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id t26si2979787pgu.364.2021.10.08.04.43.01; Fri, 08 Oct 2021 04:43:13 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=pass header.i=@linuxfoundation.org header.s=korg header.b=w0YRlsQC; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linuxfoundation.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S242780AbhJHLm7 (ORCPT + 99 others); Fri, 8 Oct 2021 07:42:59 -0400 Received: from mail.kernel.org ([198.145.29.99]:39710 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S241009AbhJHLjL (ORCPT ); Fri, 8 Oct 2021 07:39:11 -0400 Received: by mail.kernel.org (Postfix) with ESMTPSA id 0A983615E2; Fri, 8 Oct 2021 11:33:31 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=linuxfoundation.org; s=korg; t=1633692812; bh=Qlnfsy33Fa5GLT82aBUq02M+g7d+tQhUIXd/wlt7r+0=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=w0YRlsQCt4kIRyik0QD0qacVJfsMJvdRh6WAMDJjzMkbEza/nrNjB6rypTHTsTUk7 SEFB8pU+pwSQmyUKhqwH31Dn3kHgN1t35OlMgHtZDi3A+vmbHuAiB9197arMNRoZrt gcFGWhz71y9kMj4N6jAJeeoA17BC6UIRYJVyCYrI= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Brian King , James Bottomley , Wen Xiong , "Martin K. Petersen" , Sasha Levin Subject: [PATCH 5.14 32/48] scsi: ses: Retry failed Send/Receive Diagnostic commands Date: Fri, 8 Oct 2021 13:28:08 +0200 Message-Id: <20211008112721.096879557@linuxfoundation.org> X-Mailer: git-send-email 2.33.0 In-Reply-To: <20211008112720.008415452@linuxfoundation.org> References: <20211008112720.008415452@linuxfoundation.org> User-Agent: quilt/0.66 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Wen Xiong [ Upstream commit fbdac19e642899455b4e64c63aafe2325df7aafa ] Setting SCSI logging level with error=3, we saw some errors from enclosues: [108017.360833] ses 0:0:9:0: tag#641 Done: NEEDS_RETRY Result: hostbyte=DID_ERROR driverbyte=DRIVER_OK cmd_age=0s [108017.360838] ses 0:0:9:0: tag#641 CDB: Receive Diagnostic 1c 01 01 00 20 00 [108017.427778] ses 0:0:9:0: Power-on or device reset occurred [108017.427784] ses 0:0:9:0: tag#641 Done: SUCCESS Result: hostbyte=DID_OK driverbyte=DRIVER_OK cmd_age=0s [108017.427788] ses 0:0:9:0: tag#641 CDB: Receive Diagnostic 1c 01 01 00 20 00 [108017.427791] ses 0:0:9:0: tag#641 Sense Key : Unit Attention [current] [108017.427793] ses 0:0:9:0: tag#641 Add. Sense: Bus device reset function occurred [108017.427801] ses 0:0:9:0: Failed to get diagnostic page 0x1 [108017.427804] ses 0:0:9:0: Failed to bind enclosure -19 [108017.427895] ses 0:0:10:0: Attached Enclosure device [108017.427942] ses 0:0:10:0: Attached scsi generic sg18 type 13 Retry if the Send/Receive Diagnostic commands complete with a transient error status (NOT_READY or UNIT_ATTENTION with ASC 0x29). Link: https://lore.kernel.org/r/1631849061-10210-2-git-send-email-wenxiong@linux.ibm.com Reviewed-by: Brian King Reviewed-by: James Bottomley Signed-off-by: Wen Xiong Signed-off-by: Martin K. Petersen Signed-off-by: Sasha Levin --- drivers/scsi/ses.c | 22 ++++++++++++++++++---- 1 file changed, 18 insertions(+), 4 deletions(-) diff --git a/drivers/scsi/ses.c b/drivers/scsi/ses.c index c2afba2a5414..43e682297fd5 100644 --- a/drivers/scsi/ses.c +++ b/drivers/scsi/ses.c @@ -87,9 +87,16 @@ static int ses_recv_diag(struct scsi_device *sdev, int page_code, 0 }; unsigned char recv_page_code; + unsigned int retries = SES_RETRIES; + struct scsi_sense_hdr sshdr; + + do { + ret = scsi_execute_req(sdev, cmd, DMA_FROM_DEVICE, buf, bufflen, + &sshdr, SES_TIMEOUT, 1, NULL); + } while (ret > 0 && --retries && scsi_sense_valid(&sshdr) && + (sshdr.sense_key == NOT_READY || + (sshdr.sense_key == UNIT_ATTENTION && sshdr.asc == 0x29))); - ret = scsi_execute_req(sdev, cmd, DMA_FROM_DEVICE, buf, bufflen, - NULL, SES_TIMEOUT, SES_RETRIES, NULL); if (unlikely(ret)) return ret; @@ -121,9 +128,16 @@ static int ses_send_diag(struct scsi_device *sdev, int page_code, bufflen & 0xff, 0 }; + struct scsi_sense_hdr sshdr; + unsigned int retries = SES_RETRIES; + + do { + result = scsi_execute_req(sdev, cmd, DMA_TO_DEVICE, buf, bufflen, + &sshdr, SES_TIMEOUT, 1, NULL); + } while (result > 0 && --retries && scsi_sense_valid(&sshdr) && + (sshdr.sense_key == NOT_READY || + (sshdr.sense_key == UNIT_ATTENTION && sshdr.asc == 0x29))); - result = scsi_execute_req(sdev, cmd, DMA_TO_DEVICE, buf, bufflen, - NULL, SES_TIMEOUT, SES_RETRIES, NULL); if (result) sdev_printk(KERN_ERR, sdev, "SEND DIAGNOSTIC result: %8x\n", result); -- 2.33.0