From: Muneendra <muneendra.kumar@broadcom.com>
To: linux-scsi@vger.kernel.org, michael.christie@oracle.com, hare@suse.de
Cc: jsmart2021@gmail.com, emilne@redhat.com, mkumar@redhat.com,
Muneendra <muneendra.kumar@broadcom.com>
Subject: [PATCH v7 2/5] scsi: No retries on abort success
Date: Wed, 11 Nov 2020 10:28:02 +0530 [thread overview]
Message-ID: <1605070685-20945-3-git-send-email-muneendra.kumar@broadcom.com> (raw)
In-Reply-To: <1605070685-20945-1-git-send-email-muneendra.kumar@broadcom.com>
[-- Attachment #1: Type: text/plain, Size: 3592 bytes --]
Added a new optional routine eh_should_retry_cmd
in scsi_host_template that allows the transport to decide if a
cmd is retryable.Return true if the transport is in a state the
cmd should be retried on.
Added a new interface scsi_eh_should_retry_cmd which checks and
calls the new routine eh_should_retry_cmd.
Made changes in scmd_eh_abort_handler and scsi_eh_flush_done_q which
calls the scsi_eh_should_retry_cmd to check whether the
command needs to be retried.
The above changes were done based on a patch by Mike Christie.
Signed-off-by: Muneendra <muneendra.kumar@broadcom.com>
---
v7:
Added New routine in scsi_host_template to decide if a cmd is
retryable instead of checking the same using SCMD_NORETRIES_ABORT
bit as the cmd retry part can be checked by validating the port state.
Moved the DID_TRANSPORT_MARGINAL changes to previous patch
for reordering
v6:
Rearranged the patch by merging second hunk of the patch2 in v5
to this patch
v5:
added the DID_TRANSPORT_MARGINAL case to
scsi_decide_disposition
v4:
Modified the comments in the code appropriately
v3:
Merged first part of the previous patch(v2 patch3) with
this patch.
v2:
set the hostbyte as DID_TRANSPORT_MARGINAL instead of
DID_TRANSPORT_FAILFAST.
---
drivers/scsi/scsi_error.c | 17 +++++++++++++++--
include/scsi/scsi_host.h | 6 ++++++
2 files changed, 21 insertions(+), 2 deletions(-)
diff --git a/drivers/scsi/scsi_error.c b/drivers/scsi/scsi_error.c
index 28056ee498b3..1cdfa5a8ca09 100644
--- a/drivers/scsi/scsi_error.c
+++ b/drivers/scsi/scsi_error.c
@@ -124,6 +124,17 @@ static bool scsi_cmd_retry_allowed(struct scsi_cmnd *cmd)
return ++cmd->retries <= cmd->allowed;
}
+static bool scsi_eh_should_retry_cmd(struct scsi_cmnd *cmd)
+{
+ struct scsi_device *sdev = cmd->device;
+ struct Scsi_Host *host = sdev->host;
+
+ if (host->hostt->eh_should_retry_cmd)
+ return host->hostt->eh_should_retry_cmd(cmd);
+
+ return true;
+}
+
/**
* scmd_eh_abort_handler - Handle command aborts
* @work: command to be aborted.
@@ -159,7 +170,8 @@ scmd_eh_abort_handler(struct work_struct *work)
"eh timeout, not retrying "
"aborted command\n"));
} else if (!scsi_noretry_cmd(scmd) &&
- scsi_cmd_retry_allowed(scmd)) {
+ scsi_cmd_retry_allowed(scmd) &&
+ scsi_eh_should_retry_cmd(scmd)) {
SCSI_LOG_ERROR_RECOVERY(3,
scmd_printk(KERN_WARNING, scmd,
"retry aborted command\n"));
@@ -2111,7 +2123,8 @@ void scsi_eh_flush_done_q(struct list_head *done_q)
list_for_each_entry_safe(scmd, next, done_q, eh_entry) {
list_del_init(&scmd->eh_entry);
if (scsi_device_online(scmd->device) &&
- !scsi_noretry_cmd(scmd) && scsi_cmd_retry_allowed(scmd)) {
+ !scsi_noretry_cmd(scmd) && scsi_cmd_retry_allowed(scmd) &&
+ scsi_eh_should_retry_cmd(scmd)) {
SCSI_LOG_ERROR_RECOVERY(3,
scmd_printk(KERN_INFO, scmd,
"%s: flush retry cmd\n",
diff --git a/include/scsi/scsi_host.h b/include/scsi/scsi_host.h
index 701f178b20ae..e30fd963b97d 100644
--- a/include/scsi/scsi_host.h
+++ b/include/scsi/scsi_host.h
@@ -314,6 +314,12 @@ struct scsi_host_template {
* Status: OPTIONAL
*/
enum blk_eh_timer_return (*eh_timed_out)(struct scsi_cmnd *);
+ /*
+ * Optional routine that allows the transport to decide if a cmd
+ * is retryable. Return true if the transport is in a state the
+ * cmd should be retried on.
+ */
+ bool (*eh_should_retry_cmd)(struct scsi_cmnd *scmd);
/* This is an optional routine that allows transport to initiate
* LLD adapter or firmware reset using sysfs attribute.
--
2.26.2
[-- Attachment #2: S/MIME Cryptographic Signature --]
[-- Type: application/pkcs7-signature, Size: 4177 bytes --]
next prev parent reply other threads:[~2020-11-11 11:51 UTC|newest]
Thread overview: 26+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-11-11 4:58 [PATCH v7 0/5] scsi: Support to handle Intermittent errors Muneendra
2020-11-11 4:58 ` [PATCH v7 1/5] scsi: Added a new error code DID_TRANSPORT_MARGINAL in scsi.h Muneendra
2020-11-16 8:16 ` Hannes Reinecke
2020-11-23 19:45 ` Ewan D. Milne
2020-11-24 17:42 ` Himanshu Madhani
2020-11-11 4:58 ` Muneendra [this message]
2020-11-16 8:22 ` [PATCH v7 2/5] scsi: No retries on abort success Hannes Reinecke
2020-11-23 19:45 ` Ewan D. Milne
2020-11-24 17:43 ` Himanshu Madhani
2020-11-11 4:58 ` [PATCH v7 3/5] scsi_transport_fc: Added a new rport state FC_PORTSTATE_MARGINAL Muneendra
2020-11-16 8:19 ` Hannes Reinecke
2020-11-17 7:43 ` Muneendra Kumar M
2020-11-23 20:01 ` Ewan D. Milne
2020-11-23 19:47 ` Ewan D. Milne
2020-11-24 17:43 ` Himanshu Madhani
2020-11-11 4:58 ` [PATCH v7 4/5] scsi_transport_fc: Added store fucntionality to set the rport port_state using sysfs Muneendra
2020-11-16 8:20 ` Hannes Reinecke
2020-11-23 19:47 ` Ewan D. Milne
2020-11-24 17:44 ` Himanshu Madhani
2020-11-11 4:58 ` [PATCH v7 5/5] scsi:lpfc: Added support for eh_should_retry_cmd Muneendra
2020-11-16 8:23 ` Hannes Reinecke
2020-11-23 19:51 ` Ewan D. Milne
2020-11-23 19:48 ` Ewan D. Milne
2020-11-24 17:46 ` Himanshu Madhani
2020-12-08 5:00 ` [PATCH v7 0/5] scsi: Support to handle Intermittent errors Muneendra Kumar M
2020-12-08 5:14 ` Martin K. Petersen
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=1605070685-20945-3-git-send-email-muneendra.kumar@broadcom.com \
--to=muneendra.kumar@broadcom.com \
--cc=emilne@redhat.com \
--cc=hare@suse.de \
--cc=jsmart2021@gmail.com \
--cc=linux-scsi@vger.kernel.org \
--cc=michael.christie@oracle.com \
--cc=mkumar@redhat.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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.