aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHannes Reinecke <[email protected]>2022-12-06 14:13:45 +0100
committerMartin K. Petersen <[email protected]>2022-12-14 02:58:32 +0000
commitd0b9025540ef57cc4464ab2fc64ed8ddc49b5658 (patch)
tree70c7e73a23e586a44656f330c82eb9e17dc2e113
parent67ff3d0a49f3d445c3922e30a54e03c161da561e (diff)
scsi: core: scsi_error: Do not queue pointless abort workqueue functions
If a host template doesn't implement the .eh_abort_handler() there is no point in queueing the abort workqueue function; all it does is invoking SCSI EH anyway. So return 'FAILED' from scsi_abort_command() if the .eh_abort_handler() is not implemented and save us from having to wait for the abort workqueue function to complete. Cc: Niklas Cassel <[email protected]> Cc: Damien Le Moal <[email protected]> Cc: John Garry <[email protected]> Signed-off-by: Hannes Reinecke <[email protected]> [niklas: moved the check to the top of scsi_abort_command()] Signed-off-by: Niklas Cassel <[email protected]> Link: https://lore.kernel.org/r/[email protected] Reviewed-by: John Garry <[email protected]> Signed-off-by: Martin K. Petersen <[email protected]>
-rw-r--r--drivers/scsi/scsi_error.c5
1 files changed, 5 insertions, 0 deletions
diff --git a/drivers/scsi/scsi_error.c b/drivers/scsi/scsi_error.c
index 613d5aeb1e3c..955ee1bfde8f 100644
--- a/drivers/scsi/scsi_error.c
+++ b/drivers/scsi/scsi_error.c
@@ -231,6 +231,11 @@ scsi_abort_command(struct scsi_cmnd *scmd)
struct Scsi_Host *shost = sdev->host;
unsigned long flags;
+ if (!shost->hostt->eh_abort_handler) {
+ /* No abort handler, fail command directly */
+ return FAILED;
+ }
+
if (scmd->eh_eflags & SCSI_EH_ABORT_SCHEDULED) {
/*
* Retry after abort failed, escalate to next level.