Skip to content

Commit d1877cc

Browse files
ChaitanayaKulkarnikeithbusch
authored andcommitted
nvme-fc: release admin tagset if init fails
nvme_fabrics creates an NVMe/FC controller in following path: nvmf_dev_write() -> nvmf_create_ctrl() -> nvme_fc_create_ctrl() -> nvme_fc_init_ctrl() nvme_fc_init_ctrl() allocates the admin blk-mq resources right after nvme_add_ctrl() succeeds. If any of the subsequent steps fail (changing the controller state, scheduling connect work, etc.), we jump to the fail_ctrl path, which tears down the controller references but never frees the admin queue/tag set. The leaked blk-mq allocations match the kmemleak report seen during blktests nvme/fc. Check ctrl->ctrl.admin_tagset in the fail_ctrl path and call nvme_remove_admin_tag_set() when it is set so that all admin queue allocations are reclaimed whenever controller setup aborts. Reported-by: Yi Zhang <yi.zhang@redhat.com> Reviewed-by: Justin Tee <justin.tee@broadcom.com> Signed-off-by: Chaitanya Kulkarni <ckulkarnilinux@gmail.com> Signed-off-by: Keith Busch <kbusch@kernel.org>
1 parent 7d3fa7e commit d1877cc

1 file changed

Lines changed: 2 additions & 0 deletions

File tree

  • drivers/nvme/host

drivers/nvme/host/fc.c

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3587,6 +3587,8 @@ nvme_fc_init_ctrl(struct device *dev, struct nvmf_ctrl_options *opts,
35873587

35883588
ctrl->ctrl.opts = NULL;
35893589

3590+
if (ctrl->ctrl.admin_tagset)
3591+
nvme_remove_admin_tag_set(&ctrl->ctrl);
35903592
/* initiate nvme ctrl ref counting teardown */
35913593
nvme_uninit_ctrl(&ctrl->ctrl);
35923594

0 commit comments

Comments
 (0)