[PATCH] nvme: nvme-fc: Fix nvme_fc_create_hw_io_queues() queue deletion in error path

Ewan Milne emilne at redhat.com
Tue Jun 30 11:56:57 PDT 2026


On Wed, May 13, 2026 at 3:27 PM Ewan D. Milne <emilne at redhat.com> wrote:
>
> nvme_fc_create_hw_io_queues() will call __nvme_fc_delete_hw_queue() for the
> last queue on which __nvme_fc_create_hw_queue() reported an error when deleting
> all the io queues if they cannot all be created.  This is incorrect since the
> last queue did not actually get created.
>
> The most recent change to this code was commit 17a1ec08ce70 ("nvme/fc: simplify
> error handling of nvme_fc_create_hw_io_queues") which moved the cleanup to the
> delete_queues: label and changed the loop bounds, however the code was not
> correct prior to this change in a different way.  The original commit
> e399441de911 ("nvme-fabrics: Add host support for FC transport") had a
> different error which called __nvme_fc_delete_hw_queue() on queue index 0 which
> is used for the admin queue.
>
> Fix this by correcting the initial loop index when deleting the io queues.
>
> Fixes: 17a1ec08ce70 ("nvme/fc: simplify error handling of nvme_fc_create_hw_io_queues")
> Fixes: e399441de911 ("nvme-fabrics: Add host support for FC transport")
> Cc: stable at vger.kernel.org
> Assisted-by: Claude:claude-opus-4-6
> Signed-off-by: Ewan D. Milne <emilne at redhat.com>
> ---
>  drivers/nvme/host/fc.c | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/drivers/nvme/host/fc.c b/drivers/nvme/host/fc.c
> index e4f4528fe2a2..f5a83798f3a9 100644
> --- a/drivers/nvme/host/fc.c
> +++ b/drivers/nvme/host/fc.c
> @@ -2318,7 +2318,7 @@ nvme_fc_create_hw_io_queues(struct nvme_fc_ctrl *ctrl, u16 qsize)
>         return 0;
>
>  delete_queues:
> -       for (; i > 0; i--)
> +       for (--i; i > 0; i--)
>                 __nvme_fc_delete_hw_queue(ctrl, &ctrl->queues[i], i);
>         return ret;
>  }
> --
> 2.52.0
>
>

Gentle ping for reviews.

-Ewan




More information about the Linux-nvme mailing list