ide: sanitize ide_end_rq()
authorBartlomiej Zolnierkiewicz <bzolnier@gmail.com>
Fri, 27 Mar 2009 11:46:43 +0000 (12:46 +0100)
committerBartlomiej Zolnierkiewicz <bzolnier@gmail.com>
Fri, 27 Mar 2009 11:46:43 +0000 (12:46 +0100)
* Move 'uptodate' quirk from ide_end_rq() to its users.

* Move quirks for blk_noretry_request() and !blk_fs_request()
  requests from ide_end_rq() to ide_end_request().

There should be no functional changes caused by this patch.

Signed-off-by: Bartlomiej Zolnierkiewicz <bzolnier@gmail.com>
drivers/ide/ide-cd.c
drivers/ide/ide-io.c

index 830fd57..bbbebcb 100644 (file)
@@ -272,7 +272,7 @@ static void cdrom_end_request(ide_drive_t *drive, int uptodate)
                         * now end the failed request
                         */
                        if (blk_fs_request(failed)) {
-                               if (ide_end_rq(drive, failed, 0,
+                               if (ide_end_rq(drive, failed, -EIO,
                                                failed->hard_nr_sectors << 9))
                                        BUG();
                        } else {
index e5fcb28..c38426d 100644 (file)
 #include <asm/uaccess.h>
 #include <asm/io.h>
 
-int ide_end_rq(ide_drive_t *drive, struct request *rq, int uptodate,
+int ide_end_rq(ide_drive_t *drive, struct request *rq, int error,
               unsigned int nr_bytes)
 {
-       int error = 0;
-
-       if (uptodate <= 0)
-               error = uptodate ? uptodate : -EIO;
-
-       /*
-        * if failfast is set on a request, override number of sectors and
-        * complete the whole request right now
-        */
-       if (blk_noretry_request(rq) && error)
-               nr_bytes = rq->hard_nr_sectors << 9;
-
-       if (!blk_fs_request(rq) && error && !rq->errors)
-               rq->errors = -EIO;
-
        /*
         * decide whether to reenable DMA -- 3 is a random magic for now,
         * if we DMA timeout more than 3 times, just stay in PIO
@@ -101,7 +86,7 @@ int ide_end_request (ide_drive_t *drive, int uptodate, int nr_sectors)
 {
        unsigned int nr_bytes = nr_sectors << 9;
        struct request *rq = drive->hwif->rq;
-       int rc;
+       int rc, error = 0;
 
        if (!nr_bytes) {
                if (blk_pc_request(rq))
@@ -110,7 +95,20 @@ int ide_end_request (ide_drive_t *drive, int uptodate, int nr_sectors)
                        nr_bytes = rq->hard_cur_sectors << 9;
        }
 
-       rc = ide_end_rq(drive, rq, uptodate, nr_bytes);
+       /*
+        * if failfast is set on a request, override number of sectors
+        * and complete the whole request right now
+        */
+       if (blk_noretry_request(rq) && uptodate <= 0)
+               nr_bytes = rq->hard_nr_sectors << 9;
+
+       if (blk_fs_request(rq) == 0 && uptodate <= 0 && rq->errors == 0)
+               rq->errors = -EIO;
+
+       if (uptodate <= 0)
+               error = uptodate ? uptodate : -EIO;
+
+       rc = ide_end_rq(drive, rq, error, nr_bytes);
        if (rc == 0)
                drive->hwif->rq = NULL;