[PATCH] Revert ide softirq handling
authorJens Axboe <axboe@suse.de>
Thu, 12 Jan 2006 19:44:12 +0000 (20:44 +0100)
committerLinus Torvalds <torvalds@g5.osdl.org>
Thu, 12 Jan 2006 20:00:47 +0000 (12:00 -0800)
There's a problem with the REQ_BLOCK_PC handling as well (bad ->data_len
handling) where it could actually complete a request ahead of time.  I
suggest we just back this out for now, I will resubmit it later when I'm
fully confident in it.

This reverts commit 8672d57138b34447719cd7749f3d21070e1175a1

Signed-off-by: Jens Axboe <axboe@suse.de>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
drivers/ide/ide-io.c
drivers/ide/ide-probe.c
include/linux/ide.h

index bcbaeb50bb933cbb57c8301291e90297448cbed2..8d50df4526a4ec85cf05627e396902af84cf1f57 100644 (file)
 #include <asm/io.h>
 #include <asm/bitops.h>
 
-void ide_softirq_done(struct request *rq)
-{
-       request_queue_t *q = rq->q;
-
-       add_disk_randomness(rq->rq_disk);
-       end_that_request_chunk(rq, 1, rq->data_len);
-
-       spin_lock_irq(q->queue_lock);
-       end_that_request_last(rq, 1);
-       spin_unlock_irq(q->queue_lock);
-}
-
 int __ide_end_request(ide_drive_t *drive, struct request *rq, int uptodate,
                      int nr_sectors)
 {
-       unsigned int nbytes;
        int ret = 1;
 
        BUG_ON(!(rq->flags & REQ_STARTED));
@@ -94,27 +81,12 @@ int __ide_end_request(ide_drive_t *drive, struct request *rq, int uptodate,
                HWGROUP(drive)->hwif->ide_dma_on(drive);
        }
 
-       /*
-        * For partial completions (or non fs/pc requests), use the regular
-        * direct completion path. Same thing for requests that failed, to
-        * preserve the ->errors value we use the normal completion path
-        * for those
-        */
-       nbytes = nr_sectors << 9;
-       if (!rq->errors && rq_all_done(rq, nbytes)) {
-               rq->data_len = nbytes;
+       if (!end_that_request_first(rq, uptodate, nr_sectors)) {
+               add_disk_randomness(rq->rq_disk);
                blkdev_dequeue_request(rq);
                HWGROUP(drive)->rq = NULL;
-               blk_complete_request(rq);
+               end_that_request_last(rq, uptodate);
                ret = 0;
-       } else {
-               if (!end_that_request_first(rq, uptodate, nr_sectors)) {
-                       add_disk_randomness(rq->rq_disk);
-                       blkdev_dequeue_request(rq);
-                       HWGROUP(drive)->rq = NULL;
-                       end_that_request_last(rq, uptodate);
-                       ret = 0;
-               }
        }
 
        return ret;
index 7cb2d86601dbde9424a7cd7cae46f324640c4fd7..e7425546b4b1786feb0333f71b0aa43b570d1e43 100644 (file)
@@ -1011,8 +1011,6 @@ static int ide_init_queue(ide_drive_t *drive)
        blk_queue_max_hw_segments(q, max_sg_entries);
        blk_queue_max_phys_segments(q, max_sg_entries);
 
-       blk_queue_softirq_done(q, ide_softirq_done);
-
        /* assign drive queue */
        drive->queue = q;
 
index 9a8c05dbe4f38b6aafef22e48d8e46e6de742f15..f2e1b5b22898292368273ccd05d0fa09c3045293 100644 (file)
@@ -1002,7 +1002,6 @@ extern int noautodma;
 
 extern int ide_end_request (ide_drive_t *drive, int uptodate, int nrsecs);
 extern int __ide_end_request (ide_drive_t *drive, struct request *rq, int uptodate, int nrsecs);
-extern void ide_softirq_done(struct request *rq);
 
 /*
  * This is used on exit from the driver to designate the next irq handler