Skip to content

Commit

Permalink
[SCSI] sd: Don't try to spin up drives that are connected to an inact…
Browse files Browse the repository at this point in the history
…ive port

We currently try to spin up drives connected to standby and unavailable
ports.  This will never succeed and wastes a lot of time.  Fail quickly
if the sense data reports the port is in standby or unavailable state.

Reported-by: Narayanan Rengarajan <narayanan.rengarajan@hp.com>
Tested-by: Narayanan Rengarajan <narayanan.rengarajan@hp.com>
Signed-off-by: Matthew Wilcox <willy@linux.intel.com>
Signed-off-by: James Bottomley <James.Bottomley@HansenPartnership.com>
  • Loading branch information
Matthew Wilcox authored and James Bottomley committed Mar 5, 2009
1 parent 559595a commit 33dd6f9
Showing 1 changed file with 11 additions and 15 deletions.
26 changes: 11 additions & 15 deletions drivers/scsi/sd.c
Original file line number Diff line number Diff line change
Expand Up @@ -1167,23 +1167,19 @@ sd_spinup_disk(struct scsi_disk *sdkp)
/*
* The device does not want the automatic start to be issued.
*/
if (sdkp->device->no_start_on_add) {
if (sdkp->device->no_start_on_add)
break;
}

/*
* If manual intervention is required, or this is an
* absent USB storage device, a spinup is meaningless.
*/
if (sense_valid &&
sshdr.sense_key == NOT_READY &&
sshdr.asc == 4 && sshdr.ascq == 3) {
break; /* manual intervention required */

/*
* Issue command to spin up drive when not ready
*/
} else if (sense_valid && sshdr.sense_key == NOT_READY) {
if (sense_valid && sshdr.sense_key == NOT_READY) {
if (sshdr.asc == 4 && sshdr.ascq == 3)
break; /* manual intervention required */
if (sshdr.asc == 4 && sshdr.ascq == 0xb)
break; /* standby */
if (sshdr.asc == 4 && sshdr.ascq == 0xc)
break; /* unavailable */
/*
* Issue command to spin up drive when not ready
*/
if (!spintime) {
sd_printk(KERN_NOTICE, sdkp, "Spinning up disk...");
cmd[0] = START_STOP;
Expand Down

0 comments on commit 33dd6f9

Please sign in to comment.