blk-mq: Properly init requests from blk_mq_alloc_request_hctx() block-6.1-2022-10-28
authorJohn Garry <john.garry@huawei.com>
Wed, 26 Oct 2022 10:35:13 +0000 (18:35 +0800)
committerJens Axboe <axboe@kernel.dk>
Fri, 28 Oct 2022 13:54:47 +0000 (07:54 -0600)
Function blk_mq_alloc_request_hctx() is missing zeroing/init of rq->bio,
biotail, __sector, and __data_len members, which blk_mq_alloc_request()
has, so duplicate what we do in blk_mq_alloc_request().

Fixes: 1f5bd336b9150 ("blk-mq: add blk_mq_alloc_request_hctx")
Signed-off-by: John Garry <john.garry@huawei.com>
Reviewed-by: Christoph Hellwig <hch@lst.de>
Reviewed-by: Ming Lei <ming.lei@redhat.com>
Link: https://lore.kernel.org/r/1666780513-121650-1-git-send-email-john.garry@huawei.com
Signed-off-by: Jens Axboe <axboe@kernel.dk>
block/blk-mq.c

index 33292c01875d52ef6f842410c9e1b78679da61d0..75c8296b6feb3701b6e531d0ea4cb9778a60dc07 100644 (file)
@@ -611,6 +611,7 @@ struct request *blk_mq_alloc_request_hctx(struct request_queue *q,
                .nr_tags        = 1,
        };
        u64 alloc_time_ns = 0;
+       struct request *rq;
        unsigned int cpu;
        unsigned int tag;
        int ret;
@@ -660,8 +661,12 @@ struct request *blk_mq_alloc_request_hctx(struct request_queue *q,
        tag = blk_mq_get_tag(&data);
        if (tag == BLK_MQ_NO_TAG)
                goto out_queue_exit;
-       return blk_mq_rq_ctx_init(&data, blk_mq_tags_from_data(&data), tag,
+       rq = blk_mq_rq_ctx_init(&data, blk_mq_tags_from_data(&data), tag,
                                        alloc_time_ns);
+       rq->__data_len = 0;
+       rq->__sector = (sector_t) -1;
+       rq->bio = rq->biotail = NULL;
+       return rq;
 
 out_queue_exit:
        blk_queue_exit(q);