[scsi] Retry TEST UNIT READY command
authorMichael Brown <mcb30@ipxe.org>
Wed, 29 Mar 2017 09:29:44 +0000 (12:29 +0300)
committerMichael Brown <mcb30@ipxe.org>
Wed, 29 Mar 2017 09:42:36 +0000 (12:42 +0300)
commita66ac07165855d8144f69a68d5c0ab0eb36e97e2
treebb087e6a09f6be631d2a9de4561bcf41ccbd814f
parent2c056f02d09a19fb3ac91859c7bd8c558c8473cf
[scsi] Retry TEST UNIT READY command

The TEST UNIT READY command is issued automatically when the device is
opened, and is not the result of a command being issued by the caller.
This is required in order that a permanent TEST UNIT READY failure can
be used to identify unusable paths in a multipath SAN device.

Since the TEST UNIT READY command is not part of the caller's command
issuing process, it is not covered by any external retry loops (such
as the main retry loop in sandev_command()).

We must therefore be prepared to retry the TEST UNIT READY command
within the SCSI layer itself.  We retry only the TEST UNIT READY
command so as not to multiply the number of potential retries for
normal commands (which are already retried by sandev_command()).

Signed-off-by: Michael Brown <mcb30@ipxe.org>
src/drivers/block/scsi.c