Commit 55adcdbb authored by Hannes Reinecke's avatar Hannes Reinecke Committed by Keith Busch

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: default avatarHannes Reinecke <hare@suse.de>
Tested-by: default avatarMark O'Donovan <shiftee@posteo.net>
Signed-off-by: default avatarKeith Busch <kbusch@kernel.org>
parent fd1418de
...@@ -466,6 +466,8 @@ static void nvme_loop_reset_ctrl_work(struct work_struct *work) ...@@ -466,6 +466,8 @@ static void nvme_loop_reset_ctrl_work(struct work_struct *work)
out_destroy_io: out_destroy_io:
nvme_loop_destroy_io_queues(ctrl); nvme_loop_destroy_io_queues(ctrl);
out_destroy_admin: out_destroy_admin:
nvme_quiesce_admin_queue(&ctrl->ctrl);
nvme_cancel_admin_tagset(&ctrl->ctrl);
nvme_loop_destroy_admin_queue(ctrl); nvme_loop_destroy_admin_queue(ctrl);
out_disable: out_disable:
dev_warn(ctrl->ctrl.device, "Removing after reset failure\n"); 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, ...@@ -600,6 +602,8 @@ static struct nvme_ctrl *nvme_loop_create_ctrl(struct device *dev,
return &ctrl->ctrl; return &ctrl->ctrl;
out_remove_admin_queue: out_remove_admin_queue:
nvme_quiesce_admin_queue(&ctrl->ctrl);
nvme_cancel_admin_tagset(&ctrl->ctrl);
nvme_loop_destroy_admin_queue(ctrl); nvme_loop_destroy_admin_queue(ctrl);
out_free_queues: out_free_queues:
kfree(ctrl->queues); kfree(ctrl->queues);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment