nbd: don't handle response without a corresponding request message
authorYu Kuai <yukuai3@huawei.com>
Thu, 16 Sep 2021 09:33:44 +0000 (17:33 +0800)
committerJens Axboe <axboe@kernel.dk>
Mon, 18 Oct 2021 20:50:37 +0000 (14:50 -0600)
commit4e6eef5dc25b528e08ac5b5f64f6ca9d9987241d
tree2e860fa67b13acbe5f7441d2b0ab13d8fc006c76
parentc573d586999cb7e694efad79f0cb69a8215bbef6
nbd: don't handle response without a corresponding request message

While handling a response message from server, nbd_read_stat() will
try to get request by tag, and then complete the request. However,
this is problematic if nbd haven't sent a corresponding request
message:

t1                      t2
                        submit_bio
                         nbd_queue_rq
                          blk_mq_start_request
recv_work
 nbd_read_stat
  blk_mq_tag_to_rq
 blk_mq_complete_request
                          nbd_send_cmd

Thus add a new cmd flag 'NBD_CMD_INFLIGHT', it will be set in
nbd_send_cmd() and checked in nbd_read_stat().

Noted that this patch can't fix that blk_mq_tag_to_rq() might
return a freed request, and this will be fixed in following
patches.

Signed-off-by: Yu Kuai <yukuai3@huawei.com>
Reviewed-by: Ming Lei <ming.lei@redhat.com>
Reviewed-by: Josef Bacik <josef@toxicpanda.com>
Link: https://lore.kernel.org/r/20210916093350.1410403-2-yukuai3@huawei.com
Signed-off-by: Jens Axboe <axboe@kernel.dk>
drivers/block/nbd.c