lkml.org 
[lkml]   [2003]   [Aug]   [22]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    From
    Subject[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,

    -Erik

    --
    Erik B. Andersen http://codepoet-consulting.com/
    --This message was written using 73% post-consumer electrons--


    --- linux-2.6.0-test3/drivers/ide/ide-cd.c.orig 2003-08-22 19:04:36.000000000 -0600
    +++ linux-2.6.0-test3/drivers/ide/ide-cd.c 2003-08-22 19:04:49.000000000 -0600
    @@ -794,16 +794,16 @@
    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;
    -
    To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
    the body of a message to majordomo@vger.kernel.org
    More majordomo info at http://vger.kernel.org/majordomo-info.html
    Please read the FAQ at http://www.tux.org/lkml/
    \
     
     \ /
      Last update: 2005-03-22 13:48    [W:0.022 / U:31.428 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site