diff options
author | Linus Torvalds <torvalds@g5.osdl.org> | 2006-05-11 15:34:33 -0700 |
---|---|---|
committer | Linus Torvalds <torvalds@g5.osdl.org> | 2006-05-11 15:34:33 -0700 |
commit | f7a014af2d76a96e5af51b64f954328b700fa62f (patch) | |
tree | 85e75ffcd1f552401431c90797aed36aa711b333 /drivers/scsi/scsi_lib.c | |
parent | dac07ec121de66b6be988b14ae2cd9ce45357b21 (diff) | |
parent | 6dd727da92290193d0f74fa39f3ad53f423524db (diff) |
Merge master.kernel.org:/pub/scm/linux/kernel/git/jejb/scsi-rc-fixes-2.6
* master.kernel.org:/pub/scm/linux/kernel/git/jejb/scsi-rc-fixes-2.6: (25 commits)
[SCSI] mptfc: race between mptfc_register_dev and mptfc_target_alloc
[SCSI] lpfc 8.1.6 : Fix Data Corruption in Bus Reset Path
[SCSI] mptspi: revalidate negotiation parameters after host reset and resume
[SCSI] srp.h: avoid padding of structs
[SCSI] ibmvscsi: fix leak when failing to send srp event
[SCSI] qla2xxx: Correct eh_abort recovery logic.
[SCSI] megaraid_{mm,mbox}: fix a bug in reset handler
[SCSI] fusion - bug fix stack overflow in mptbase
[SCSI] scsi: Add IBM 2104-DU3 to blist
[SCSI] Fix DVD burning issues.
[SCSI] SCSI: aic7xxx_osm_pci resource leak fix.
[SCSI] - fusion - mptfc bug fix's to prevent deadlock situations
[SCSI] mptfusion: bug fix's for raid components adding/deleting
[SCSI] aic7xxx: ahc_pci_write_config() fix
[SCSI] megaraid: unused variable
[SCSI] qla2xxx: only free_irq() after request_irq() succeeds
[SCSI] Overrun in drivers/scsi/sim710.c
[SCSI] lpfc 8.1.5 : Change version number to 8.1.5
[SCSI] lpfc 8.1.5 : Misc small fixes
[SCSI] lpfc 8.1.5 : Additional fixes to LOGO, PLOGI, and RSCN processing
...
Diffstat (limited to 'drivers/scsi/scsi_lib.c')
-rw-r--r-- | drivers/scsi/scsi_lib.c | 27 |
1 files changed, 20 insertions, 7 deletions
diff --git a/drivers/scsi/scsi_lib.c b/drivers/scsi/scsi_lib.c index 7b0f9a3810d..764a8b375ea 100644 --- a/drivers/scsi/scsi_lib.c +++ b/drivers/scsi/scsi_lib.c @@ -1067,16 +1067,29 @@ void scsi_io_completion(struct scsi_cmnd *cmd, unsigned int good_bytes, break; case NOT_READY: /* - * If the device is in the process of becoming ready, - * retry. + * If the device is in the process of becoming + * ready, or has a temporary blockage, retry. */ - if (sshdr.asc == 0x04 && sshdr.ascq == 0x01) { - scsi_requeue_command(q, cmd); - return; + if (sshdr.asc == 0x04) { + switch (sshdr.ascq) { + case 0x01: /* becoming ready */ + case 0x04: /* format in progress */ + case 0x05: /* rebuild in progress */ + case 0x06: /* recalculation in progress */ + case 0x07: /* operation in progress */ + case 0x08: /* Long write in progress */ + case 0x09: /* self test in progress */ + scsi_requeue_command(q, cmd); + return; + default: + break; + } } - if (!(req->flags & REQ_QUIET)) + if (!(req->flags & REQ_QUIET)) { scmd_printk(KERN_INFO, cmd, - "Device not ready.\n"); + "Device not ready: "); + scsi_print_sense_hdr("", &sshdr); + } scsi_end_request(cmd, 0, this_count, 1); return; case VOLUME_OVERFLOW: |