| From dd7d98d68a287146286655c8205d799c1ca07969 Mon Sep 17 00:00:00 2001 |
| From: Sasha Levin <sashal@kernel.org> |
| Date: Mon, 27 Jul 2020 18:08:02 +0200 |
| Subject: nvme-multipath: fix logic for non-optimized paths |
| |
| From: Martin Wilck <mwilck@suse.com> |
| |
| [ Upstream commit 3f6e3246db0e6f92e784965d9d0edb8abe6c6b74 ] |
| |
| Handle the special case where we have exactly one optimized path, |
| which we should keep using in this case. |
| |
| Fixes: 75c10e732724 ("nvme-multipath: round-robin I/O policy") |
| Signed off-by: Martin Wilck <mwilck@suse.com> |
| Signed-off-by: Hannes Reinecke <hare@suse.de> |
| Reviewed-by: Sagi Grimberg <sagi@grimberg.me> |
| Signed-off-by: Christoph Hellwig <hch@lst.de> |
| Signed-off-by: Sasha Levin <sashal@kernel.org> |
| --- |
| drivers/nvme/host/multipath.c | 6 ++++++ |
| 1 file changed, 6 insertions(+) |
| |
| diff --git a/drivers/nvme/host/multipath.c b/drivers/nvme/host/multipath.c |
| index 36db7d2e6a896..2c94e084a61b8 100644 |
| --- a/drivers/nvme/host/multipath.c |
| +++ b/drivers/nvme/host/multipath.c |
| @@ -246,6 +246,12 @@ static struct nvme_ns *nvme_round_robin_path(struct nvme_ns_head *head, |
| fallback = ns; |
| } |
| |
| + /* No optimized path found, re-check the current path */ |
| + if (!nvme_path_is_disabled(old) && |
| + old->ana_state == NVME_ANA_OPTIMIZED) { |
| + found = old; |
| + goto out; |
| + } |
| if (!fallback) |
| return NULL; |
| found = fallback; |
| -- |
| 2.25.1 |
| |