All of lore.kernel.org
 help / color / mirror / Atom feed
From: Sasha Levin <sashal@kernel.org>
To: linux-kernel@vger.kernel.org, stable@vger.kernel.org
Cc: Anton Eidelman <anton.eidelman@gmail.com>,
	Anton Eidelman <anton@lightbitslabs.com>,
	Christoph Hellwig <hch@lst.de>, Sagi Grimberg <sagi@grimberg.me>,
	Sasha Levin <sashal@kernel.org>,
	kbusch@kernel.org, axboe@fb.com, Christoph@vger.kernel.org,
	linux-nvme@lists.infradead.org
Subject: [PATCH AUTOSEL 4.19 06/15] nvme-multipath: fix ANA state updates when a namespace is not present
Date: Wed, 22 Sep 2021 23:39:20 -0400	[thread overview]
Message-ID: <20210923033929.1421446-6-sashal@kernel.org> (raw)
In-Reply-To: <20210923033929.1421446-1-sashal@kernel.org>

From: Anton Eidelman <anton.eidelman@gmail.com>

[ Upstream commit 79f528afa93918519574773ea49a444c104bc1bd ]

nvme_update_ana_state() has a deficiency that results in a failure to
properly update the ana state for a namespace in the following case:

  NSIDs in ctrl->namespaces:	1, 3,    4
  NSIDs in desc->nsids:		1, 2, 3, 4

Loop iteration 0:
    ns index = 0, n = 0, ns->head->ns_id = 1, nsid = 1, MATCH.
Loop iteration 1:
    ns index = 1, n = 1, ns->head->ns_id = 3, nsid = 2, NO MATCH.
Loop iteration 2:
    ns index = 2, n = 2, ns->head->ns_id = 4, nsid = 4, MATCH.

Where the update to the ANA state of NSID 3 is missed.  To fix this
increment n and retry the update with the same ns when ns->head->ns_id is
higher than nsid,

Signed-off-by: Anton Eidelman <anton@lightbitslabs.com>
Signed-off-by: Christoph Hellwig <hch@lst.de>
Reviewed-by: Sagi Grimberg <sagi@grimberg.me>
Signed-off-by: Sasha Levin <sashal@kernel.org>
---
 drivers/nvme/host/multipath.c | 7 +++++--
 1 file changed, 5 insertions(+), 2 deletions(-)

diff --git a/drivers/nvme/host/multipath.c b/drivers/nvme/host/multipath.c
index 64f699a1afd7..022e03643dac 100644
--- a/drivers/nvme/host/multipath.c
+++ b/drivers/nvme/host/multipath.c
@@ -398,14 +398,17 @@ static int nvme_update_ana_state(struct nvme_ctrl *ctrl,
 
 	down_read(&ctrl->namespaces_rwsem);
 	list_for_each_entry(ns, &ctrl->namespaces, list) {
-		unsigned nsid = le32_to_cpu(desc->nsids[n]);
-
+		unsigned nsid;
+again:
+		nsid = le32_to_cpu(desc->nsids[n]);
 		if (ns->head->ns_id < nsid)
 			continue;
 		if (ns->head->ns_id == nsid)
 			nvme_update_ns_ana_state(desc, ns);
 		if (++n == nr_nsids)
 			break;
+		if (ns->head->ns_id > nsid)
+			goto again;
 	}
 	up_read(&ctrl->namespaces_rwsem);
 	return 0;
-- 
2.30.2


  parent reply	other threads:[~2021-09-23  3:42 UTC|newest]

Thread overview: 18+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-09-23  3:39 [PATCH AUTOSEL 4.19 01/15] ibmvnic: check failover_pending in login response Sasha Levin
2021-09-23  3:39 ` Sasha Levin
2021-09-23  3:39 ` [PATCH AUTOSEL 4.19 02/15] net: macb: fix use after free on rmmod Sasha Levin
2021-09-23  3:39 ` [PATCH AUTOSEL 4.19 03/15] net: stmmac: allow CSR clock of 300MHz Sasha Levin
2021-09-23  3:39   ` Sasha Levin
2021-09-23  3:39 ` [PATCH AUTOSEL 4.19 04/15] m68k: Double cast io functions to unsigned long Sasha Levin
2021-09-23  3:39 ` [PATCH AUTOSEL 4.19 05/15] xen/balloon: use a kernel thread instead a workqueue Sasha Levin
2021-09-23  3:39 ` Sasha Levin [this message]
2021-09-23  3:39 ` [PATCH AUTOSEL 4.19 07/15] compiler.h: Introduce absolute_pointer macro Sasha Levin
2021-09-23  3:39 ` [PATCH AUTOSEL 4.19 08/15] net: i825xx: Use absolute_pointer for memcpy from fixed memory location Sasha Levin
2021-09-23  3:39 ` [PATCH AUTOSEL 4.19 09/15] sparc: avoid stringop-overread errors Sasha Levin
2021-09-23  3:39 ` [PATCH AUTOSEL 4.19 10/15] qnx4: " Sasha Levin
2021-09-23  3:39 ` [PATCH AUTOSEL 4.19 11/15] parisc: Use absolute_pointer() to define PAGE0 Sasha Levin
2021-09-23  3:39 ` [PATCH AUTOSEL 4.19 12/15] arm64: Mark __stack_chk_guard as __ro_after_init Sasha Levin
2021-09-23  3:39   ` Sasha Levin
2021-09-23  3:39 ` [PATCH AUTOSEL 4.19 13/15] alpha: Declare virt_to_phys and virt_to_bus parameter as pointer to volatile Sasha Levin
2021-09-23  3:39 ` [PATCH AUTOSEL 4.19 14/15] net: 6pack: Fix tx timeout and slot time Sasha Levin
2021-09-23  3:39 ` [PATCH AUTOSEL 4.19 15/15] spi: Fix tegra20 build with CONFIG_PM=n Sasha Levin

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20210923033929.1421446-6-sashal@kernel.org \
    --to=sashal@kernel.org \
    --cc=Christoph@vger.kernel.org \
    --cc=anton.eidelman@gmail.com \
    --cc=anton@lightbitslabs.com \
    --cc=axboe@fb.com \
    --cc=hch@lst.de \
    --cc=kbusch@kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-nvme@lists.infradead.org \
    --cc=sagi@grimberg.me \
    --cc=stable@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.