mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2025-01-26 02:25:00 -05:00
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>
This commit is contained in:
parent
fd1418de10
commit
55adcdbbdd
1 changed files with 4 additions and 0 deletions
|
@ -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);
|
||||
|
|
Loading…
Add table
Reference in a new issue