X-Git-Url: http://git.rot13.org/?a=blobdiff_plain;f=drivers%2Fide%2Fide-io.c;h=c01615dec2024f84efba781769a78d341d69a69d;hb=eeb059e0a69369753b3e45426958f751f0b8fc89;hp=dea2d4dcc6981848222eb97ea0b47478dcc9df4c;hpb=115b2ce1c3b974e43e45fa6c9e20cd7271a01dff;p=powerpc.git diff --git a/drivers/ide/ide-io.c b/drivers/ide/ide-io.c index dea2d4dcc6..c01615dec2 100644 --- a/drivers/ide/ide-io.c +++ b/drivers/ide/ide-io.c @@ -55,22 +55,9 @@ #include #include -void ide_softirq_done(struct request *rq) +static int __ide_end_request(ide_drive_t *drive, struct request *rq, + int uptodate, int nr_sectors) { - request_queue_t *q = rq->q; - - add_disk_randomness(rq->rq_disk); - end_that_request_chunk(rq, rq->errors, rq->data_len); - - spin_lock_irq(q->queue_lock); - end_that_request_last(rq, rq->errors); - 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,31 +81,16 @@ 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. - */ - nbytes = nr_sectors << 9; - if (rq_all_done(rq, nbytes)) { - rq->errors = uptodate; - 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; } -EXPORT_SYMBOL(__ide_end_request); /** * ide_end_request - complete an IDE I/O