bdev/nvme: Unify _bdev_nvme_find_io_path() and bdev_nvme_find_next_io_path()
Unify _bdev_nvme_find_io_path() and bdev_nvme_find_next_io_path() into _bdev_nvme_find_io_path() by modifying nvme_io_path_get_next(). For active/passive policy, _bdev_nvme_find_io_path() is called only if nbdev_ch->current_io_path is NULL. Hence, the prev parameter is not necessary anymore. Signed-off-by: Shuhei Matsumoto <smatsumoto@nvidia.com> Change-Id: If61b8a24b768a1d571c0033b91d9d9bd487b5cf7 Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/16189 Tested-by: SPDK CI Jenkins <sys_sgci@intel.com> Reviewed-by: Aleksey Marchuk <alexeymar@nvidia.com> Reviewed-by: Jim Harris <james.r.harris@intel.com> Reviewed-by: Richael <richael.zhuang@arm.com>
This commit is contained in:
parent
7baa78c86c
commit
8346b57397
@ -826,47 +826,14 @@ nvme_io_path_get_next(struct nvme_bdev_channel *nbdev_ch, struct nvme_io_path *p
|
|||||||
{
|
{
|
||||||
struct nvme_io_path *next_path;
|
struct nvme_io_path *next_path;
|
||||||
|
|
||||||
next_path = STAILQ_NEXT(prev_path, stailq);
|
if (prev_path != NULL) {
|
||||||
if (next_path != NULL) {
|
next_path = STAILQ_NEXT(prev_path, stailq);
|
||||||
return next_path;
|
if (next_path != NULL) {
|
||||||
} else {
|
return next_path;
|
||||||
return STAILQ_FIRST(&nbdev_ch->io_path_list);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
static struct nvme_io_path *
|
|
||||||
bdev_nvme_find_next_io_path(struct nvme_bdev_channel *nbdev_ch,
|
|
||||||
struct nvme_io_path *prev)
|
|
||||||
{
|
|
||||||
struct nvme_io_path *io_path, *start, *non_optimized = NULL;
|
|
||||||
|
|
||||||
start = nvme_io_path_get_next(nbdev_ch, prev);
|
|
||||||
|
|
||||||
io_path = start;
|
|
||||||
do {
|
|
||||||
if (spdk_likely(nvme_io_path_is_connected(io_path) &&
|
|
||||||
!io_path->nvme_ns->ana_state_updating)) {
|
|
||||||
switch (io_path->nvme_ns->ana_state) {
|
|
||||||
case SPDK_NVME_ANA_OPTIMIZED_STATE:
|
|
||||||
nbdev_ch->current_io_path = io_path;
|
|
||||||
return io_path;
|
|
||||||
case SPDK_NVME_ANA_NON_OPTIMIZED_STATE:
|
|
||||||
if (non_optimized == NULL) {
|
|
||||||
non_optimized = io_path;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
io_path = nvme_io_path_get_next(nbdev_ch, io_path);
|
}
|
||||||
} while (io_path != start);
|
|
||||||
|
|
||||||
/* We come here only if there is no optimized path. Cache even non_optimized
|
return STAILQ_FIRST(&nbdev_ch->io_path_list);
|
||||||
* path for load balance across multiple non_optimized paths.
|
|
||||||
*/
|
|
||||||
nbdev_ch->current_io_path = non_optimized;
|
|
||||||
return non_optimized;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static struct nvme_io_path *
|
static struct nvme_io_path *
|
||||||
@ -874,7 +841,7 @@ _bdev_nvme_find_io_path(struct nvme_bdev_channel *nbdev_ch)
|
|||||||
{
|
{
|
||||||
struct nvme_io_path *io_path, *start, *non_optimized = NULL;
|
struct nvme_io_path *io_path, *start, *non_optimized = NULL;
|
||||||
|
|
||||||
start = STAILQ_FIRST(&nbdev_ch->io_path_list);
|
start = nvme_io_path_get_next(nbdev_ch, nbdev_ch->current_io_path);
|
||||||
|
|
||||||
io_path = start;
|
io_path = start;
|
||||||
do {
|
do {
|
||||||
@ -896,6 +863,13 @@ _bdev_nvme_find_io_path(struct nvme_bdev_channel *nbdev_ch)
|
|||||||
io_path = nvme_io_path_get_next(nbdev_ch, io_path);
|
io_path = nvme_io_path_get_next(nbdev_ch, io_path);
|
||||||
} while (io_path != start);
|
} while (io_path != start);
|
||||||
|
|
||||||
|
if (nbdev_ch->mp_policy == BDEV_NVME_MP_POLICY_ACTIVE_ACTIVE) {
|
||||||
|
/* We come here only if there is no optimized path. Cache even non_optimized
|
||||||
|
* path for load balance across multiple non_optimized paths.
|
||||||
|
*/
|
||||||
|
nbdev_ch->current_io_path = non_optimized;
|
||||||
|
}
|
||||||
|
|
||||||
return non_optimized;
|
return non_optimized;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -909,7 +883,7 @@ bdev_nvme_find_io_path(struct nvme_bdev_channel *nbdev_ch)
|
|||||||
if (spdk_likely(nbdev_ch->mp_policy == BDEV_NVME_MP_POLICY_ACTIVE_PASSIVE)) {
|
if (spdk_likely(nbdev_ch->mp_policy == BDEV_NVME_MP_POLICY_ACTIVE_PASSIVE)) {
|
||||||
return nbdev_ch->current_io_path;
|
return nbdev_ch->current_io_path;
|
||||||
} else {
|
} else {
|
||||||
return bdev_nvme_find_next_io_path(nbdev_ch, nbdev_ch->current_io_path);
|
return _bdev_nvme_find_io_path(nbdev_ch);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user