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.

Reviewed-by: Martin Wilck <mwi...@suse.com>
Signed-off-by: Benjamin Marzinski <bmarz...@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

--
dm-devel mailing list
dm-devel@redhat.com
https://listman.redhat.com/mailman/listinfo/dm-devel

Reply via email to