Skip to content

Commit

Permalink
[SCSI] Fix DVD burning issues.
Browse files Browse the repository at this point in the history
Some pioneer DVDs are apparently returning odd "not ready" status
codes that the mid-layer doesn't recognise and so passes back to the
user as errors.

This patch overhauls our not-ready handling and adds transparent retries for:

format in progress
rebuild in progress
recalculation in progress
operation in progress
Long write in progress
self test in progress

The Pioneer was actually returning "long write in progress"

Signed-off-by: James Bottomley <James.Bottomley@SteelEye.com>
  • Loading branch information
James Bottomley authored and James Bottomley committed Apr 27, 2006
1 parent 4a6fae1 commit f3e93f7
Showing 1 changed file with 20 additions and 7 deletions.
27 changes: 20 additions & 7 deletions drivers/scsi/scsi_lib.c
Original file line number Diff line number Diff line change
Expand Up @@ -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:
Expand Down

0 comments on commit f3e93f7

Please sign in to comment.