Hayes, Stuart wrote:
>> I'd recommend applying this patch if nobody sees any problems with
>> it.
>>
>>
>> --- ide-cd.c.orig 2005-02-07 10:56:42.000000000 -0500
>> +++ ide-cd.c 2005-02-07 10:57:06.000000000 -0500
>> @@ -3301,6 +3301,7 @@ static ide_driver_t ide_cdrom_driver = {
>> .supports_dsc_overlap = 1, .cleanup =
ide_cdrom_cleanup,
>> .do_request = ide_do_rw_cdrom,
>> + .end_request = cdrom_end_request,
>> .capacity = ide_cdrom_capacity,
>> .attach = ide_cdrom_attach,
>> .drives =
>> LIST_HEAD_INIT(ide_cdrom_driver.drives),
>>
>>
>
> I took the lack of responses to mean that either nobody cared, or the
> patch was so bad that it wasn't worthy of comment, so I took a closer
> look at it. After looking at it more carefully, I suspect that the
> function cdrom_end_request() was meant to be an internal function,
> and not the end_request function for the driver (in part because the
> number of parameters for cdrom_end_request() isn't the same as
> ide_end_request()!).
>
> Here's another patch that fixes the issue I'm seeing, and is less
> likely to cause any other problems. This will make sure that
> requests that are ended in ide_atapi_error() because they failed too
> many times (even after a couple reset attempts) are completely ended,
> even if they didn't finish transferring all the data that was
> expected.
>
> Please apply if you don't see any problems with it.
>
> Thanks!
> Stuart
>
>
>
> --- ide-io.c.orig 2005-02-10 15:23:52.000000000 -0500
> +++ ide-io.c.new 2005-02-10 15:23:31.000000000 -0500
> @@ -515,7 +515,18 @@ static ide_startstop_t ide_atapi_error(i
> hwif->OUTB(WIN_IDLEIMMEDIATE, IDE_COMMAND_REG);
>
> if (rq->errors >= ERROR_MAX) {
> - drive->driver->end_request(drive, 0, 0);
> + /*
> + * make sure request is fully ended--otherwise bio might
get
> updated and the + * command will be retried without
rq->errors
> getting reset to zero, which + * could cause us to get
stuck in a
> loop with infinite retries without any + * more reset
attempts
> (borrowed from cdrom_end_request) + */
> + int nsectors;
> + if (blk_pc_request(rq))
> + nsectors = (rq->data_len + 511) >> 9;
> + if (!nsectors)
> + nsectors = 1;
> + drive->driver->end_request(drive, 0, nsectors);
> } else {
> if ((rq->errors & ERROR_RESET) == ERROR_RESET) {
> ++rq->errors;
Sorry--this patch is against 2.6.11-rc3.
Also sorry for the mangled patch--I'll resend it from another email
address
shortly.
Thanks
Stuart
-
To unsubscribe from this list: send the line "unsubscribe linux-ide" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at http://vger.kernel.org/majordomo-info.html