]> git.neil.brown.name Git - history.git/commitdiff
[PATCH] ide: fix REQ_DRIVE_* requests error handling in ide-scsi
authorBartlomiej Zolnierkiewicz <b.zolnierkiewicz@elka.pw.edu.pl>
Tue, 15 Jun 2004 13:18:59 +0000 (06:18 -0700)
committerLinus Torvalds <torvalds@ppc970.osdl.org>
Tue, 15 Jun 2004 13:18:59 +0000 (06:18 -0700)
If REQ_DRIVE_* request fails ide_end_drive_cmd() should be called
for it not ->end_request().  This was broken by 2.6.5, fix it.

Signed-off-by: Bartlomiej Zolnierkiewicz <bzolnier@elka.pw.edu.pl>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
drivers/scsi/ide-scsi.c

index 2848c1ac99bab10d7f798c31d3f9cc43f778894c..9b110a8e246d583da8d9ca23eadfaaf273cf2f0f 100644 (file)
@@ -318,6 +318,13 @@ ide_startstop_t idescsi_atapi_error (ide_drive_t *drive, const char *msg, byte s
        if (drive == NULL || (rq = HWGROUP(drive)->rq) == NULL)
                return ide_stopped;
 
+       /* retry only "normal" I/O: */
+       if (rq->flags & (REQ_DRIVE_CMD | REQ_DRIVE_TASK | REQ_DRIVE_TASKFILE)) {
+               rq->errors = 1;
+               ide_end_drive_cmd(drive, stat, err);
+               return ide_stopped;
+       }
+
        if (HWIF(drive)->INB(IDE_STATUS_REG) & (BUSY_STAT|DRQ_STAT))
                /* force an abort */
                HWIF(drive)->OUTB(WIN_IDLEIMMEDIATE,IDE_COMMAND_REG);
@@ -334,6 +341,13 @@ ide_startstop_t idescsi_atapi_abort (ide_drive_t *drive, const char *msg)
        if (drive == NULL || (rq = HWGROUP(drive)->rq) == NULL)
               return ide_stopped;
 
+       /* retry only "normal" I/O: */
+       if (rq->flags & (REQ_DRIVE_CMD | REQ_DRIVE_TASK | REQ_DRIVE_TASKFILE)) {
+               rq->errors = 1;
+               ide_end_drive_cmd(drive, BUSY_STAT, 0);
+               return ide_stopped;
+       }
+
 #if IDESCSI_DEBUG_LOG
        printk(KERN_WARNING "idescsi_atapi_abort called for %lu\n",
                        ((idescsi_pc_t *) rq->special)->scsi_cmd->serial_number);