Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

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>

authored by

Hannes Reinecke and committed by
Keith Busch
55adcdbb fd1418de

+4
+4
drivers/nvme/target/loop.c
··· 466 466 out_destroy_io: 467 467 nvme_loop_destroy_io_queues(ctrl); 468 468 out_destroy_admin: 469 + nvme_quiesce_admin_queue(&ctrl->ctrl); 470 + nvme_cancel_admin_tagset(&ctrl->ctrl); 469 471 nvme_loop_destroy_admin_queue(ctrl); 470 472 out_disable: 471 473 dev_warn(ctrl->ctrl.device, "Removing after reset failure\n"); ··· 602 600 return &ctrl->ctrl; 603 601 604 602 out_remove_admin_queue: 603 + nvme_quiesce_admin_queue(&ctrl->ctrl); 604 + nvme_cancel_admin_tagset(&ctrl->ctrl); 605 605 nvme_loop_destroy_admin_queue(ctrl); 606 606 out_free_queues: 607 607 kfree(ctrl->queues);