39 lines
1.5 KiB
Diff
39 lines
1.5 KiB
Diff
From: James Bottomley <JBottomley@Parallels.com>
|
|
Date: Fri, 28 Mar 2014 10:50:17 -0700
|
|
Subject: [SCSI] Fix spurious request sense in error handling
|
|
Origin: https://git.kernel.org/linus/d555a2abf3481f81303d835046a5ec2c4fb3ca8e
|
|
|
|
We unconditionally execute scsi_eh_get_sense() to make sure all failed
|
|
commands that should have sense attached, do. However, the routine forgets
|
|
that some commands, because of the way they fail, will not have any sense code
|
|
... we should not bother them with a REQUEST_SENSE command. Fix this by
|
|
testing to see if we actually got a CHECK_CONDITION return and skip asking for
|
|
sense if we don't.
|
|
|
|
Tested-by: Alan Stern <stern@rowland.harvard.edu>
|
|
Signed-off-by: James Bottomley <JBottomley@Parallels.com>
|
|
---
|
|
drivers/scsi/scsi_error.c | 9 +++++++++
|
|
1 file changed, 9 insertions(+)
|
|
|
|
diff --git a/drivers/scsi/scsi_error.c b/drivers/scsi/scsi_error.c
|
|
index 771c16b..d020149 100644
|
|
--- a/drivers/scsi/scsi_error.c
|
|
+++ b/drivers/scsi/scsi_error.c
|
|
@@ -1157,6 +1157,15 @@ int scsi_eh_get_sense(struct list_head *work_q,
|
|
__func__));
|
|
break;
|
|
}
|
|
+ if (status_byte(scmd->result) != CHECK_CONDITION)
|
|
+ /*
|
|
+ * don't request sense if there's no check condition
|
|
+ * status because the error we're processing isn't one
|
|
+ * that has a sense code (and some devices get
|
|
+ * confused by sense requests out of the blue)
|
|
+ */
|
|
+ continue;
|
|
+
|
|
SCSI_LOG_ERROR_RECOVERY(2, scmd_printk(KERN_INFO, scmd,
|
|
"%s: requesting sense\n",
|
|
current->comm));
|