> 
> There's still a problem here, you are not initializing nsectors for
> non-pc requests. And your comments wrap :) 
> 
>         int nsectors = rq->hard_nr_sectors;
> 
>         if (blk_pc_request(rq))
>                 nsectors = (rq->data_len + 511) >> 9;
>         if (!nsectors)
>                 nsectors = 1;
> 
>         ...
> 
> Can you resend with that fixed up and with a Signed-off-by header?

Here it is.  Thanks for all the help.  I'm attaching as a file, too,
just in case it gets garbled again.
Stuart


Signed-off-by: Stuart Hayes <[EMAIL PROTECTED]>

--- linux-2.6.11/drivers/ide/ide-io.c.orig      2005-03-04
16:11:14.000000000 -0500
+++ linux-2.6.11/drivers/ide/ide-io.c   2005-03-04 16:19:19.000000000
-0500
@@ -516,7 +516,19 @@ 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 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
+                */
+               int nsectors = rq->hard_nr_sectors;
+               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;

Attachment: atapi_max_errors_d_2.6.11.patch
Description: atapi_max_errors_d_2.6.11.patch

Reply via email to