diff options
author | Jens Axboe <axboe@suse.de> | 2006-01-10 09:44:39 +0100 |
---|---|---|
committer | Linus Torvalds <torvalds@g5.osdl.org> | 2006-01-10 08:37:07 -0800 |
commit | 4ff57935ad0f1620269f4b08e8acfda619cc5e4b (patch) | |
tree | 70859628e9c59e0495351891b17f537967d1662d /drivers/ide | |
parent | c8d52465f95c4187871f8e65666c07806ca06d41 (diff) | |
download | op-kernel-dev-4ff57935ad0f1620269f4b08e8acfda619cc5e4b.zip op-kernel-dev-4ff57935ad0f1620269f4b08e8acfda619cc5e4b.tar.gz |
[PATCH] ide: preserve errors for failed requests
To preserve the ->errors values for requests that failed, use the normal
completion path for that.
Signed-off-by: Jens Axboe <axboe@suse.de>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
Diffstat (limited to 'drivers/ide')
-rw-r--r-- | drivers/ide/ide-io.c | 11 |
1 files changed, 6 insertions, 5 deletions
diff --git a/drivers/ide/ide-io.c b/drivers/ide/ide-io.c index dea2d4d..bcbaeb5 100644 --- a/drivers/ide/ide-io.c +++ b/drivers/ide/ide-io.c @@ -60,10 +60,10 @@ void ide_softirq_done(struct request *rq) request_queue_t *q = rq->q; add_disk_randomness(rq->rq_disk); - end_that_request_chunk(rq, rq->errors, rq->data_len); + end_that_request_chunk(rq, 1, rq->data_len); spin_lock_irq(q->queue_lock); - end_that_request_last(rq, rq->errors); + end_that_request_last(rq, 1); spin_unlock_irq(q->queue_lock); } @@ -96,11 +96,12 @@ int __ide_end_request(ide_drive_t *drive, struct request *rq, int uptodate, /* * For partial completions (or non fs/pc requests), use the regular - * direct completion path. + * 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_all_done(rq, nbytes)) { - rq->errors = uptodate; + if (!rq->errors && rq_all_done(rq, nbytes)) { rq->data_len = nbytes; blkdev_dequeue_request(rq); HWGROUP(drive)->rq = NULL; |