aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/scsi/scsi_error.c
diff options
context:
space:
mode:
authorJames Bottomley <JBottomley@Parallels.com>2014-03-28 13:50:17 -0400
committerJames Bottomley <JBottomley@Parallels.com>2014-04-21 17:27:05 -0400
commitd555a2abf3481f81303d835046a5ec2c4fb3ca8e (patch)
treed8480a2660cfd66eaeb8f0ad416551726947c48a /drivers/scsi/scsi_error.c
parent68c03d9193f55dad93036f439b94912c5003a173 (diff)
[SCSI] Fix spurious request sense in error handling
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>
Diffstat (limited to 'drivers/scsi/scsi_error.c')
-rw-r--r--drivers/scsi/scsi_error.c9
1 files changed, 9 insertions, 0 deletions
diff --git a/drivers/scsi/scsi_error.c b/drivers/scsi/scsi_error.c
index 771c16bfdbac..d020149ea8d4 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,
1157 __func__)); 1157 __func__));
1158 break; 1158 break;
1159 } 1159 }
1160 if (status_byte(scmd->result) != CHECK_CONDITION)
1161 /*
1162 * don't request sense if there's no check condition
1163 * status because the error we're processing isn't one
1164 * that has a sense code (and some devices get
1165 * confused by sense requests out of the blue)
1166 */
1167 continue;
1168
1160 SCSI_LOG_ERROR_RECOVERY(2, scmd_printk(KERN_INFO, scmd, 1169 SCSI_LOG_ERROR_RECOVERY(2, scmd_printk(KERN_INFO, scmd,
1161 "%s: requesting sense\n", 1170 "%s: requesting sense\n",
1162 current->comm)); 1171 current->comm));