[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