[SCSI] Fix spurious request sense in error handling
authorJames Bottomley <JBottomley@Parallels.com>
Fri, 28 Mar 2014 17:50:17 +0000 (10:50 -0700)
committerJames Bottomley <JBottomley@Parallels.com>
Mon, 21 Apr 2014 21:27:05 +0000 (14:27 -0700)
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

index 771c16bfdbac4be2fac180459ff5711407c98a01..d020149ea8d46d38a971821a664a0ada5e88a464 100644 (file)
@@ -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));