From: Erik Andersen <andersen@codepoet.org>
To: Marcelo Tosatti <marcelo@conectiva.com.br>
Cc: Kernel Mailing List <linux-kernel@vger.kernel.org>
Subject: [PATCH] Fix cdrom error handling in 2.4
Date: Fri, 22 Aug 2003 19:26:09 -0600 [thread overview]
Message-ID: <20030823012609.GB6076@codepoet.org> (raw)
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.4.x, which just moves the MEDIUM_ERROR
handler a bit earlier. I have also included a minor error path
cleanup from the 2.6.x driver,
-Erik
--
Erik B. Andersen http://codepoet-consulting.com/
--This message was written using 73% post-consumer electrons--
--- linux/drivers/ide/ide-cd.c.orig 2003-08-22 18:48:07.000000000 -0600
+++ linux/drivers/ide/ide-cd.c 2003-08-22 18:49:07.000000000 -0600
@@ -765,6 +765,8 @@
if ((stat & ERR_STAT) != 0)
cdrom_queue_request_sense(drive, wait, pc->sense, pc);
} else if (blk_fs_request(rq)) {
+ int do_end_request = 0;
+
/* Handle errors from READ and WRITE requests. */
if (sense_key == NOT_READY) {
@@ -773,7 +775,7 @@
/* 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);
@@ -782,28 +784,31 @@
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 (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. */
*startstop = 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);
- cdrom_end_request(drive, 0);
} 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)
reply other threads:[~2003-08-23 1:26 UTC|newest]
Thread overview: [no followups] expand[flat|nested] mbox.gz Atom feed
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20030823012609.GB6076@codepoet.org \
--to=andersen@codepoet.org \
--cc=linux-kernel@vger.kernel.org \
--cc=marcelo@conectiva.com.br \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
Powered by JetHome