diff options
author | 2023-10-24 08:13:36 +0200 | |
---|---|---|
committer | 2023-11-06 09:00:15 -0800 | |
commit | 55adcdbbdd349de935de677ccb59ff8be8c67f6a (patch) | |
tree | 0262ede81556a1606b06c6bfc3c7c0527d28d500 | |
parent | nvme-tcp: avoid open-coding nvme_tcp_teardown_admin_queue() (diff) | |
download | wireguard-linux-55adcdbbdd349de935de677ccb59ff8be8c67f6a.tar.xz wireguard-linux-55adcdbbdd349de935de677ccb59ff8be8c67f6a.zip |
nvme-loop: always quiesce and cancel commands before destroying admin q
Once ->init_ctrl_finish() is called there may be commands outstanding,
so we should quiesce the admin queue and cancel all commands prior
to call nvme_loop_destroy_admin_queue().
Signed-off-by: Hannes Reinecke <hare@suse.de>
Tested-by: Mark O'Donovan <shiftee@posteo.net>
Signed-off-by: Keith Busch <kbusch@kernel.org>
Diffstat (limited to '')
-rw-r--r-- | drivers/nvme/target/loop.c | 4 |
1 files changed, 4 insertions, 0 deletions
diff --git a/drivers/nvme/target/loop.c b/drivers/nvme/target/loop.c index 48d5df054cd0..9cb434c58075 100644 --- a/drivers/nvme/target/loop.c +++ b/drivers/nvme/target/loop.c @@ -466,6 +466,8 @@ static void nvme_loop_reset_ctrl_work(struct work_struct *work) out_destroy_io: nvme_loop_destroy_io_queues(ctrl); out_destroy_admin: + nvme_quiesce_admin_queue(&ctrl->ctrl); + nvme_cancel_admin_tagset(&ctrl->ctrl); nvme_loop_destroy_admin_queue(ctrl); out_disable: dev_warn(ctrl->ctrl.device, "Removing after reset failure\n"); @@ -600,6 +602,8 @@ static struct nvme_ctrl *nvme_loop_create_ctrl(struct device *dev, return &ctrl->ctrl; out_remove_admin_queue: + nvme_quiesce_admin_queue(&ctrl->ctrl); + nvme_cancel_admin_tagset(&ctrl->ctrl); nvme_loop_destroy_admin_queue(ctrl); out_free_queues: kfree(ctrl->queues); |