nvme-fabrics: avoid double completions in nvmf_fail_nonready_command
authorChao Leng <lengchao@huawei.com>
Mon, 1 Feb 2021 03:49:39 +0000 (11:49 +0800)
committerChristoph Hellwig <hch@lst.de>
Wed, 10 Feb 2021 15:38:03 +0000 (16:38 +0100)
commitea5e5f42cd2c80d19862dd63a2f3a4e7a99c6a20
tree73389b301113e73f3f6bc054073d658a6c5ad08a
parentdda3248e7fc306e0ce3612ae96bdd9a36e2ab04f
nvme-fabrics: avoid double completions in nvmf_fail_nonready_command

When reconnecting, the request may be completed with
NVME_SC_HOST_PATH_ERROR in nvmf_fail_nonready_command, which currently
set the state of the request to MQ_RQ_IN_FLIGHT before calling
nvme_complete_rq.  When this happens for a request that is freed by
the caller, such as nvme_submit_user_cmd, in the worst case the request
could be completed again in tear down process.

Instead of calling blk_mq_start_request from nvmf_fail_nonready_command,
just use the new nvme_host_path_error helper to complete the command
without starting it.

Signed-off-by: Chao Leng <lengchao@huawei.com>
Signed-off-by: Christoph Hellwig <hch@lst.de>
drivers/nvme/host/fabrics.c