Re: [PATCH] nvme: nvme-fc: Fix nvme_fc_create_hw_io_queues() queue deletion in error path
"Maurizio Lombardi" <[email protected]>
| Newsgroups | org.infradead.lists.linux-nvme |
|---|---|
| Message-ID | <[email protected]> |
On Wed May 13, 2026 at 9:25 PM CEST, Ewan D. Milne 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: [email protected]
> Assisted-by: Claude:claude-opus-4-6
> Signed-off-by: Ewan D. Milne <[email protected]>
> ---
> 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;
> }
Looks ok to me
Reviewed-by: Maurizio Lombardi <[email protected]>