Commit 0033dfd9 authored by Anton Ivanov's avatar Anton Ivanov Committed by Jens Axboe
Browse files

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: default avatarAnton Ivanov <anton.ivanov@cambridgegreys.com>

[axboe: fixed up commit message to explain what is actually going on]

Signed-off-by: default avatarJens Axboe <axboe@kernel.dk>
parent f3587d76
Loading
Loading
Loading
Loading
+1 −2
Original line number Original line Diff line number Diff line
@@ -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;
		io_req->fds[0] = dev->cow.fd;
	else
	else
		io_req->fds[0] = dev->fd;
		io_req->fds[0] = dev->fd;
	io_req->error = 0;


	if (req_op(req) == REQ_OP_FLUSH) {
	if (req_op(req) == REQ_OP_FLUSH) {
		io_req->op = UBD_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->cow_offset = -1;
		io_req->offset = off;
		io_req->offset = off;
		io_req->length = bvec->bv_len;
		io_req->length = bvec->bv_len;
		io_req->error = 0;
		io_req->sector_mask = 0;
		io_req->sector_mask = 0;

		io_req->op = rq_data_dir(req) == READ ? UBD_READ : UBD_WRITE;
		io_req->op = rq_data_dir(req) == READ ? UBD_READ : UBD_WRITE;
		io_req->offsets[0] = 0;
		io_req->offsets[0] = 0;
		io_req->offsets[1] = dev->cow.data_offset;
		io_req->offsets[1] = dev->cow.data_offset;