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

Laurence Oberman loberman at redhat.com
Tue Jun 30 13:19:38 PDT 2026


On Tue, 2026-06-30 at 14:56 -0400, Ewan Milne wrote:
> 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
> 

Looks good to me, loop index is corrected.

Reviewed-by: Laurence Oberman <loberman at redhat.com>




More information about the Linux-nvme mailing list