summaryrefslogtreecommitdiffstats
path: root/block
diff options
context:
space:
mode:
authorChristoph Hellwig <hch@infradead.org>2014-02-11 08:27:13 -0800
committerJens Axboe <axboe@fb.com>2014-02-11 09:34:07 -0700
commit1e93b8c274268038c93763dca65a73b42a081e10 (patch)
tree00501165614b830295c7b8a97f62b00abc9b702c /block
parent8423ae3d7a3cfe084865262cfaeba1359d405182 (diff)
downloadlinux-1e93b8c274268038c93763dca65a73b42a081e10.tar.gz
linux-1e93b8c274268038c93763dca65a73b42a081e10.tar.bz2
linux-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.c2
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;
}