lkml.org 
[lkml]   [2020]   [Sep]   [1]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 5.4 108/214] nvme: multipath: round-robin: fix single non-optimized path case
    Date
    From: Martin Wilck <mwilck@suse.com>

    [ Upstream commit 93eb0381e13d249a18ed4aae203291ff977e7ffb ]

    If there's only one usable, non-optimized path, nvme_round_robin_path()
    returns NULL, which is wrong. Fix it by falling back to "old", like in
    the single optimized path case. Also, if the active path isn't changed,
    there's no need to re-assign the pointer.

    Fixes: 3f6e3246db0e ("nvme-multipath: fix logic for non-optimized paths")
    Signed-off-by: Martin Wilck <mwilck@suse.com>
    Signed-off-by: Martin George <marting@netapp.com>
    Reviewed-by: Keith Busch <kbusch@kernel.org>
    Signed-off-by: Sagi Grimberg <sagi@grimberg.me>
    Signed-off-by: Jens Axboe <axboe@kernel.dk>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    ---
    drivers/nvme/host/multipath.c | 15 ++++++++++-----
    1 file changed, 10 insertions(+), 5 deletions(-)

    diff --git a/drivers/nvme/host/multipath.c b/drivers/nvme/host/multipath.c
    index 484aad0d0c9c6..0a458f7880887 100644
    --- a/drivers/nvme/host/multipath.c
    +++ b/drivers/nvme/host/multipath.c
    @@ -249,12 +249,17 @@ static struct nvme_ns *nvme_round_robin_path(struct nvme_ns_head *head,
    fallback = ns;
    }

    - /* No optimized path found, re-check the current path */
    + /*
    + * The loop above skips the current path for round-robin semantics.
    + * Fall back to the current path if either:
    + * - no other optimized path found and current is optimized,
    + * - no other usable path found and current is usable.
    + */
    if (!nvme_path_is_disabled(old) &&
    - old->ana_state == NVME_ANA_OPTIMIZED) {
    - found = old;
    - goto out;
    - }
    + (old->ana_state == NVME_ANA_OPTIMIZED ||
    + (!fallback && old->ana_state == NVME_ANA_NONOPTIMIZED)))
    + return old;
    +
    if (!fallback)
    return NULL;
    found = fallback;
    --
    2.25.1


    \
     
     \ /
      Last update: 2020-09-01 18:23    [W:4.034 / U:0.484 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site