diff options
author | Christoph Hellwig <hch@infradead.org> | 2014-02-11 08:27:13 -0800 |
---|---|---|
committer | Jens Axboe <axboe@fb.com> | 2014-02-11 09:34:07 -0700 |
commit | 1e93b8c274268038c93763dca65a73b42a081e10 (patch) | |
tree | 00501165614b830295c7b8a97f62b00abc9b702c /block | |
parent | 8423ae3d7a3cfe084865262cfaeba1359d405182 (diff) | |
download | lwn-1e93b8c274268038c93763dca65a73b42a081e10.tar.gz lwn-1e93b8c274268038c93763dca65a73b42a081e10.zip |
blk-mq: dont assume rq->errors is set when returning an error from ->queue_rq
rq->errors never has been part of the communication protocol between drivers
and the block stack and most drivers will not have initialized it.
Return -EIO to upper layers when the driver returns BLK_MQ_RQ_QUEUE_ERROR
unconditionally. If a driver want to return a different error it can easily
do so by returning success after calling blk_mq_end_io itself.
Signed-off-by: Christoph Hellwig <hch@lst.de>
Signed-off-by: Jens Axboe <axboe@fb.com>
Diffstat (limited to 'block')
-rw-r--r-- | block/blk-mq.c | 2 |
1 files changed, 1 insertions, 1 deletions
diff --git a/block/blk-mq.c b/block/blk-mq.c index a59b0565e940..0480710a8b45 100644 --- a/block/blk-mq.c +++ b/block/blk-mq.c @@ -605,8 +605,8 @@ static void __blk_mq_run_hw_queue(struct blk_mq_hw_ctx *hctx) break; default: pr_err("blk-mq: bad return on queue: %d\n", ret); - rq->errors = -EIO; case BLK_MQ_RQ_QUEUE_ERROR: + rq->errors = -EIO; blk_mq_end_io(rq, rq->errors); break; } |