[SCSI] Handle disk devices which can not process medium access commands
authorMartin K. Petersen <martin.petersen@oracle.com>
Thu, 9 Feb 2012 18:48:53 +0000 (13:48 -0500)
committerJames Bottomley <JBottomley@Parallels.com>
Sun, 19 Feb 2012 16:14:52 +0000 (10:14 -0600)
commit18a4d0a22ed6c54b67af7718c305cd010f09ddf8
tree06e22a92290ff84b2c1d5abb09424493de384c4b
parenta78e21dc5e9f896ecee5b1fbe189690dfcca38e1
[SCSI] Handle disk devices which can not process medium access commands

We have experienced several devices which fail in a fashion we do not
currently handle gracefully in SCSI. After a failure these devices will
respond to the SCSI primary command set (INQUIRY, TEST UNIT READY, etc.)
but any command accessing the storage medium will time out.

The following patch adds an callback that can be used by upper level
drivers to inspect the results of an error handling command. This in
turn has been used to implement additional checking in the SCSI disk
driver.

If a medium access command fails twice but TEST UNIT READY succeeds both
times in the subsequent error handling we will offline the device. The
maximum number of failed commands required to take a device offline can
be tweaked in sysfs.

Also add a new error flag to scsi_debug which allows this scenario to be
easily reproduced.

[jejb: fix up integer parsing to use kstrtouint]
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
Signed-off-by: James Bottomley <JBottomley@Parallels.com>
drivers/scsi/scsi.c
drivers/scsi/scsi_debug.c
drivers/scsi/scsi_error.c
drivers/scsi/sd.c
drivers/scsi/sd.h
include/scsi/scsi_cmnd.h
include/scsi/scsi_driver.h