2021-01-22 17:57:41

by Daniel Wagner

[permalink] [raw]
Subject: [PATCH] nvme-multipath: Early exit if no path is available

nvme_round_robin_path() should test if the return ns pointer is
valid. nvme_next_ns() will return a NULL pointer if there is no path
left.

Signed-off-by: Daniel Wagner <[email protected]>
---
drivers/nvme/host/multipath.c | 2 ++
1 file changed, 2 insertions(+)

diff --git a/drivers/nvme/host/multipath.c b/drivers/nvme/host/multipath.c
index d578de0ce3aa..8837e9da1ccf 100644
--- a/drivers/nvme/host/multipath.c
+++ b/drivers/nvme/host/multipath.c
@@ -239,6 +239,8 @@ static struct nvme_ns *nvme_round_robin_path(struct nvme_ns_head *head,
for (ns = nvme_next_ns(head, old);
ns != old;
ns = nvme_next_ns(head, ns)) {
+ if (!ns)
+ break;
if (nvme_path_is_disabled(ns))
continue;

--
2.29.2


2021-01-22 18:11:09

by Christoph Hellwig

[permalink] [raw]
Subject: Re: [PATCH] nvme-multipath: Early exit if no path is available

On Fri, Jan 22, 2021 at 06:41:25PM +0100, Daniel Wagner wrote:
> nvme_round_robin_path() should test if the return ns pointer is
> valid. nvme_next_ns() will return a NULL pointer if there is no path
> left.

How can that happen once we're in the loop?

2021-01-22 18:17:50

by Daniel Wagner

[permalink] [raw]
Subject: Re: [PATCH] nvme-multipath: Early exit if no path is available

On Fri, Jan 22, 2021 at 06:50:29PM +0100, Christoph Hellwig wrote:
> How can that happen once we're in the loop?

As far I can tell, it's the first nvme_next_ns() call which returns the
NULL pointer and this will pass the test 'ns != old'.