diff options
author | Jens Axboe <axboe@suse.de> | 2006-01-12 20:44:12 +0100 |
---|---|---|
committer | Linus Torvalds <torvalds@g5.osdl.org> | 2006-01-12 12:00:47 -0800 |
commit | ba027def7be0d6494b72603d5758acc0fb1c7514 (patch) | |
tree | 0390413d299350f838f2fc01ae222d8d3cdf6194 | |
parent | 661dd5c840851194c7ee5a2603d5354dcf9bd212 (diff) |
[PATCH] Revert ide softirq handling
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>
-rw-r--r-- | drivers/ide/ide-io.c | 34 | ||||
-rw-r--r-- | drivers/ide/ide-probe.c | 2 | ||||
-rw-r--r-- | include/linux/ide.h | 1 |
3 files changed, 3 insertions, 34 deletions
diff --git a/drivers/ide/ide-io.c b/drivers/ide/ide-io.c index bcbaeb50bb9..8d50df4526a 100644 --- a/drivers/ide/ide-io.c +++ b/drivers/ide/ide-io.c @@ -55,22 +55,9 @@ #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; diff --git a/drivers/ide/ide-probe.c b/drivers/ide/ide-probe.c index 7cb2d86601d..e7425546b4b 100644 --- a/drivers/ide/ide-probe.c +++ b/drivers/ide/ide-probe.c @@ -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; diff --git a/include/linux/ide.h b/include/linux/ide.h index 9a8c05dbe4f..f2e1b5b2289 100644 --- a/include/linux/ide.h +++ b/include/linux/ide.h @@ -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 |