aboutsummaryrefslogtreecommitdiffstats
path: root/block
diff options
context:
space:
mode:
authorChristoph Hellwig2014-02-11 10:27:13 -0600
committerJens Axboe2014-02-11 10:34:07 -0600
commit1e93b8c274268038c93763dca65a73b42a081e10 (patch)
tree00501165614b830295c7b8a97f62b00abc9b702c /block
parent8423ae3d7a3cfe084865262cfaeba1359d405182 (diff)
downloadlinux-phy-1e93b8c274268038c93763dca65a73b42a081e10.tar.gz
linux-phy-1e93b8c274268038c93763dca65a73b42a081e10.tar.xz
linux-phy-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)
605 break; 605 break;
606 default: 606 default:
607 pr_err("blk-mq: bad return on queue: %d\n", ret); 607 pr_err("blk-mq: bad return on queue: %d\n", ret);
608 rq->errors = -EIO;
609 case BLK_MQ_RQ_QUEUE_ERROR: 608 case BLK_MQ_RQ_QUEUE_ERROR:
609 rq->errors = -EIO;
610 blk_mq_end_io(rq, rq->errors); 610 blk_mq_end_io(rq, rq->errors);
611 break; 611 break;
612 } 612 }