Commit 6c944c97 authored by Erik Andersen's avatar Erik Andersen Committed by Linus Torvalds

[PATCH] Fix cdrom error handling in 2.6

In both 2.4 and in 2.6, error handling for bad cdrom media is
wrong.  And it is my fault I'm afraid, since I botched an earlier
fix for the problem by putting the fix in the wrong spot.

My kids have a "Jumpstart Toddlers" cd they have long since
completely killed, which makes a great test disc.  Without this
fix, the best time projection I can get for completing a dd type
sector copy is about 2 years...  Most of that is spent thrashing
about in kernel space trying to re-read sectors we already know
are not correctable....  After the fix, I was able to rip a copy
the CD (or rather muddle through it getting lots of EIO errors)
in about 15 minutes.

Attached is the fix for 2.6.x,
parent d2855c5d
......@@ -794,16 +794,16 @@ static int cdrom_decode_status(ide_drive_t *drive, int good_stat, int *stat_ret)
request or data protect error.*/
ide_dump_status (drive, "command error", stat);
do_end_request = 1;
} else if ((err & ~ABRT_ERR) != 0) {
/* Go to the default handler
for other errors. */
DRIVER(drive)->error(drive, "cdrom_decode_status",stat);
return 1;
} else if (sense_key == MEDIUM_ERROR) {
/* 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);
do_end_request = 1;
} else if ((err & ~ABRT_ERR) != 0) {
/* Go to the default handler
for other errors. */
DRIVER(drive)->error(drive, "cdrom_decode_status",stat);
return 1;
} else if ((++rq->errors > ERROR_MAX)) {
/* We've racked up too many retries. Abort. */
do_end_request = 1;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment