From: Mike Christie <michael.christie@oracle.com>
To: bvanassche@acm.org, mwilck@suse.com, hch@lst.de,
martin.petersen@oracle.com, linux-scsi@vger.kernel.org,
james.bottomley@hansenpartnership.com
Cc: Mike Christie <michael.christie@oracle.com>
Subject: [PATCH v2 23/35] scsi: Have scsi-ml retry sd_spinup_disk errors
Date: Wed, 28 Sep 2022 21:53:55 -0500 [thread overview]
Message-ID: <20220929025407.119804-24-michael.christie@oracle.com> (raw)
In-Reply-To: <20220929025407.119804-1-michael.christie@oracle.com>
This simplifies sd_spinup_disk so scsi-ml retries errors for it. Note that
we retried specifically on a UA and also if scsi_status_is_good returned
failed which could happen for all check conditions, so in this patch we
don't check for only UAs.
We do not handle the outside loop's retries because we want to sleep
between tried and we don't support that yet.
Signed-off-by: Mike Christie <michael.christie@oracle.com>
---
drivers/scsi/sd.c | 76 ++++++++++++++++++++++++++++-------------------
1 file changed, 45 insertions(+), 31 deletions(-)
diff --git a/drivers/scsi/sd.c b/drivers/scsi/sd.c
index a35c089c3097..716e0c8ffa57 100644
--- a/drivers/scsi/sd.c
+++ b/drivers/scsi/sd.c
@@ -2064,50 +2064,64 @@ sd_spinup_disk(struct scsi_disk *sdkp)
{
unsigned char cmd[10];
unsigned long spintime_expire = 0;
- int retries, spintime;
+ int spintime;
unsigned int the_result;
struct scsi_sense_hdr sshdr;
int sense_valid = 0;
+ struct scsi_failure failures[] = {
+ {
+ .sense = SCMD_FAILURE_SENSE_ANY,
+ .asc = SCMD_FAILURE_ASC_ANY,
+ .ascq = SCMD_FAILURE_ASCQ_ANY,
+ .allowed = 3,
+ .result = SAM_STAT_CHECK_CONDITION,
+ },
+ {
+ /*
+ * Retry scsi status and host errors that return
+ * failure in scsi_status_is_good.
+ */
+ .result = SAM_STAT_BUSY |
+ SAM_STAT_RESERVATION_CONFLICT |
+ SAM_STAT_TASK_SET_FULL |
+ SAM_STAT_ACA_ACTIVE |
+ SAM_STAT_TASK_ABORTED |
+ DID_NO_CONNECT << 16,
+ },
+ {},
+ };
spintime = 0;
/* Spin up drives, as required. Only do this at boot time */
/* Spinup needs to be done for module loads too. */
do {
- retries = 0;
-
- do {
- bool media_was_present = sdkp->media_present;
+ bool media_was_present = sdkp->media_present;
- cmd[0] = TEST_UNIT_READY;
- memset((void *) &cmd[1], 0, 9);
+ cmd[0] = TEST_UNIT_READY;
+ memset((void *) &cmd[1], 0, 9);
- the_result = scsi_exec_req(((struct scsi_exec_args) {
- .sdev = sdkp->device,
- .cmd = cmd,
- .data_dir = DMA_NONE,
- .sshdr = &sshdr,
- .timeout = SD_TIMEOUT,
- .retries = sdkp->max_retries }));
+ the_result = scsi_exec_req(((struct scsi_exec_args) {
+ .sdev = sdkp->device,
+ .cmd = cmd,
+ .data_dir = DMA_NONE,
+ .sshdr = &sshdr,
+ .timeout = SD_TIMEOUT,
+ .retries = sdkp->max_retries,
+ .failures = failures }));
- /*
- * If the drive has indicated to us that it
- * doesn't have any media in it, don't bother
- * with any more polling.
- */
- if (media_not_present(sdkp, &sshdr)) {
- if (media_was_present)
- sd_printk(KERN_NOTICE, sdkp, "Media removed, stopped polling\n");
- return;
- }
+ /*
+ * If the drive has indicated to us that it doesn't have any
+ * media in it, don't bother with any more polling.
+ */
+ if (media_not_present(sdkp, &sshdr)) {
+ if (media_was_present)
+ sd_printk(KERN_NOTICE, sdkp, "Media removed, stopped polling\n");
+ return;
+ }
- if (the_result)
- sense_valid = scsi_sense_valid(&sshdr);
- retries++;
- } while (retries < 3 &&
- (!scsi_status_is_good(the_result) ||
- (scsi_status_is_check_condition(the_result) &&
- sense_valid && sshdr.sense_key == UNIT_ATTENTION)));
+ if (the_result)
+ sense_valid = scsi_sense_valid(&sshdr);
if (!scsi_status_is_check_condition(the_result)) {
/* no sense, TUR either succeeded or failed
--
2.25.1
next prev parent reply other threads:[~2022-09-29 2:57 UTC|newest]
Thread overview: 53+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-09-29 2:53 [PATCH v2 00/35] Allow scsi_execute users to control retries Mike Christie
2022-09-29 2:53 ` [PATCH v2 01/35] scsi: Add helper to prep sense during error handling Mike Christie
2022-09-29 7:39 ` Christoph Hellwig
2022-09-30 0:05 ` Bart Van Assche
2022-09-29 2:53 ` [PATCH v2 02/35] scsi: Allow passthrough to override what errors to retry Mike Christie
2022-09-29 11:00 ` Martin Wilck
2022-09-29 16:39 ` michael.christie
2022-09-29 2:53 ` [PATCH v2 03/35] scsi: Add struct for args to execution functions Mike Christie
2022-09-29 17:02 ` Bart Van Assche
2022-09-29 20:24 ` Mike Christie
2022-09-29 20:29 ` Bart Van Assche
2022-09-30 0:12 ` Bart Van Assche
2022-09-30 2:43 ` Mike Christie
2022-09-30 17:29 ` Bart Van Assche
2022-09-29 2:53 ` [PATCH v2 04/35] scsi: Add scsi_failure field to scsi_exec_args Mike Christie
2022-09-29 2:53 ` [PATCH v2 05/35] scsi: libata: Convert to scsi_exec_req Mike Christie
2022-09-29 2:53 ` [PATCH v2 06/35] hwmon: drivetemp: " Mike Christie
2022-09-29 2:53 ` [PATCH v2 07/35] scsi: ch: " Mike Christie
2022-09-29 2:53 ` [PATCH v2 08/35] scsi: scsi_dh: " Mike Christie
2022-09-29 2:53 ` [PATCH v2 09/35] scsi: core: " Mike Christie
2022-09-29 2:53 ` [PATCH v2 10/35] scsi: spi: " Mike Christie
2022-09-29 2:53 ` [PATCH v2 11/35] scsi: sd: " Mike Christie
2022-09-29 2:53 ` [PATCH v2 12/35] scsi: zbc: " Mike Christie
2022-09-29 2:53 ` [PATCH v2 13/35] scsi: ses: " Mike Christie
2022-09-29 2:53 ` [PATCH v2 14/35] scsi: sr: " Mike Christie
2022-09-29 2:53 ` [PATCH v2 15/35] scsi: virtio_scsi: " Mike Christie
2022-09-29 2:53 ` [PATCH v2 16/35] scsi: target_core_pscsi: " Mike Christie
2022-09-29 2:53 ` [PATCH v2 17/35] scsi: ufshcd: " Mike Christie
2022-09-30 18:03 ` Bart Van Assche
2022-09-29 2:53 ` [PATCH v2 18/35] scsi: cxlflash: " Mike Christie
2022-09-29 2:53 ` [PATCH v2 19/35] scsi: Remove scsi_execute functions Mike Christie
2022-09-29 2:53 ` [PATCH v2 20/35] scsi: Have scsi-ml retry scsi_probe_lun errors Mike Christie
2022-09-29 2:53 ` [PATCH v2 21/35] scsi: retry INQUIRY after timeout Mike Christie
2022-09-29 13:49 ` Martin Wilck
2022-09-29 2:53 ` [PATCH v2 22/35] scsi: Have scsi-ml retry read_capacity_16 errors Mike Christie
2022-09-29 14:12 ` Martin Wilck
2022-09-29 2:53 ` Mike Christie [this message]
2022-09-29 14:13 ` [PATCH v2 23/35] scsi: Have scsi-ml retry sd_spinup_disk errors Martin Wilck
2022-09-29 16:47 ` michael.christie
2022-09-29 2:53 ` [PATCH v2 24/35] scsi: hp_sw: Have scsi-ml retry scsi_exec_req errors Mike Christie
2022-09-29 14:16 ` Martin Wilck
2022-09-29 2:53 ` [PATCH v2 25/35] scsi: rdac: Have scsi-ml retry send_mode_select errors Mike Christie
2022-09-29 2:53 ` [PATCH v2 26/35] scsi: spi: Have scsi-ml retry spi_execute errors Mike Christie
2022-09-29 2:53 ` [PATCH v2 27/35] scsi: sd: Have scsi-ml retry sd_sync_cache errors Mike Christie
2022-09-29 2:54 ` [PATCH v2 28/35] scsi: ch: Have scsi-ml retry ch_do_scsi errors Mike Christie
2022-09-29 2:54 ` [PATCH v2 29/35] scsi: Have scsi-ml retry scsi_mode_sense errors Mike Christie
2022-09-29 2:54 ` [PATCH v2 30/35] scsi: Have scsi-ml retry scsi_report_lun_scan errors Mike Christie
2022-09-29 2:54 ` [PATCH v2 31/35] scsi: sd: Have sd_pr_command retry UAs Mike Christie
2022-09-29 2:54 ` [PATCH v2 32/35] scsi: sd: Have scsi-ml retry read_capacity_10 errors Mike Christie
2022-09-29 2:54 ` [PATCH v2 33/35] scsi: ses: Have scsi-ml retry scsi_exec_req errors Mike Christie
2022-09-29 2:54 ` [PATCH v2 34/35] scsi: sr: Have scsi-ml retry get_sectorsize errors Mike Christie
2022-09-29 2:54 ` [PATCH v2 35/35] scsi: cxlflash: Have scsi-ml retry read_cap16 errors Mike Christie
2022-09-29 14:36 ` [PATCH v2 00/35] Allow scsi_execute users to control retries Martin Wilck
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20220929025407.119804-24-michael.christie@oracle.com \
--to=michael.christie@oracle.com \
--cc=bvanassche@acm.org \
--cc=hch@lst.de \
--cc=james.bottomley@hansenpartnership.com \
--cc=linux-scsi@vger.kernel.org \
--cc=martin.petersen@oracle.com \
--cc=mwilck@suse.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox