Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 4ff57935 authored by Jens Axboe's avatar Jens Axboe Committed by Linus Torvalds
Browse files

[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: default avatarJens Axboe <axboe@suse.de>
Signed-off-by: default avatarLinus Torvalds <torvalds@osdl.org>
parent c8d52465
Loading
Loading
Loading
Loading
+6 −5
Original line number Diff line number Diff line
@@ -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;