From 4ff57935ad0f1620269f4b08e8acfda619cc5e4b Mon Sep 17 00:00:00 2001 From: Jens Axboe Date: Tue, 10 Jan 2006 09:44:39 +0100 Subject: [PATCH] [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 Signed-off-by: Linus Torvalds --- drivers/ide/ide-io.c | 11 ++++++----- 1 file 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; -- 2.7.4