From: Jens Axboe Date: Tue, 10 Jan 2006 08:44:39 +0000 (+0100) Subject: [PATCH] ide: preserve errors for failed requests X-Git-Url: https://git.karo-electronics.de/?a=commitdiff_plain;h=4ff57935ad0f1620269f4b08e8acfda619cc5e4b;p=linux-beck.git [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 --- diff --git a/drivers/ide/ide-io.c b/drivers/ide/ide-io.c index dea2d4dcc698..bcbaeb50bb93 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;