[PATCH V4 7/9] nvme-core: align fabrics_q teardown with admin_q in nvme_free_ctrl
Maurizio Lombardi
mlombard at arkamax.eu
Mon May 11 02:57:50 PDT 2026
On Mon May 11, 2026 at 11:53 AM CEST, Hannes Reinecke wrote:
> On 5/8/26 15:33, Maurizio Lombardi wrote:
>> Currently, the final reference for the fabrics admin queue (fabrics_q)
>> is dropped inside nvme_remove_admin_tag_set(). However, the primary
>> admin queue (admin_q) defers dropping its final reference until
>> nvme_free_ctrl().
>>
>> Move the blk_put_queue() call for fabrics_q from nvme_remove_admin_tag_set()
>> to nvme_free_ctrl(). This aligns the lifecycle management of both admin
>> queues, ensuring they are freed symmetrically when the controller is finally
>> torn down.
>>
>> Reviewed-by: Daniel Wagner <dwagner at suse.de>
>> Signed-off-by: Maurizio Lombardi <mlombard at redhat.com>
>> ---
>> drivers/nvme/host/core.c | 6 +++---
>> 1 file changed, 3 insertions(+), 3 deletions(-)
>>
>> diff --git a/drivers/nvme/host/core.c b/drivers/nvme/host/core.c
>> index 5d3200a66f8e..73575d087a07 100644
>> --- a/drivers/nvme/host/core.c
>> +++ b/drivers/nvme/host/core.c
>> @@ -4932,10 +4932,8 @@ void nvme_remove_admin_tag_set(struct nvme_ctrl *ctrl)
>> */
>> nvme_stop_keep_alive(ctrl);
>> blk_mq_destroy_queue(ctrl->admin_q);
>> - if (ctrl->ops->flags & NVME_F_FABRICS) {
>> + if (ctrl->ops->flags & NVME_F_FABRICS)
>> blk_mq_destroy_queue(ctrl->fabrics_q);
>> - blk_put_queue(ctrl->fabrics_q);
>> - }
>> blk_mq_free_tag_set(ctrl->admin_tagset);
>> }
>> EXPORT_SYMBOL_GPL(nvme_remove_admin_tag_set);
>> @@ -5077,6 +5075,8 @@ static void nvme_free_ctrl(struct device *dev)
>>
>> if (ctrl->admin_q)
>> blk_put_queue(ctrl->admin_q);
>> + if (ctrl->fabrics_q)
>> + blk_put_queue(ctrl->fabrics_q);
>> if (!subsys || ctrl->instance != subsys->instance)
>> ida_free(&nvme_instance_ida, ctrl->instance);
>> nvme_free_cels(ctrl);
>
> One wonders why we check for 'flags' in the first hunk, but for the
> existence of 'fabrics_q' in the second hunk.
> But anyway.
That is true,
I have to send a V5 anyway to address other comments, so I will change it to use
if(ctrl->fabrics_q).
Maurizio
More information about the Linux-nvme
mailing list