@@ -2045,48 +2045,48 @@ sd_spinup_disk(struct scsi_disk *sdkp)
{
unsigned char cmd[10];
unsigned long spintime_expire = 0;
- int retries, spintime;
+ int spintime;
unsigned int the_result;
struct scsi_sense_hdr sshdr;
int sense_valid = 0;
+ struct scsi_failure failures[] = {
+ {
+ .sense = UNIT_ATTENTION,
+ .asc = SCMD_FAILURE_ASC_ANY,
+ .ascq = SCMD_FAILURE_ASCQ_ANY,
+ .allowed = 3,
+ .result = SAM_STAT_CHECK_CONDITION,
+ },
+ {},
+ };
spintime = 0;
/* Spin up drives, as required. Only do this at boot time */
/* Spinup needs to be done for module loads too. */
do {
- retries = 0;
-
- do {
- bool media_was_present = sdkp->media_present;
+ bool media_was_present = sdkp->media_present;
- cmd[0] = TEST_UNIT_READY;
- memset((void *) &cmd[1], 0, 9);
+ cmd[0] = TEST_UNIT_READY;
+ memset((void *) &cmd[1], 0, 9);
- the_result = scsi_execute_req(sdkp->device, cmd,
- DMA_NONE, NULL, 0,
- &sshdr, SD_TIMEOUT,
- sdkp->max_retries, NULL,
- NULL);
+ the_result = scsi_execute_req(sdkp->device, cmd, DMA_NONE, NULL,
+ 0, &sshdr, SD_TIMEOUT,
+ sdkp->max_retries, NULL,
+ failures);
- /*
- * If the drive has indicated to us that it
- * doesn't have any media in it, don't bother
- * with any more polling.
- */
- if (media_not_present(sdkp, &sshdr)) {
- if (media_was_present)
- sd_printk(KERN_NOTICE, sdkp, "Media removed, stopped polling\n");
- return;
- }
+ /*
+ * If the drive has indicated to us that it doesn't have any
+ * media in it, don't bother with any more polling.
+ */
+ if (media_not_present(sdkp, &sshdr)) {
+ if (media_was_present)
+ sd_printk(KERN_NOTICE, sdkp, "Media removed, stopped polling\n");
+ return;
+ }
- if (the_result)
- sense_valid = scsi_sense_valid(&sshdr);
- retries++;
- } while (retries < 3 &&
- (!scsi_status_is_good(the_result) ||
- (scsi_status_is_check_condition(the_result) &&
- sense_valid && sshdr.sense_key == UNIT_ATTENTION)));
+ if (the_result)
+ sense_valid = scsi_sense_valid(&sshdr);
if (!scsi_status_is_check_condition(the_result)) {
/* no sense, TUR either succeeded or failed
This simplifies sd_spinup_disk so scsi-ml retries UAs. It doesn't convert the errors we will do a msleep for since scsi-ml does not yet handle that. Signed-off-by: Mike Christie <michael.christie@oracle.com> --- drivers/scsi/sd.c | 58 +++++++++++++++++++++++------------------------ 1 file changed, 29 insertions(+), 29 deletions(-)