--- 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;
