From: Martin Kepplinger <martin.kepplinger@puri.sm>
To: martin.kepplinger@puri.sm
Cc: bvanassche@acm.org, jejb@linux.ibm.com,
linux-kernel@vger.kernel.org, linux-scsi@vger.kernel.org,
linux-pm@vger.kernel.org, martin.petersen@oracle.com,
stern@rowland.harvard.edu
Subject: [PATCH v3 1/4] scsi: add expecting_media_change flag to error path
Date: Sun, 28 Mar 2021 12:25:28 +0200 [thread overview]
Message-ID: <20210328102531.1114535-2-martin.kepplinger@puri.sm> (raw)
In-Reply-To: <20210328102531.1114535-1-martin.kepplinger@puri.sm>
SD Cardreaders (especially) sometimes lose the state during suspend
and deliver a "media changed" unit attention when really only a
(runtime) suspend/resume cycle has been done.
For such devices, I/O fails when runtime PM is enabled, see below.
That's the motivation to add this flag. If set by a driver the
one following MEDIA CHANGE unit attention will be ignored.
Signed-off-by: Martin Kepplinger <martin.kepplinger@puri.sm>
---
drivers/scsi/scsi_error.c | 36 +++++++++++++++++++++++++++++++-----
include/scsi/scsi_device.h | 1 +
2 files changed, 32 insertions(+), 5 deletions(-)
diff --git a/drivers/scsi/scsi_error.c b/drivers/scsi/scsi_error.c
index 08c06c56331c..c62915d34ba4 100644
--- a/drivers/scsi/scsi_error.c
+++ b/drivers/scsi/scsi_error.c
@@ -585,6 +585,18 @@ int scsi_check_sense(struct scsi_cmnd *scmd)
return NEEDS_RETRY;
}
}
+ if (scmd->device->expecting_media_change) {
+ if (sshdr.asc == 0x28 && sshdr.ascq == 0x00) {
+ /*
+ * clear the expecting_media_change in
+ * scsi_decide_disposition() because we
+ * need to catch possible "fail fast" overrides
+ * that block readahead can cause.
+ */
+ return NEEDS_RETRY;
+ }
+ }
+
/*
* we might also expect a cc/ua if another LUN on the target
* reported a UA with an ASC/ASCQ of 3F 0E -
@@ -1977,14 +1989,28 @@ int scsi_decide_disposition(struct scsi_cmnd *scmd)
* the request was not marked fast fail. Note that above,
* even if the request is marked fast fail, we still requeue
* for queue congestion conditions (QUEUE_FULL or BUSY) */
- if (scsi_cmd_retry_allowed(scmd) && !scsi_noretry_cmd(scmd)) {
- return NEEDS_RETRY;
- } else {
- /*
- * no more retries - report this one back to upper level.
+ if (scsi_cmd_retry_allowed(scmd)) {
+ /* but scsi_noretry_cmd() cannot override the
+ * expecting_media_change flag.
*/
+ if (!scsi_noretry_cmd(scmd) ||
+ scmd->device->expecting_media_change) {
+ scmd->device->expecting_media_change = 0;
+ return NEEDS_RETRY;
+ }
+
+ /* Not marked fail fast, or marked but not expected.
+ * Clear the flag too because it's meant for the
+ * next UA only.
+ */
+ scmd->device->expecting_media_change = 0;
return SUCCESS;
}
+
+ /*
+ * no more retries - report this one back to upper level.
+ */
+ return SUCCESS;
}
static void eh_lock_door_done(struct request *req, blk_status_t status)
diff --git a/include/scsi/scsi_device.h b/include/scsi/scsi_device.h
index 05c7c320ef32..926b42ce1dc4 100644
--- a/include/scsi/scsi_device.h
+++ b/include/scsi/scsi_device.h
@@ -171,6 +171,7 @@ struct scsi_device {
* this device */
unsigned expecting_cc_ua:1; /* Expecting a CHECK_CONDITION/UNIT_ATTN
* because we did a bus reset. */
+ unsigned expecting_media_change:1; /* Expecting "media changed" UA */
unsigned use_10_for_rw:1; /* first try 10-byte read / write */
unsigned use_10_for_ms:1; /* first try 10-byte mode sense/select */
unsigned set_dbd_for_ms:1; /* Set "DBD" field in mode sense */
--
2.30.2
next prev parent reply other threads:[~2021-03-28 10:26 UTC|newest]
Thread overview: 11+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-03-28 10:25 [PATCH v3 0/4] scsi: add runtime PM workaround for SD cardreaders Martin Kepplinger
2021-03-28 10:25 ` Martin Kepplinger [this message]
2021-03-28 16:53 ` [PATCH v3 1/4] scsi: add expecting_media_change flag to error path Bart Van Assche
2021-03-29 8:05 ` Martin Kepplinger
2021-03-28 10:25 ` [PATCH v3 2/4] scsi: devinfo: add new flag BLIST_MEDIA_CHANGE Martin Kepplinger
2021-03-28 16:54 ` Bart Van Assche
2021-03-28 10:25 ` [PATCH v3 3/4] scsi: sd: use expecting_media_change for BLIST_MEDIA_CHANGE devices Martin Kepplinger
2021-03-28 16:46 ` Bart Van Assche
2021-03-28 10:25 ` [PATCH v3 4/4] scsi: devinfo: add BLIST_MEDIA_CHANGE for Ultra HS-SD/MMC usb cardreaders Martin Kepplinger
2021-03-28 14:58 ` [PATCH v3 0/4] scsi: add runtime PM workaround for SD cardreaders Alan Stern
2021-03-28 15:16 ` Martin Kepplinger
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=20210328102531.1114535-2-martin.kepplinger@puri.sm \
--to=martin.kepplinger@puri.sm \
--cc=bvanassche@acm.org \
--cc=jejb@linux.ibm.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-pm@vger.kernel.org \
--cc=linux-scsi@vger.kernel.org \
--cc=martin.petersen@oracle.com \
--cc=stern@rowland.harvard.edu \
/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;
as well as URLs for NNTP newsgroup(s).