From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 From: Martin Wilck Date: Fri, 18 Sep 2020 23:58:15 +0200 Subject: [PATCH] libmultipath: checkers/prio: allow non-lazy .so loading If compiled with -DLOAD_ALL_SHARED_LIBS, all known prioritizers and checkers will be loaded immediately on startup. This is useful for determining symbol usage (start executables with LD_BIND_NOW=1). Reviewed-by: Benjamin Marzinski Signed-off-by: Benjamin Marzinski --- libmultipath/checkers.c | 17 +++++++++++++++++ libmultipath/prio.c | 22 ++++++++++++++++++++++ 2 files changed, 39 insertions(+) diff --git a/libmultipath/checkers.c b/libmultipath/checkers.c index f7ddd536..18b1f5eb 100644 --- a/libmultipath/checkers.c +++ b/libmultipath/checkers.c @@ -7,6 +7,7 @@ #include "debug.h" #include "checkers.h" #include "vector.h" +#include "util.h" struct checker_class { struct list_head node; @@ -375,7 +376,23 @@ void checker_get(const char *multipath_dir, struct checker *dst, int init_checkers(const char *multipath_dir) { +#ifdef LOAD_ALL_SHARED_LIBS + static const char *const all_checkers[] = { + DIRECTIO, + TUR, + HP_SW, + RDAC, + EMC_CLARIION, + READSECTOR0, + CCISS_TUR, + }; + unsigned int i; + + for (i = 0; i < ARRAY_SIZE(all_checkers); i++) + add_checker_class(multipath_dir, all_checkers[i]); +#else if (!add_checker_class(multipath_dir, DEFAULT_CHECKER)) return 1; +#endif return 0; } diff --git a/libmultipath/prio.c b/libmultipath/prio.c index 3a718ba5..c92bde7f 100644 --- a/libmultipath/prio.c +++ b/libmultipath/prio.c @@ -20,8 +20,30 @@ unsigned int get_prio_timeout(unsigned int timeout_ms, int init_prio (const char *multipath_dir) { +#ifdef LOAD_ALL_SHARED_LIBS + static const char *const all_prios[] = { + PRIO_ALUA, + PRIO_CONST, + PRIO_DATACORE, + PRIO_EMC, + PRIO_HDS, + PRIO_HP_SW, + PRIO_ONTAP, + PRIO_RANDOM, + PRIO_RDAC, + PRIO_WEIGHTED_PATH, + PRIO_SYSFS, + PRIO_PATH_LATENCY, + PRIO_ANA, + }; + unsigned int i; + + for (i = 0; i < ARRAY_SIZE(all_prios); i++) + add_prio(multipath_dir, all_prios[i]); +#else if (!add_prio(multipath_dir, DEFAULT_PRIO)) return 1; +#endif return 0; }