> > 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;
atapi_max_errors_d_2.6.11.patch
Description: atapi_max_errors_d_2.6.11.patch
