if ((stat & ERR_STAT) != 0)
cdrom_queue_request_sense(drive, wait, rq->sense, rq);
} else if (blk_fs_request(rq)) {
+ int do_end_request = 0;
+
/* Handle errors from READ and WRITE requests. */
if (blk_noretry_request(rq))
- cdrom_end_request(drive, 0);
+ do_end_request = 1;
if (sense_key == NOT_READY) {
/* Tray open. */
/* Fail the request. */
printk ("%s: tray open\n", drive->name);
- cdrom_end_request(drive, 0);
+ do_end_request = 1;
} else if (sense_key == UNIT_ATTENTION) {
/* Media change. */
cdrom_saw_media_change (drive);
But be sure to give up if we've retried
too many times. */
if (++rq->errors > ERROR_MAX)
- cdrom_end_request(drive, 0);
+ do_end_request = 1;
} else if (sense_key == ILLEGAL_REQUEST ||
sense_key == DATA_PROTECT) {
/* No point in retrying after an illegal
request or data protect error.*/
ide_dump_status (drive, "command error", stat);
- cdrom_end_request(drive, 0);
+ do_end_request = 1;
} else if ((err & ~ABRT_ERR) != 0) {
/* Go to the default handler
for other errors. */
/* No point in re-trying a zillion times on a bad
* sector... If we got here the error is not correctable */
ide_dump_status (drive, "media error (bad sector)", stat);
- cdrom_end_request(drive, 0);
+ do_end_request = 1;
} else if ((++rq->errors > ERROR_MAX)) {
/* We've racked up too many retries. Abort. */
- cdrom_end_request(drive, 0);
+ do_end_request = 1;
}
+ if (do_end_request)
+ cdrom_end_request(drive, 0);
+
/* If we got a CHECK_CONDITION status,
queue a request sense command. */
if ((stat & ERR_STAT) != 0)