From b79949a3548e24e0b43d5f8f3fe962afff4111d2 Mon Sep 17 00:00:00 2001 From: Packit Service Date: Dec 21 2020 08:13:50 +0000 Subject: Apply patch 0037-libmultipath-count-pending-paths-as-active-on-loads.patch patch_name: 0037-libmultipath-count-pending-paths-as-active-on-loads.patch present_in_specfile: true location_in_specfile: 37 --- diff --git a/libmultipath/devmapper.c b/libmultipath/devmapper.c index 7f98bf9..91ff0b3 100644 --- a/libmultipath/devmapper.c +++ b/libmultipath/devmapper.c @@ -408,7 +408,8 @@ static uint16_t build_udev_flags(const struct multipath *mpp, int reload) /* DM_UDEV_DISABLE_LIBRARY_FALLBACK is added in dm_addmap */ return (mpp->skip_kpartx == SKIP_KPARTX_ON ? MPATH_UDEV_NO_KPARTX_FLAG : 0) | - ((count_active_paths(mpp) == 0 || mpp->ghost_delay_tick > 0) ? + ((count_active_pending_paths(mpp) == 0 || + mpp->ghost_delay_tick > 0) ? MPATH_UDEV_NO_PATHS_FLAG : 0) | (reload && !mpp->force_udev_reload ? MPATH_UDEV_RELOAD_FLAG : 0); diff --git a/libmultipath/structs.c b/libmultipath/structs.c index 2dd378c..dda9884 100644 --- a/libmultipath/structs.c +++ b/libmultipath/structs.c @@ -500,6 +500,26 @@ int count_active_paths(const struct multipath *mpp) return count; } +int count_active_pending_paths(const struct multipath *mpp) +{ + struct pathgroup *pgp; + struct path *pp; + int count = 0; + int i, j; + + if (!mpp->pg) + return 0; + + vector_foreach_slot (mpp->pg, pgp, i) { + vector_foreach_slot (pgp->paths, pp, j) { + if (pp->state == PATH_UP || pp->state == PATH_GHOST || + pp->state == PATH_PENDING) + count++; + } + } + return count; +} + int pathcmp(const struct pathgroup *pgp, const struct pathgroup *cpgp) { int i, j; diff --git a/libmultipath/structs.h b/libmultipath/structs.h index 9bd39eb..8e78b8c 100644 --- a/libmultipath/structs.h +++ b/libmultipath/structs.h @@ -465,6 +465,7 @@ struct path * first_path (const struct multipath *mpp); int pathcountgr (const struct pathgroup *, int); int pathcount (const struct multipath *, int); int count_active_paths(const struct multipath *); +int count_active_pending_paths(const struct multipath *); int pathcmp (const struct pathgroup *, const struct pathgroup *); int add_feature (char **, const char *); int remove_feature (char **, const char *);