summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAnton Ivanov <anton.ivanov@cambridgegreys.com>2018-11-08 13:07:23 +0000
committerJens Axboe <axboe@kernel.dk>2018-11-08 06:16:09 -0700
commit0033dfd92a5646a78025e86f8df4d5b18181ba2c (patch)
treeaedd22c50839066987f771bd1ad09cb9c7e8f10e
parentf3587d76da05f68098ddb1cb3c98cc6a9e8a402c (diff)
downloadlinux-rpi-0033dfd92a5646a78025e86f8df4d5b18181ba2c.tar.gz
linux-rpi-0033dfd92a5646a78025e86f8df4d5b18181ba2c.tar.bz2
linux-rpi-0033dfd92a5646a78025e86f8df4d5b18181ba2c.zip
ubd: fix missing initialization of io_req
The SYNC path doesn't initialize io_req->error, which can cause random errors. Before the conversion to blk-mq, we always completed requests with BLK_STS_OK status, but now we actually look at the error field and this issue becomes apparent. Signed-off-by: Anton Ivanov <anton.ivanov@cambridgegreys.com> [axboe: fixed up commit message to explain what is actually going on] Signed-off-by: Jens Axboe <axboe@kernel.dk>
-rw-r--r--arch/um/drivers/ubd_kern.c3
1 files changed, 1 insertions, 2 deletions
diff --git a/arch/um/drivers/ubd_kern.c b/arch/um/drivers/ubd_kern.c
index 08831f5d83db..28c40624bcb6 100644
--- a/arch/um/drivers/ubd_kern.c
+++ b/arch/um/drivers/ubd_kern.c
@@ -1305,6 +1305,7 @@ static int ubd_queue_one_vec(struct blk_mq_hw_ctx *hctx, struct request *req,
io_req->fds[0] = dev->cow.fd;
else
io_req->fds[0] = dev->fd;
+ io_req->error = 0;
if (req_op(req) == REQ_OP_FLUSH) {
io_req->op = UBD_FLUSH;
@@ -1313,9 +1314,7 @@ static int ubd_queue_one_vec(struct blk_mq_hw_ctx *hctx, struct request *req,
io_req->cow_offset = -1;
io_req->offset = off;
io_req->length = bvec->bv_len;
- io_req->error = 0;
io_req->sector_mask = 0;
-
io_req->op = rq_data_dir(req) == READ ? UBD_READ : UBD_WRITE;
io_req->offsets[0] = 0;
io_req->offsets[1] = dev->cow.data_offset;