[dm-devel] [PATCH 1/5] libmultipath: don't count PRIO_UNDEF paths for pathgroup priority
Benjamin Marzinski
bmarzins at redhat.com
Wed May 24 23:21:08 UTC 2023
When multipath is not set to group_by_prio, different paths in a
pathgroup can have different priorities. If there is a problem getting
the priority of an active path, its priority will be set to PRIO_UNDEF.
This will change the priority of the whole pathgroup, even though it's
likely that this is simply a temporary error. Instead, do not count
PRIO_UNDEF paths towards to priority of the path group, unless there are
no paths that have an actual priority. This will not effect the priority
of multipath devices with group_by_prio, since all paths in a pathgroup
will have the same priority.
Signed-off-by: Benjamin Marzinski <bmarzins at redhat.com>
---
libmultipath/switchgroup.c | 12 +++++++++---
1 file changed, 9 insertions(+), 3 deletions(-)
diff --git a/libmultipath/switchgroup.c b/libmultipath/switchgroup.c
index 6fdfcfa7..b1e1f39b 100644
--- a/libmultipath/switchgroup.c
+++ b/libmultipath/switchgroup.c
@@ -12,6 +12,7 @@ void path_group_prio_update(struct pathgroup *pgp)
int i;
int priority = 0;
int marginal = 0;
+ int defined_prios = 0;
struct path * pp;
pgp->enabled_paths = 0;
@@ -24,12 +25,17 @@ void path_group_prio_update(struct pathgroup *pgp)
marginal++;
if (pp->state == PATH_UP ||
pp->state == PATH_GHOST) {
- priority += pp->priority;
+ if (pp->priority != PRIO_UNDEF) {
+ defined_prios++;
+ priority += pp->priority;
+ }
pgp->enabled_paths++;
}
}
- if (pgp->enabled_paths)
- pgp->priority = priority / pgp->enabled_paths;
+ if (defined_prios)
+ pgp->priority = priority / defined_prios;
+ else if (pgp->enabled_paths)
+ pgp->priority = PRIO_UNDEF;
else
pgp->priority = 0;
if (marginal && marginal == i)
--
2.17.2
More information about the dm-devel
mailing list