diff --git a/.gitignore b/.gitignore index c9e44d7..1ca930c 100644 --- a/.gitignore +++ b/.gitignore @@ -26,3 +26,4 @@ multipath-tools-091027.tar.gz /multipath-tools-0.8.9.tgz /multipath-tools-0.9.0.tgz /multipath-tools-0.9.3.tgz +/multipath-tools-0.9.4.tgz diff --git a/0001-libmultipath-fix-show-paths-format-failure.patch b/0001-libmultipath-fix-show-paths-format-failure.patch deleted file mode 100644 index 4f56830..0000000 --- a/0001-libmultipath-fix-show-paths-format-failure.patch +++ /dev/null @@ -1,35 +0,0 @@ -From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 -From: Paul Koetsier -Date: Thu, 27 Oct 2022 19:29:28 +0200 -Subject: [PATCH] libmultipath: fix 'show paths format' failure - -Prevent 'multipathd show paths format "%c"' from failing on orphan paths. -For orphan paths the checker class isn't set, which caused -snprint_path_checker() to fail which in turn caused 'show paths format' to fail -when the format string contained "%c". - -Reviewed-by: Martin Wilck -Signed-off-by: Benjamin Marzinski ---- - libmultipath/print.c | 8 ++++++-- - 1 file changed, 6 insertions(+), 2 deletions(-) - -diff --git a/libmultipath/print.c b/libmultipath/print.c -index d7d522c8..3193dbe0 100644 ---- a/libmultipath/print.c -+++ b/libmultipath/print.c -@@ -734,8 +734,12 @@ snprint_host_adapter (struct strbuf *buff, const struct path * pp) - static int - snprint_path_checker (struct strbuf *buff, const struct path * pp) - { -- const struct checker * c = &pp->checker; -- return snprint_str(buff, checker_name(c)); -+ const char * n = checker_name(&pp->checker); -+ -+ if (n) -+ return snprint_str(buff, n); -+ else -+ return snprint_str(buff, "(null)"); - } - - static int diff --git a/0001-multipathd-make-pr-registration-consistent.patch b/0001-multipathd-make-pr-registration-consistent.patch new file mode 100644 index 0000000..47c380a --- /dev/null +++ b/0001-multipathd-make-pr-registration-consistent.patch @@ -0,0 +1,159 @@ +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 +From: Benjamin Marzinski +Date: Tue, 20 Dec 2022 17:41:10 -0600 +Subject: [PATCH] multipathd: make pr registration consistent + +multipathd was inconsistent on what it did with persistent reservations +when a multipath device was created. If a multipath device with a +configured reservation key was created during configure(), multipathd +would try to read the registered keys using an active path. If it saw a +matching key, it would set the prflag, but not attempt to register the +key on any of the other paths. This means that if a new path had +appeared while multipathd was not running, it wouldn't register the key +on this path. + +If the multipath device was created during ev_add_path(), multipathd +would used the added path to check if there was a matching key and if +there was, register the key only on the added path and then set the +prflag. This could be problematic if the device was created with +multiple paths, for instance because find_mutipaths was set to "yes" and +a second path just appeared. In this case, if the device happened to be +only registered on the second path, it would not get registered on the +first path. + +If the multipath device was added to multipathd during a call to +ev_add_map(), multipathd wouldn't set the prflag or register the key on +any paths. + +After a device was created with the prflag set, if a new path appeared +before the creation uevent, and multipathd was forced to delay adding +it, when it finally updated the multipath device, the key would be +registered on all paths, fixing any paths missed during creation. +However, if a new path appeared after the creation uevent, the key would +only be registered on that new path. Any paths that were missed on +creation would stay missed. + +persistent key registration needs to be handled consistently. This +patch does so by making sure that however a multipath device is added to +multipathd, it will check to see if the configured key is registered. If +it is, multipathd will set the prflag and register the key on all the +currently active paths. + +When a new path is added, multipathd will use it to check for active +keys, as before. But if it finds a matching key and prflag isn't +currently set, it will register the key on all paths. + +Signed-off-by: Benjamin Marzinski +Reviewed-by: Martin Wilck +--- + multipathd/main.c | 43 +++++++++++++++++++++++++++++-------------- + 1 file changed, 29 insertions(+), 14 deletions(-) + +diff --git a/multipathd/main.c b/multipathd/main.c +index 1e1b254f..f7212d7b 100644 +--- a/multipathd/main.c ++++ b/multipathd/main.c +@@ -586,13 +586,26 @@ flush_map_nopaths(struct multipath *mpp, struct vectors *vecs) { + return false; + } + ++static void ++pr_register_active_paths(struct multipath *mpp) ++{ ++ unsigned int i, j; ++ struct path *pp; ++ struct pathgroup *pgp; ++ ++ vector_foreach_slot (mpp->pg, pgp, i) { ++ vector_foreach_slot (pgp->paths, pp, j) { ++ if ((pp->state == PATH_UP) || (pp->state == PATH_GHOST)) ++ mpath_pr_event_handle(pp); ++ } ++ } ++} ++ + static int + update_map (struct multipath *mpp, struct vectors *vecs, int new_map) + { + int retries = 3; + char *params __attribute__((cleanup(cleanup_charp))) = NULL; +- struct path *pp; +- int i; + + retry: + condlog(4, "%s: updating new map", mpp->alias); +@@ -609,15 +622,6 @@ retry: + + mpp->action = ACT_RELOAD; + +- if (mpp->prflag) { +- vector_foreach_slot(mpp->paths, pp, i) { +- if ((pp->state == PATH_UP) || (pp->state == PATH_GHOST)) { +- /* persistent reservation check*/ +- mpath_pr_event_handle(pp); +- } +- } +- } +- + if (setup_map(mpp, ¶ms, vecs)) { + condlog(0, "%s: failed to setup new map in update", mpp->alias); + retries = -1; +@@ -643,6 +647,11 @@ fail: + + sync_map_state(mpp); + ++ if (!mpp->prflag) ++ update_map_pr(mpp); ++ if (mpp->prflag) ++ pr_register_active_paths(mpp); ++ + if (retries < 0) + condlog(0, "%s: failed reload in new map update", mpp->alias); + return 0; +@@ -1191,6 +1200,7 @@ ev_add_path (struct path * pp, struct vectors * vecs, int need_do_map) + int start_waiter = 0; + int ret; + int ro; ++ unsigned char prflag = 0; + + /* + * need path UID to go any further +@@ -1234,6 +1244,8 @@ rescan: + + verify_paths(mpp); + mpp->action = ACT_RELOAD; ++ prflag = mpp->prflag; ++ mpath_pr_event_handle(pp); + } else { + if (!should_multipath(pp, vecs->pathvec, vecs->mpvec)) { + orphan_path(pp, "only one path"); +@@ -1252,9 +1264,6 @@ rescan: + goto fail; /* leave path added to pathvec */ + } + +- /* persistent reservation check*/ +- mpath_pr_event_handle(pp); +- + /* ro check - if new path is ro, force map to be ro as well */ + ro = sysfs_get_ro(pp); + if (ro == 1) +@@ -1319,6 +1328,10 @@ rescan: + sync_map_state(mpp); + + if (retries >= 0) { ++ if (start_waiter) ++ update_map_pr(mpp); ++ if (mpp->prflag && !prflag) ++ pr_register_active_paths(mpp); + condlog(2, "%s [%s]: path added to devmap %s", + pp->dev, pp->dev_t, mpp->alias); + return 0; +@@ -2852,6 +2865,8 @@ configure (struct vectors * vecs, enum force_reload_types reload_type) + if (remember_wwid(mpp->wwid) == 1) + trigger_paths_udev_change(mpp, true); + update_map_pr(mpp); ++ if (mpp->prflag) ++ pr_register_active_paths(mpp); + } + + /* diff --git a/0002-fixup-Makefile.inc-fix-man-and-include-paths.patch b/0002-fixup-Makefile.inc-fix-man-and-include-paths.patch deleted file mode 100644 index 4afae52..0000000 --- a/0002-fixup-Makefile.inc-fix-man-and-include-paths.patch +++ /dev/null @@ -1,41 +0,0 @@ -From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 -From: Martin Wilck -Date: Fri, 28 Oct 2022 18:22:59 +0200 -Subject: [PATCH] fixup! Makefile.inc: fix man and include paths - -Paths would now be wrong with the default (empty) prefix. -Fix it. - -Fixes: 2b2885c ("Makefile.inc: fix man and include paths") -Signed-off-by: Martin Wilck -Signed-off-by: Benjamin Marzinski ---- - Makefile.inc | 8 ++++---- - 1 file changed, 4 insertions(+), 4 deletions(-) - -diff --git a/Makefile.inc b/Makefile.inc -index 4d843ce5..32001434 100644 ---- a/Makefile.inc -+++ b/Makefile.inc -@@ -89,9 +89,9 @@ modulesloaddir = $(prefix)/$(SYSTEMDPATH)/modules-load.d - multipathdir = $(TOPDIR)/libmultipath - daemondir = $(TOPDIR)/multipathd - mpathutildir = $(TOPDIR)/libmpathutil --man8dir = $(prefix)/share/man/man8 --man5dir = $(prefix)/share/man/man5 --man3dir = $(prefix)/share/man/man3 -+man8dir = $(usr_prefix)/share/man/man8 -+man5dir = $(usr_prefix)/share/man/man5 -+man3dir = $(usr_prefix)/share/man/man3 - syslibdir = $(prefix)/$(LIB) - usrlibdir = $(usr_prefix)/$(LIB) - libdir = $(prefix)/$(LIB)/multipath -@@ -102,7 +102,7 @@ mpathvaliddir = $(TOPDIR)/libmpathvalid - thirdpartydir = $(TOPDIR)/third-party - libdmmpdir = $(TOPDIR)/libdmmp - nvmedir = $(TOPDIR)/libmultipath/nvme --includedir = $(prefix)/include -+includedir = $(usr_prefix)/include - pkgconfdir = $(usrlibdir)/pkgconfig - plugindir := $(prefix)/$(LIB)/multipath - configdir := $(prefix)/etc/multipath/conf.d diff --git a/0002-libmultipath-make-prflag-an-enum.patch b/0002-libmultipath-make-prflag-an-enum.patch new file mode 100644 index 0000000..304f731 --- /dev/null +++ b/0002-libmultipath-make-prflag-an-enum.patch @@ -0,0 +1,166 @@ +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 +From: Benjamin Marzinski +Date: Tue, 20 Dec 2022 17:41:11 -0600 +Subject: [PATCH] libmultipath: make prflag an enum + +In preparation for a future patch, make prflag an enum, and change the +reply of cli_getprstatus() to a string. + +Signed-off-by: Benjamin Marzinski +Reviewed-by: Martin Wilck +--- + libmpathpersist/mpath_persist_int.c | 2 +- + libmultipath/structs.h | 8 +++++++- + multipathd/cli_handlers.c | 17 +++++++++-------- + multipathd/main.c | 14 +++++++------- + 4 files changed, 24 insertions(+), 17 deletions(-) + +diff --git a/libmpathpersist/mpath_persist_int.c b/libmpathpersist/mpath_persist_int.c +index 6924b379..a84d9474 100644 +--- a/libmpathpersist/mpath_persist_int.c ++++ b/libmpathpersist/mpath_persist_int.c +@@ -783,7 +783,7 @@ int update_map_pr(struct multipath *mpp) + + if (isFound) + { +- mpp->prflag = 1; ++ mpp->prflag = PRFLAG_SET; + condlog(2, "%s: prflag flag set.", mpp->alias ); + } + +diff --git a/libmultipath/structs.h b/libmultipath/structs.h +index 9e2c1ab0..f2265300 100644 +--- a/libmultipath/structs.h ++++ b/libmultipath/structs.h +@@ -375,6 +375,12 @@ struct path { + + typedef int (pgpolicyfn) (struct multipath *, vector); + ++ ++enum prflag_value { ++ PRFLAG_UNSET, ++ PRFLAG_SET, ++}; ++ + struct multipath { + char wwid[WWID_SIZE]; + char alias_old[WWID_SIZE]; +@@ -449,7 +455,7 @@ struct multipath { + int prkey_source; + struct be64 reservation_key; + uint8_t sa_flags; +- unsigned char prflag; ++ int prflag; + int all_tg_pt; + struct gen_multipath generic_mp; + bool fpin_must_reload; +diff --git a/multipathd/cli_handlers.c b/multipathd/cli_handlers.c +index e65fb75c..7ee2729f 100644 +--- a/multipathd/cli_handlers.c ++++ b/multipathd/cli_handlers.c +@@ -1277,6 +1277,10 @@ cli_shutdown (void * v, struct strbuf *reply, void * data) + static int + cli_getprstatus (void * v, struct strbuf *reply, void * data) + { ++ static const char * const prflag_str[] = { ++ [PRFLAG_UNSET] = "unset\n", ++ [PRFLAG_SET] = "set\n", ++ }; + struct multipath * mpp; + struct vectors * vecs = (struct vectors *)data; + char * param = get_keyparam(v, KEY_MAP); +@@ -1287,10 +1291,7 @@ cli_getprstatus (void * v, struct strbuf *reply, void * data) + if (!mpp) + return 1; + +- condlog(3, "%s: prflag = %u", param, (unsigned int)mpp->prflag); +- +- if (print_strbuf(reply, "%d", mpp->prflag) < 0) +- return 1; ++ append_strbuf_str(reply, prflag_str[mpp->prflag]); + + condlog(3, "%s: reply = %s", param, get_strbuf_str(reply)); + +@@ -1310,8 +1311,8 @@ cli_setprstatus(void * v, struct strbuf *reply, void * data) + if (!mpp) + return 1; + +- if (!mpp->prflag) { +- mpp->prflag = 1; ++ if (mpp->prflag != PRFLAG_SET) { ++ mpp->prflag = PRFLAG_SET; + condlog(2, "%s: prflag set", param); + } + +@@ -1332,8 +1333,8 @@ cli_unsetprstatus(void * v, struct strbuf *reply, void * data) + if (!mpp) + return 1; + +- if (mpp->prflag) { +- mpp->prflag = 0; ++ if (mpp->prflag != PRFLAG_UNSET) { ++ mpp->prflag = PRFLAG_UNSET; + condlog(2, "%s: prflag unset", param); + } + +diff --git a/multipathd/main.c b/multipathd/main.c +index f7212d7b..722235c7 100644 +--- a/multipathd/main.c ++++ b/multipathd/main.c +@@ -647,9 +647,9 @@ fail: + + sync_map_state(mpp); + +- if (!mpp->prflag) ++ if (mpp->prflag == PRFLAG_UNSET) + update_map_pr(mpp); +- if (mpp->prflag) ++ if (mpp->prflag == PRFLAG_SET) + pr_register_active_paths(mpp); + + if (retries < 0) +@@ -1200,7 +1200,7 @@ ev_add_path (struct path * pp, struct vectors * vecs, int need_do_map) + int start_waiter = 0; + int ret; + int ro; +- unsigned char prflag = 0; ++ unsigned char prflag = PRFLAG_UNSET; + + /* + * need path UID to go any further +@@ -1330,7 +1330,7 @@ rescan: + if (retries >= 0) { + if (start_waiter) + update_map_pr(mpp); +- if (mpp->prflag && !prflag) ++ if (mpp->prflag == PRFLAG_SET && prflag == PRFLAG_UNSET) + pr_register_active_paths(mpp); + condlog(2, "%s [%s]: path added to devmap %s", + pp->dev, pp->dev_t, mpp->alias); +@@ -2492,7 +2492,7 @@ check_path (struct vectors * vecs, struct path * pp, unsigned int ticks) + } + + if (newstate == PATH_UP || newstate == PATH_GHOST) { +- if (pp->mpp->prflag) { ++ if (pp->mpp->prflag == PRFLAG_SET) { + /* + * Check Persistent Reservation. + */ +@@ -2865,7 +2865,7 @@ configure (struct vectors * vecs, enum force_reload_types reload_type) + if (remember_wwid(mpp->wwid) == 1) + trigger_paths_udev_change(mpp, true); + update_map_pr(mpp); +- if (mpp->prflag) ++ if (mpp->prflag == PRFLAG_SET) + pr_register_active_paths(mpp); + } + +@@ -3840,7 +3840,7 @@ void * mpath_pr_event_handler_fn (void * pathp ) + { + condlog(0,"%s: Reservation registration failed. Error: %d", pp->dev, ret); + } +- mpp->prflag = 1; ++ mpp->prflag = PRFLAG_SET; + + free(param); + out: diff --git a/0003-multipath-tools-Makefile.inc-Fix-paths-for-systemd.patch b/0003-multipath-tools-Makefile.inc-Fix-paths-for-systemd.patch deleted file mode 100644 index 8a25fe0..0000000 --- a/0003-multipath-tools-Makefile.inc-Fix-paths-for-systemd.patch +++ /dev/null @@ -1,65 +0,0 @@ -From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 -From: Martin Wilck -Date: Thu, 27 Oct 2022 17:09:52 +0200 -Subject: [PATCH] multipath-tools: Makefile.inc: Fix paths for systemd - -With prefix=/usr, systemd files were installed under /usr/usr/lib, -which is bogus. Clean this up, and document how to handle systemd's -"rootprefix" options. Remove the previous SYSTEMDPATH option. - -Signed-off-by: Martin Wilck -Signed-off-by: Benjamin Marzinski ---- - Makefile.inc | 21 ++++++++++++--------- - 1 file changed, 12 insertions(+), 9 deletions(-) - -diff --git a/Makefile.inc b/Makefile.inc -index 32001434..351358a9 100644 ---- a/Makefile.inc -+++ b/Makefile.inc -@@ -53,10 +53,6 @@ ifndef SYSTEMD - endif - endif - --ifndef SYSTEMDPATH -- SYSTEMDPATH=usr/lib --endif -- - ifndef DEVMAPPER_INCDIR - ifeq ($(shell $(PKGCONFIG) --modversion devmapper >/dev/null 2>&1 && echo 1), 1) - DEVMAPPER_INCDIR = $(shell $(PKGCONFIG) --variable=includedir devmapper) -@@ -78,14 +74,22 @@ ifndef LINUX_HEADERS_INCDIR - LINUX_HEADERS_INCDIR = /usr/include - endif - -+# Paths. All these can be overridden on the "make" command line. - prefix = -+# Prefix for binaries - exec_prefix = $(prefix) -+# Prefix for non-essential libraries (libdmmp) - usr_prefix = $(prefix) -+# Where to install systemd-related files. systemd is usually installed under /usr -+# Note: some systemd installations use separate "prefix" and "rootprefix". -+# In this case, override only unitdir to use systemd's "rootprefix" instead of $(systemd_prefix) -+systemd_prefix := /usr -+unitdir := $(systemd_prefix)/lib/systemd/system -+tmpfilesdir := $(systemd_prefix)/lib/tmpfiles.d -+modulesloaddir := $(systemd_prefix)/lib/modules-load.d -+libudevdir := $(systemd_prefix)/lib/udev -+udevrulesdir := $(libudevdir)/rules.d - bindir = $(exec_prefix)/sbin --libudevdir = $(prefix)/$(SYSTEMDPATH)/udev --tmpfilesdir = $(prefix)/$(SYSTEMDPATH)/tmpfiles.d --udevrulesdir = $(libudevdir)/rules.d --modulesloaddir = $(prefix)/$(SYSTEMDPATH)/modules-load.d - multipathdir = $(TOPDIR)/libmultipath - daemondir = $(TOPDIR)/multipathd - mpathutildir = $(TOPDIR)/libmpathutil -@@ -95,7 +99,6 @@ man3dir = $(usr_prefix)/share/man/man3 - syslibdir = $(prefix)/$(LIB) - usrlibdir = $(usr_prefix)/$(LIB) - libdir = $(prefix)/$(LIB)/multipath --unitdir = $(prefix)/$(SYSTEMDPATH)/systemd/system - mpathpersistdir = $(TOPDIR)/libmpathpersist - mpathcmddir = $(TOPDIR)/libmpathcmd - mpathvaliddir = $(TOPDIR)/libmpathvalid diff --git a/0003-multipathd-handle-no-active-paths-in-update_map_pr.patch b/0003-multipathd-handle-no-active-paths-in-update_map_pr.patch new file mode 100644 index 0000000..59dd10f --- /dev/null +++ b/0003-multipathd-handle-no-active-paths-in-update_map_pr.patch @@ -0,0 +1,152 @@ +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 +From: Benjamin Marzinski +Date: Tue, 20 Dec 2022 17:41:12 -0600 +Subject: [PATCH] multipathd: handle no active paths in update_map_pr + +When a multipath device is first created, if it has a reservation key +configured, update_map_pr() will check for a matching key on the active +paths. If there were no active paths to check with, multipathd was +leaving mpp->prflag in PRFLAG_UNSET, as if there were no matching keys. +It's possible that when update_map_pr() is called, all the paths will be +in the PATH_PENDING state because the checkers haven't completed yet. In +this case, multipathd was treating the device as having no registered +keys without ever checking. + +To solve this, multipath devices now start with prflag = PRFLAG_UNKNOWN. +It will remain in this state until multipathd actually tries to get the +registered keys down a path. If the map is in this state, it will check +newly active paths, and if it finds a matching key, it will register +the key down all active paths. + +Signed-off-by: Benjamin Marzinski +Reviewed-by: Martin Wilck +--- + libmpathpersist/mpath_persist_int.c | 8 ++++++++ + libmultipath/structs.h | 1 + + multipathd/cli_handlers.c | 1 + + multipathd/main.c | 19 ++++++++++++++----- + 4 files changed, 24 insertions(+), 5 deletions(-) + +diff --git a/libmpathpersist/mpath_persist_int.c b/libmpathpersist/mpath_persist_int.c +index a84d9474..8b52b746 100644 +--- a/libmpathpersist/mpath_persist_int.c ++++ b/libmpathpersist/mpath_persist_int.c +@@ -738,6 +738,7 @@ int update_map_pr(struct multipath *mpp) + if (!get_be64(mpp->reservation_key)) + { + /* Nothing to do. Assuming pr mgmt feature is disabled*/ ++ mpp->prflag = PRFLAG_UNSET; + condlog(4, "%s: reservation_key not set in multipath.conf", + mpp->alias); + return MPATH_PR_SUCCESS; +@@ -749,6 +750,13 @@ int update_map_pr(struct multipath *mpp) + condlog(0,"%s : failed to alloc resp in update_map_pr", mpp->alias); + return MPATH_PR_OTHER; + } ++ if (count_active_paths(mpp) == 0) ++ { ++ condlog(0,"%s: No available paths to check pr status", ++ mpp->alias); ++ return MPATH_PR_OTHER; ++ } ++ mpp->prflag = PRFLAG_UNSET; + ret = mpath_prin_activepath(mpp, MPATH_PRIN_RKEY_SA, resp, noisy); + + if (ret != MPATH_PR_SUCCESS ) +diff --git a/libmultipath/structs.h b/libmultipath/structs.h +index f2265300..e2294323 100644 +--- a/libmultipath/structs.h ++++ b/libmultipath/structs.h +@@ -377,6 +377,7 @@ typedef int (pgpolicyfn) (struct multipath *, vector); + + + enum prflag_value { ++ PRFLAG_UNKNOWN, + PRFLAG_UNSET, + PRFLAG_SET, + }; +diff --git a/multipathd/cli_handlers.c b/multipathd/cli_handlers.c +index 7ee2729f..ec5db1b8 100644 +--- a/multipathd/cli_handlers.c ++++ b/multipathd/cli_handlers.c +@@ -1278,6 +1278,7 @@ static int + cli_getprstatus (void * v, struct strbuf *reply, void * data) + { + static const char * const prflag_str[] = { ++ [PRFLAG_UNKNOWN] = "unknown\n", + [PRFLAG_UNSET] = "unset\n", + [PRFLAG_SET] = "set\n", + }; +diff --git a/multipathd/main.c b/multipathd/main.c +index 722235c7..bdeffe76 100644 +--- a/multipathd/main.c ++++ b/multipathd/main.c +@@ -647,7 +647,7 @@ fail: + + sync_map_state(mpp); + +- if (mpp->prflag == PRFLAG_UNSET) ++ if (mpp->prflag != PRFLAG_SET) + update_map_pr(mpp); + if (mpp->prflag == PRFLAG_SET) + pr_register_active_paths(mpp); +@@ -1330,7 +1330,7 @@ rescan: + if (retries >= 0) { + if (start_waiter) + update_map_pr(mpp); +- if (mpp->prflag == PRFLAG_SET && prflag == PRFLAG_UNSET) ++ if (mpp->prflag == PRFLAG_SET && prflag != PRFLAG_SET) + pr_register_active_paths(mpp); + condlog(2, "%s [%s]: path added to devmap %s", + pp->dev, pp->dev_t, mpp->alias); +@@ -2492,13 +2492,17 @@ check_path (struct vectors * vecs, struct path * pp, unsigned int ticks) + } + + if (newstate == PATH_UP || newstate == PATH_GHOST) { +- if (pp->mpp->prflag == PRFLAG_SET) { ++ if (pp->mpp->prflag != PRFLAG_UNSET) { ++ int prflag = pp->mpp->prflag; + /* + * Check Persistent Reservation. + */ + condlog(2, "%s: checking persistent " + "reservation registration", pp->dev); + mpath_pr_event_handle(pp); ++ if (pp->mpp->prflag == PRFLAG_SET && ++ prflag != PRFLAG_SET) ++ pr_register_active_paths(pp->mpp); + } + } + +@@ -3788,6 +3792,7 @@ void * mpath_pr_event_handler_fn (void * pathp ) + goto out; + } + ++ mpp->prflag = PRFLAG_UNSET; + ret = prin_do_scsi_ioctl(pp->dev, MPATH_PRIN_RKEY_SA, resp, 0); + if (ret != MPATH_PR_SUCCESS ) + { +@@ -3858,12 +3863,12 @@ int mpath_pr_event_handle(struct path *pp) + struct multipath * mpp; + + if (pp->bus != SYSFS_BUS_SCSI) +- return 0; ++ goto no_pr; + + mpp = pp->mpp; + + if (!get_be64(mpp->reservation_key)) +- return -1; ++ goto no_pr; + + pthread_attr_init(&attr); + pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_JOINABLE); +@@ -3876,4 +3881,8 @@ int mpath_pr_event_handle(struct path *pp) + pthread_attr_destroy(&attr); + rc = pthread_join(thread, NULL); + return 0; ++ ++no_pr: ++ pp->mpp->prflag = PRFLAG_UNSET; ++ return 0; + } diff --git a/0004-multipath-tools-Makefile.inc-don-t-take-values-from-.patch b/0004-multipath-tools-Makefile.inc-don-t-take-values-from-.patch deleted file mode 100644 index 5c1b7b3..0000000 --- a/0004-multipath-tools-Makefile.inc-don-t-take-values-from-.patch +++ /dev/null @@ -1,113 +0,0 @@ -From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 -From: Martin Wilck -Date: Thu, 27 Oct 2022 13:24:34 +0200 -Subject: [PATCH] multipath-tools: Makefile.inc: don't take values from - environment - -Don't use environment variables to initialize LIB, RUN, SYSTEMD, SYSTEMDPATH, -DEVMAPPER_INCDIR, LIBUDEV_INCDIR, and LINUX_HEADERS_INCDIR. Taking -such variables from the environment is generally discouraged -(see https://www.gnu.org/software/make/manual/html_node/Environment.html). - -Overriding variables from the commandline is still possible -(https://www.gnu.org/software/make/manual/html_node/Overriding.html). -So now, when building multipath-tools, rather then running -"RUN=/somedir make", users need to run "make RUN=/somedir". - -This simplifies the Makefile without losing important functionality. - -Signed-off-by: Martin Wilck -Signed-off-by: Benjamin Marzinski ---- - Makefile.inc | 60 ++++++++++++++++++++++------------------------------ - 1 file changed, 25 insertions(+), 35 deletions(-) - -diff --git a/Makefile.inc b/Makefile.inc -index 351358a9..d897ac7a 100644 ---- a/Makefile.inc -+++ b/Makefile.inc -@@ -20,59 +20,49 @@ SCSI_DH_MODULES_PRELOAD := - - EXTRAVERSION := $(shell rev=$$(git rev-parse --short=7 HEAD 2>/dev/null); echo $${rev:+-g$$rev}) - -+# PKGCONFIG must be read from the environment to enable compilation -+# in Debian multiarch setups - PKGCONFIG ?= pkg-config - - ifeq ($(TOPDIR),) - TOPDIR = .. - endif - --ifndef LIB -- ifeq ($(shell test -d /lib64 && echo 1),1) -- LIB=lib64 -- else -- LIB=lib -- endif -+ifeq ($(shell test -d /lib64 && echo 1),1) -+ LIB=lib64 -+else -+ LIB=lib - endif - --ifndef RUN -- ifeq ($(shell test -L /var/run -o ! -d /var/run && echo 1),1) -- RUN=run -- else -- RUN=var/run -- endif -+ifeq ($(shell test -L /var/run -o ! -d /var/run && echo 1),1) -+ RUN=run -+else -+ RUN=var/run - endif - --ifndef SYSTEMD -- ifeq ($(shell $(PKGCONFIG) --modversion libsystemd >/dev/null 2>&1 && echo 1), 1) -- SYSTEMD = $(shell $(PKGCONFIG) --modversion libsystemd | awk '{print $$1}') -- else -- ifeq ($(shell systemctl --version >/dev/null 2>&1 && echo 1), 1) -- SYSTEMD = $(shell systemctl --version 2> /dev/null | \ -- sed -n 's/systemd \([0-9]*\).*/\1/p') -- endif -+ifeq ($(shell $(PKGCONFIG) --modversion libsystemd >/dev/null 2>&1 && echo 1), 1) -+ SYSTEMD = $(shell $(PKGCONFIG) --modversion libsystemd | awk '{print $$1}') -+else -+ ifeq ($(shell systemctl --version >/dev/null 2>&1 && echo 1), 1) -+ SYSTEMD = $(shell systemctl --version 2> /dev/null | \ -+ sed -n 's/systemd \([0-9]*\).*/\1/p') - endif - endif - --ifndef DEVMAPPER_INCDIR -- ifeq ($(shell $(PKGCONFIG) --modversion devmapper >/dev/null 2>&1 && echo 1), 1) -- DEVMAPPER_INCDIR = $(shell $(PKGCONFIG) --variable=includedir devmapper) -- else -- DEVMAPPER_INCDIR = /usr/include -- endif -+ifeq ($(shell $(PKGCONFIG) --modversion devmapper >/dev/null 2>&1 && echo 1), 1) -+ DEVMAPPER_INCDIR = $(shell $(PKGCONFIG) --variable=includedir devmapper) -+else -+ DEVMAPPER_INCDIR = /usr/include - endif - --ifndef LIBUDEV_INCDIR -- ifeq ($(shell $(PKGCONFIG) --modversion libudev >/dev/null 2>&1 && echo 1), 1) -- LIBUDEV_INCDIR = $(shell $(PKGCONFIG) --variable=includedir libudev) -- else -- LIBUDEV_INCDIR = /usr/include -- endif -+ifeq ($(shell $(PKGCONFIG) --modversion libudev >/dev/null 2>&1 && echo 1), 1) -+ LIBUDEV_INCDIR = $(shell $(PKGCONFIG) --variable=includedir libudev) -+else -+ LIBUDEV_INCDIR = /usr/include - endif - - # Allow user to override default location. --ifndef LINUX_HEADERS_INCDIR -- LINUX_HEADERS_INCDIR = /usr/include --endif -+LINUX_HEADERS_INCDIR = /usr/include - - # Paths. All these can be overridden on the "make" command line. - prefix = diff --git a/0004-multipathd-add-missing-newline-to-cli_del_map-reply.patch b/0004-multipathd-add-missing-newline-to-cli_del_map-reply.patch new file mode 100644 index 0000000..085fd70 --- /dev/null +++ b/0004-multipathd-add-missing-newline-to-cli_del_map-reply.patch @@ -0,0 +1,24 @@ +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 +From: Benjamin Marzinski +Date: Tue, 20 Dec 2022 17:41:13 -0600 +Subject: [PATCH] multipathd: add missing newline to cli_del_map reply + +Signed-off-by: Benjamin Marzinski +Reviewed-by: Martin Wilck +--- + multipathd/cli_handlers.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/multipathd/cli_handlers.c b/multipathd/cli_handlers.c +index ec5db1b8..44bf43df 100644 +--- a/multipathd/cli_handlers.c ++++ b/multipathd/cli_handlers.c +@@ -760,7 +760,7 @@ cli_del_map (void * v, struct strbuf *reply, void * data) + } + rc = ev_remove_map(param, alias, minor, vecs); + if (rc == 2) +- append_strbuf_str(reply, "delayed"); ++ append_strbuf_str(reply, "delayed\n"); + + free(alias); + return rc; diff --git a/0005-libmultipath-skip-extra-vector-work-in-remove_maps.patch b/0005-libmultipath-skip-extra-vector-work-in-remove_maps.patch new file mode 100644 index 0000000..ee08327 --- /dev/null +++ b/0005-libmultipath-skip-extra-vector-work-in-remove_maps.patch @@ -0,0 +1,33 @@ +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 +From: Benjamin Marzinski +Date: Tue, 20 Dec 2022 17:41:14 -0600 +Subject: [PATCH] libmultipath: skip extra vector work in remove_maps + +Instead of repeatedly removing the first vector element, and shifting +the rest to fill in, call remove_map() without a vector, so it just +frees the devices. The vector will be completely cleaned up by +vector_free() immediately afterwards. + +Signed-off-by: Benjamin Marzinski +Reviewed-by: Martin Wilck +--- + libmultipath/structs_vec.c | 6 ++---- + 1 file changed, 2 insertions(+), 4 deletions(-) + +diff --git a/libmultipath/structs_vec.c b/libmultipath/structs_vec.c +index 5a618767..f3fdc5a6 100644 +--- a/libmultipath/structs_vec.c ++++ b/libmultipath/structs_vec.c +@@ -392,10 +392,8 @@ remove_maps(struct vectors * vecs) + if (!vecs) + return; + +- vector_foreach_slot (vecs->mpvec, mpp, i) { +- remove_map(mpp, vecs->pathvec, vecs->mpvec); +- i--; +- } ++ vector_foreach_slot (vecs->mpvec, mpp, i) ++ remove_map(mpp, vecs->pathvec, NULL); + + vector_free(vecs->mpvec); + vecs->mpvec = NULL; diff --git a/0005-multipath-tools-Makefile.inc-get-rid-of-RUN.patch b/0005-multipath-tools-Makefile.inc-get-rid-of-RUN.patch deleted file mode 100644 index c0543f5..0000000 --- a/0005-multipath-tools-Makefile.inc-get-rid-of-RUN.patch +++ /dev/null @@ -1,63 +0,0 @@ -From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 -From: Martin Wilck -Date: Thu, 27 Oct 2022 15:25:31 +0200 -Subject: [PATCH] multipath-tools: Makefile.inc: get rid of RUN - -Just use $(runtimedir). Also, make the code more compact by using -the "if" function instead of a conditional. - -Signed-off-by: Martin Wilck -Signed-off-by: Benjamin Marzinski ---- - Makefile.inc | 10 ++-------- - libmultipath/defaults.h | 2 +- - 2 files changed, 3 insertions(+), 9 deletions(-) - -diff --git a/Makefile.inc b/Makefile.inc -index d897ac7a..b4ec647c 100644 ---- a/Makefile.inc -+++ b/Makefile.inc -@@ -34,12 +34,6 @@ else - LIB=lib - endif - --ifeq ($(shell test -L /var/run -o ! -d /var/run && echo 1),1) -- RUN=run --else -- RUN=var/run --endif -- - ifeq ($(shell $(PKGCONFIG) --modversion libsystemd >/dev/null 2>&1 && echo 1), 1) - SYSTEMD = $(shell $(PKGCONFIG) --modversion libsystemd | awk '{print $$1}') - else -@@ -99,7 +93,7 @@ includedir = $(usr_prefix)/include - pkgconfdir = $(usrlibdir)/pkgconfig - plugindir := $(prefix)/$(LIB)/multipath - configdir := $(prefix)/etc/multipath/conf.d --runtimedir := /$(RUN) -+runtimedir := $(if $(shell test -L /var/run -o ! -d /var/run && echo 1),/run,/var/run) - - GZIP_PROG = gzip -9 -c - RM = rm -f -@@ -143,7 +137,7 @@ WARNFLAGS := -Werror -Wall -Wextra -Wformat=2 $(WFORMATOVERFLOW) -Werror=implici - -Werror=implicit-function-declaration -Werror=format-security \ - $(WNOCLOBBERED) -Werror=cast-qual $(ERROR_DISCARDED_QUALIFIERS) - CPPFLAGS := $(FORTIFY_OPT) \ -- -DBIN_DIR=\"$(bindir)\" -DMULTIPATH_DIR=\"$(plugindir)\" -DRUN_DIR=\"${RUN}\" \ -+ -DBIN_DIR=\"$(bindir)\" -DMULTIPATH_DIR=\"$(plugindir)\" \ - -DRUNTIME_DIR=\"$(runtimedir)\" \ - -DCONFIG_DIR=\"$(configdir)\" -DEXTRAVERSION=\"$(EXTRAVERSION)\" -MMD -MP - CFLAGS := --std=gnu99 $(CFLAGS) $(OPTFLAGS) $(WARNFLAGS) -pipe -diff --git a/libmultipath/defaults.h b/libmultipath/defaults.h -index 3d552b33..a5e9ea0c 100644 ---- a/libmultipath/defaults.h -+++ b/libmultipath/defaults.h -@@ -62,7 +62,7 @@ - - #define DEV_LOSS_TMO_UNSET 0U - #define MAX_DEV_LOSS_TMO UINT_MAX --#define DEFAULT_PIDFILE "/" RUN_DIR "/multipathd.pid" -+#define DEFAULT_PIDFILE RUNTIME_DIR "/multipathd.pid" - #define DEFAULT_SOCKET "/org/kernel/linux/storage/multipathd" - #define DEFAULT_CONFIGFILE "/etc/multipath.conf" - #define DEFAULT_BINDINGS_FILE "/etc/multipath/bindings" diff --git a/0006-libmultipath-orphan-paths-if-coalesce_paths-frees-ne.patch b/0006-libmultipath-orphan-paths-if-coalesce_paths-frees-ne.patch new file mode 100644 index 0000000..f545df7 --- /dev/null +++ b/0006-libmultipath-orphan-paths-if-coalesce_paths-frees-ne.patch @@ -0,0 +1,41 @@ +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 +From: Benjamin Marzinski +Date: Tue, 20 Dec 2022 17:41:15 -0600 +Subject: [PATCH] libmultipath: orphan paths if coalesce_paths frees newmp + +If coalesce_paths() is called without a mpvec, it will free all the +multipath devices on newmp at the end. This will clear pp->mpp from the +path, but it doesn't completely unitialize them. cli_add_map() can call +coalsce_paths() this way, when adding a device that doesn't currently +exist. cli_add_map() first creates the device in the kernel, and then +calls ev_add_map() to add it to multipathd. If something goes wrong in +ev_add_map(), the paths will still be initialized, even though they're +orphans. + +Fix this by calling remove_map() to orphan the paths that belong to +the multipath devices being deleted by coalesce_paths(). + +Signed-off-by: Benjamin Marzinski +Reviewed-by: Martin Wilck +--- + libmultipath/configure.c | 7 +++++-- + 1 file changed, 5 insertions(+), 2 deletions(-) + +diff --git a/libmultipath/configure.c b/libmultipath/configure.c +index e551047a..e689f8a7 100644 +--- a/libmultipath/configure.c ++++ b/libmultipath/configure.c +@@ -1273,8 +1273,11 @@ int coalesce_paths (struct vectors *vecs, vector mpvec, char *refwwid, + ret = CP_OK; + out: + free(size_mismatch_seen); +- if (!mpvec) +- free_multipathvec(newmp, KEEP_PATHS); ++ if (!mpvec) { ++ vector_foreach_slot (newmp, mpp, i) ++ remove_map(mpp, vecs->pathvec, NULL); ++ vector_free(newmp); ++ } + return ret; + } + diff --git a/0006-multipath-tools-Makefile.inc-more-compact-code-for-L.patch b/0006-multipath-tools-Makefile.inc-more-compact-code-for-L.patch deleted file mode 100644 index 2a0eda4..0000000 --- a/0006-multipath-tools-Makefile.inc-more-compact-code-for-L.patch +++ /dev/null @@ -1,38 +0,0 @@ -From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 -From: Martin Wilck -Date: Thu, 27 Oct 2022 16:14:22 +0200 -Subject: [PATCH] multipath-tools: Makefile.inc: more compact code for LIB - -Use make's "if" function instead of a conditional. - -Signed-off-by: Martin Wilck -Signed-off-by: Benjamin Marzinski ---- - Makefile.inc | 7 +------ - 1 file changed, 1 insertion(+), 6 deletions(-) - -diff --git a/Makefile.inc b/Makefile.inc -index b4ec647c..c39cec9b 100644 ---- a/Makefile.inc -+++ b/Makefile.inc -@@ -28,12 +28,6 @@ ifeq ($(TOPDIR),) - TOPDIR = .. - endif - --ifeq ($(shell test -d /lib64 && echo 1),1) -- LIB=lib64 --else -- LIB=lib --endif -- - ifeq ($(shell $(PKGCONFIG) --modversion libsystemd >/dev/null 2>&1 && echo 1), 1) - SYSTEMD = $(shell $(PKGCONFIG) --modversion libsystemd | awk '{print $$1}') - else -@@ -80,6 +74,7 @@ mpathutildir = $(TOPDIR)/libmpathutil - man8dir = $(usr_prefix)/share/man/man8 - man5dir = $(usr_prefix)/share/man/man5 - man3dir = $(usr_prefix)/share/man/man3 -+LIB := $(if $(shell test -d /lib64 && echo 1),lib64,lib) - syslibdir = $(prefix)/$(LIB) - usrlibdir = $(usr_prefix)/$(LIB) - libdir = $(prefix)/$(LIB)/multipath diff --git a/0007-libmultipath-is_path_valid-check-if-device-is-in-use.patch b/0007-libmultipath-is_path_valid-check-if-device-is-in-use.patch new file mode 100644 index 0000000..6ffa6fc --- /dev/null +++ b/0007-libmultipath-is_path_valid-check-if-device-is-in-use.patch @@ -0,0 +1,609 @@ +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 +From: Martin Wilck +Date: Wed, 9 Nov 2022 21:20:58 +0100 +Subject: [PATCH] libmultipath: is_path_valid(): check if device is in use + +To check whether we will be able to add a given device can be part +of a multipath map, we have two tests in check_path_valid(): +released_to_systemd() and the O_EXCL test. The former isn't helpful +if "multipath -u" is called for the first time for a given device, +and the latter is only used in the "find_multipaths smart" case, because +actively opening the device with O_EXCL, even for a very short time, is prone +to races with other processes. + +It turns out that this may cause issues in some scenarios. We saw problems in +once case where "find_multipaths greedy" was used with a single +non-multipahted root disk and a very large number of multipath LUNs. +The root disk would first be classified as multipath device. multipathd +would try to create a map, fail (because the disk was mounted) and +trigger another uevent. But because of the very large number of multipath +devices, this event was queued up behind thousands of other events, and +the root device timed out eventually. + +While a simple workaround for the given problem would be proper blacklisting +or using a different find_multipaths mode, I am proposing a different +solution here. An additional test is added in is_path_valid() which +checks whether the given device is currently in use by 1. sysfs holders, +2. mounts (from /proc/self/mountinfo) or 3. swaps (from /proc/swaps). 2. +and 3. are similar to systemd's device detection after switching root. +This must not only be done for the device itself, but also for all its +partitions. For mountinfo and swaps, libmount is utilized. + +With this patch, "multipath -u" will make devices with mounted or otherwise +used partitions available to systemd early, without waiting for multipathd +to fail setting up the map and re-triggering an uevent. This should avoid +the issue described above even without blacklisting. The downside of it +is a longer runtime of "multipath -u" for almost all devices, in particular +for real multipath devices. The runtime required for the new checks was in the +order of 0.1ms-1ms in my tests. Moreover, there is a certain risk that devices may +wrongly classified as non-multipath because of transient mounts or holders +created by other processes. + +To make this code compile on older distributions, we need some additional +checks in create-config.mk. + +Signed-off-by: Martin Wilck +Reviewed-by: Benjamin Marzinski +Signed-off-by: Benjamin Marzinski +--- + .github/workflows/build-and-unittest.yaml | 2 +- + create-config.mk | 11 +- + libmpathutil/libmpathutil.version | 6 + + libmpathutil/util.c | 12 + + libmpathutil/util.h | 2 + + libmultipath/Makefile | 2 +- + libmultipath/alias.c | 11 - + libmultipath/valid.c | 270 ++++++++++++++++++++++ + tests/Makefile | 2 +- + tests/valid.c | 48 ++++ + 10 files changed, 351 insertions(+), 15 deletions(-) + +diff --git a/.github/workflows/build-and-unittest.yaml b/.github/workflows/build-and-unittest.yaml +index abf17bf0..9e6c0e89 100644 +--- a/.github/workflows/build-and-unittest.yaml ++++ b/.github/workflows/build-and-unittest.yaml +@@ -31,7 +31,7 @@ jobs: + sudo apt-get install --yes gcc + make perl-base pkg-config valgrind + libdevmapper-dev libreadline-dev libaio-dev libsystemd-dev +- libudev-dev libjson-c-dev liburcu-dev libcmocka-dev libedit-dev ++ libudev-dev libjson-c-dev liburcu-dev libcmocka-dev libedit-dev libmount-dev + - name: build + run: make -Orecurse -j$(grep -c ^processor /proc/cpuinfo) READLINE=${{ matrix.rl }} + - name: test +diff --git a/create-config.mk b/create-config.mk +index 2a95ec56..f128375f 100644 +--- a/create-config.mk ++++ b/create-config.mk +@@ -23,7 +23,7 @@ check_cmd = $(shell \ + + # Check whether a function with name $1 has been declared in header file $2. + check_func = $(shell \ +- if grep -Eq "^[^[:blank:]]+[[:blank:]]+$1[[:blank:]]*(.*)*" "$2"; then \ ++ if grep -Eq "^(extern[[:blank:]]+)?[^[:blank:]]+[[:blank:]]+$1[[:blank:]]*(.*)*" "$2"; then \ + found=1; \ + status="yes"; \ + else \ +@@ -104,6 +104,15 @@ ifneq ($(call check_var,ELS_DTAG_LNK_INTEGRITY,$(kernel_incdir)/scsi/fc/fc_els.h + FPIN_SUPPORT = 1 + endif + ++libmount_h := $(shell $(PKGCONFIG) --variable=includedir mount)/libmount/libmount.h ++ifneq ($(call check_func,mnt_unref_cache,$(libmount_h)),0) ++ DEFINES += LIBMOUNT_HAS_MNT_UNREF_CACHE ++endif ++ ++ifneq ($(call check_func,mnt_table_parse_swaps,$(libmount_h)),0) ++ DEFINES += LIBMOUNT_SUPPORTS_SWAP ++endif ++ + ifneq ($(call check_file,$(kernel_incdir)/linux/nvme_ioctl.h),0) + ANA_SUPPORT := 1 + endif +diff --git a/libmpathutil/libmpathutil.version b/libmpathutil/libmpathutil.version +index 1238fc93..dd007be4 100644 +--- a/libmpathutil/libmpathutil.version ++++ b/libmpathutil/libmpathutil.version +@@ -133,3 +133,9 @@ LIBMPATHUTIL_1.1 { + global: + cleanup_fd_ptr; + } LIBMPATHUTIL_1.0; ++ ++LIBMPATHUTIL_1.2 { ++global: ++ cleanup_vector_free; ++ cleanup_fclose; ++} LIBMPATHUTIL_1.0; +diff --git a/libmpathutil/util.c b/libmpathutil/util.c +index 9662e1ed..92f25a50 100644 +--- a/libmpathutil/util.c ++++ b/libmpathutil/util.c +@@ -386,6 +386,18 @@ void cleanup_mutex(void *arg) + pthread_mutex_unlock(arg); + } + ++void cleanup_vector_free(void *arg) ++{ ++ if (arg) ++ vector_free((vector)arg); ++} ++ ++void cleanup_fclose(void *p) ++{ ++ if (p) ++ fclose(p); ++} ++ + struct bitfield *alloc_bitfield(unsigned int maxbit) + { + unsigned int n; +diff --git a/libmpathutil/util.h b/libmpathutil/util.h +index 75e20fd8..99a471d0 100644 +--- a/libmpathutil/util.h ++++ b/libmpathutil/util.h +@@ -48,6 +48,8 @@ int should_exit(void); + void cleanup_fd_ptr(void *arg); + void cleanup_free_ptr(void *arg); + void cleanup_mutex(void *arg); ++void cleanup_vector_free(void *arg); ++void cleanup_fclose(void *p); + + struct scandir_result { + struct dirent **di; +diff --git a/libmultipath/Makefile b/libmultipath/Makefile +index 3df851e2..61aa611f 100644 +--- a/libmultipath/Makefile ++++ b/libmultipath/Makefile +@@ -7,7 +7,7 @@ DEVLIB := libmultipath.so + CPPFLAGS += -I$(mpathutildir) -I$(mpathcmddir) -I$(nvmedir) -D_GNU_SOURCE $(SYSTEMD_CPPFLAGS) + CFLAGS += $(LIB_CFLAGS) + LIBDEPS += -lpthread -ldl -ldevmapper -ludev -L$(mpathutildir) -lmpathutil -L$(mpathcmddir) -lmpathcmd \ +- -lurcu -laio $(SYSTEMD_LIBDEPS) ++ -lmount -lurcu -laio $(SYSTEMD_LIBDEPS) + + # object files referencing MULTIPATH_DIR or CONFIG_DIR + # they need to be recompiled for unit tests +diff --git a/libmultipath/alias.c b/libmultipath/alias.c +index 05201224..c0139a2e 100644 +--- a/libmultipath/alias.c ++++ b/libmultipath/alias.c +@@ -667,11 +667,6 @@ static int _check_bindings_file(const struct config *conf, FILE *file, + return rc; + } + +-static void cleanup_fclose(void *p) +-{ +- fclose(p); +-} +- + static int alias_compar(const void *p1, const void *p2) + { + const char *alias1 = (*(struct mpentry * const *)p1)->alias; +@@ -684,12 +679,6 @@ static int alias_compar(const void *p1, const void *p2) + return alias1 ? -1 : alias2 ? 1 : 0; + } + +-static void cleanup_vector_free(void *arg) +-{ +- if (arg) +- vector_free((vector)arg); +-} +- + /* + * check_alias_settings(): test for inconsistent alias configuration + * +diff --git a/libmultipath/valid.c b/libmultipath/valid.c +index a6aa9215..d4dae3ed 100644 +--- a/libmultipath/valid.c ++++ b/libmultipath/valid.c +@@ -17,6 +17,8 @@ + #include + #include + #include ++#include ++#include + + #include "vector.h" + #include "config.h" +@@ -30,12 +32,271 @@ + #include "mpath_cmd.h" + #include "valid.h" + ++static int subdir_filter(const struct dirent *ent) ++{ ++ unsigned int j; ++ static char const *const skip[] = { ++ ".", ++ "..", ++ "holders", ++ "integrity", ++ "mq", ++ "power", ++ "queue", ++ "slaves", ++ "trace", ++ }; ++ ++ if (ent->d_type != DT_DIR) ++ return 0; ++ ++ for (j = 0; j < ARRAY_SIZE(skip); j++) ++ if (!strcmp(skip[j], ent->d_name)) ++ return 0; ++ return 1; ++} ++ ++static int read_partitions(const char *syspath, vector parts) ++{ ++ struct scandir_result sr = { .n = 0 }; ++ char path[PATH_MAX], *last; ++ char *prop; ++ int i; ++ ++ strlcpy(path, syspath, sizeof(path)); ++ sr.n = scandir(path, &sr.di, subdir_filter, NULL); ++ if (sr.n == -1) ++ return -errno; ++ ++ pthread_cleanup_push_cast(free_scandir_result, &sr); ++ ++ /* parts[0] is the whole disk */ ++ if ((prop = strdup(strrchr(path, '/') + 1)) != NULL) { ++ if (vector_alloc_slot(parts)) ++ vector_set_slot(parts, prop); ++ else ++ free(prop); ++ } ++ ++ last = path + strlen(path); ++ for (i = 0; i < sr.n; i++) { ++ struct stat st; ++ ++ /* only add dirs that have the "partition" attribute */ ++ snprintf(last, sizeof(path) - (last - path), "/%s/partition", ++ sr.di[i]->d_name); ++ ++ if (stat(path, &st) == 0 && ++ (prop = strdup(sr.di[i]->d_name)) != NULL) { ++ if (vector_alloc_slot(parts)) ++ vector_set_slot(parts, prop); ++ else ++ free(prop); ++ } ++ } ++ ++ pthread_cleanup_pop(1); ++ return 0; ++} ++ ++static int no_dots(const struct dirent *ent) ++{ ++ const char *name = ent->d_name; ++ ++ if (name[0] == '.' && ++ (name[1] == '\0' || (name[1] == '.' && name[2] == '\0'))) ++ return 0; ++ return 1; ++} ++ ++static int check_holders(const char *syspath) ++{ ++ struct scandir_result __attribute__((cleanup(free_scandir_result))) ++ sr = { .n = 0 }; ++ ++ sr.n = scandir(syspath, &sr.di, no_dots, NULL); ++ if (sr.n > 0) ++ condlog(4, "%s: found holders under %s", __func__, syspath); ++ return sr.n; ++} ++ ++static int check_all_holders(const struct _vector *parts) ++{ ++ char syspath[PATH_MAX]; ++ const char *sysname; ++ unsigned int j; ++ ++ if (VECTOR_SIZE(parts) == 0) ++ return 0; ++ ++ if (safe_sprintf(syspath, "/sys/class/block/%s/holders", ++ (const char *)VECTOR_SLOT(parts, 0))) ++ return -EOVERFLOW; ++ ++ if (check_holders(syspath) > 0) ++ return 1; ++ ++ j = 1; ++ vector_foreach_slot_after(parts, sysname, j) { ++ if (safe_sprintf(syspath, "/sys/class/block/%s/%s/holders", ++ (const char *)VECTOR_SLOT(parts, 0), sysname)) ++ return -EOVERFLOW; ++ if (check_holders(syspath) > 0) ++ return 1; ++ } ++ return 0; ++} ++ ++static void cleanup_table(void *arg) ++{ ++ if (arg) ++ mnt_free_table((struct libmnt_table *)arg); ++} ++ ++static void cleanup_cache(void *arg) ++{ ++ if (arg) ++#ifdef LIBMOUNT_HAS_MNT_UNREF_CACHE ++ mnt_unref_cache((struct libmnt_cache *)arg); ++#else ++ mnt_free_cache((struct libmnt_cache *)arg); ++#endif ++} ++ ++/* ++ * Passed a vector of partitions and a libmount table, ++ * check if any of the partitions in the vector is referenced in the table. ++ * Note that mnt_table_find_srcpath() also resolves mounts by symlinks. ++ */ ++static int check_mnt_table(const struct _vector *parts, ++ struct libmnt_table *tbl, ++ const char *table_name) ++{ ++ unsigned int i; ++ const char *sysname; ++ char devpath[PATH_MAX]; ++ ++ vector_foreach_slot(parts, sysname, i) { ++ if (!safe_sprintf(devpath, "/dev/%s", sysname) && ++ mnt_table_find_srcpath(tbl, devpath, ++ MNT_ITER_FORWARD) != NULL) { ++ condlog(4, "%s: found %s in %s", __func__, ++ sysname, table_name); ++ return 1; ++ } ++ } ++ return 0; ++} ++ ++static int check_mountinfo(const struct _vector *parts) ++{ ++ static const char mountinfo[] = "/proc/self/mountinfo"; ++ struct libmnt_table *tbl; ++ struct libmnt_cache *cache; ++ FILE *stream; ++ int used = 0, ret; ++ ++ tbl = mnt_new_table(); ++ if (!tbl ) ++ return -errno; ++ ++ pthread_cleanup_push(cleanup_table, tbl); ++ cache = mnt_new_cache(); ++ if (cache) { ++ pthread_cleanup_push(cleanup_cache, cache); ++ if (mnt_table_set_cache(tbl, cache) == 0) { ++ stream = fopen(mountinfo, "r"); ++ if (stream != NULL) { ++ pthread_cleanup_push(cleanup_fclose, stream); ++ ret = mnt_table_parse_stream(tbl, stream, mountinfo); ++ pthread_cleanup_pop(1); ++ ++ if (ret == 0) ++ used = check_mnt_table(parts, tbl, ++ "mountinfo"); ++ } ++ } ++ pthread_cleanup_pop(1); ++ } ++ pthread_cleanup_pop(1); ++ return used; ++} ++ ++#ifdef LIBMOUNT_SUPPORTS_SWAP ++static int check_swaps(const struct _vector *parts) ++{ ++ struct libmnt_table *tbl; ++ struct libmnt_cache *cache; ++ int used = 0, ret; ++ ++ tbl = mnt_new_table(); ++ if (!tbl ) ++ return -errno; ++ ++ pthread_cleanup_push(cleanup_table, tbl); ++ cache = mnt_new_cache(); ++ if (cache) { ++ pthread_cleanup_push(cleanup_cache, cache); ++ if (mnt_table_set_cache(tbl, cache) == 0) { ++ ret = mnt_table_parse_swaps(tbl, NULL); ++ if (ret == 0) ++ used = check_mnt_table(parts, tbl, "swaps"); ++ } ++ pthread_cleanup_pop(1); ++ } ++ pthread_cleanup_pop(1); ++ return used; ++} ++#else ++static int check_swaps(const struct _vector *parts __attribute__((unused))) ++{ ++ return 0; ++} ++#endif ++ ++ ++/* ++ * Given a block device, check if the device itself or any of its ++ * partitions is in use ++ * - by sysfs holders (e.g. LVM) ++ * - mounted according to /proc/self/mountinfo ++ * - used as swap ++ */ ++static int is_device_in_use(struct udev_device *udevice) ++{ ++ const char *syspath; ++ vector parts; ++ int used = 0, ret; ++ ++ syspath = udev_device_get_syspath(udevice); ++ if (!syspath) ++ return -ENOMEM; ++ ++ parts = vector_alloc(); ++ if (!parts) ++ return -ENOMEM; ++ ++ pthread_cleanup_push_cast(free_strvec, parts); ++ if ((ret = read_partitions(syspath, parts)) == 0) ++ used = check_all_holders(parts) > 0 || ++ check_mountinfo(parts) > 0 || ++ check_swaps(parts) > 0; ++ pthread_cleanup_pop(1); ++ ++ if (ret < 0) ++ return ret; ++ ++ condlog(3, "%s: %s is %sin use", __func__, syspath, used ? "" : "not "); ++ return used; ++} ++ + int + is_path_valid(const char *name, struct config *conf, struct path *pp, + bool check_multipathd) + { + int r; + int fd; ++ const char *prop; + + if (!pp || !name || !conf) + return PATH_IS_ERROR; +@@ -80,6 +341,10 @@ is_path_valid(const char *name, struct config *conf, struct path *pp, + if (!pp->udev) + return PATH_IS_ERROR; + ++ prop = udev_device_get_property_value(pp->udev, "DEVTYPE"); ++ if (prop == NULL || strcmp(prop, "disk")) ++ return PATH_IS_NOT_VALID; ++ + r = pathinfo(pp, conf, DI_SYSFS | DI_WWID | DI_BLACKLIST); + if (r == PATHINFO_SKIPPED) + return PATH_IS_NOT_VALID; +@@ -96,6 +361,11 @@ is_path_valid(const char *name, struct config *conf, struct path *pp, + return PATH_IS_ERROR; + } + ++ if ((conf->find_multipaths == FIND_MULTIPATHS_GREEDY || ++ conf->find_multipaths == FIND_MULTIPATHS_SMART) && ++ is_device_in_use(pp->udev) > 0) ++ return PATH_IS_NOT_VALID; ++ + if (conf->find_multipaths == FIND_MULTIPATHS_GREEDY) + return PATH_IS_VALID; + +diff --git a/tests/Makefile b/tests/Makefile +index 860338b2..1648ab9d 100644 +--- a/tests/Makefile ++++ b/tests/Makefile +@@ -55,7 +55,7 @@ vpd-test_LIBDEPS := -ludev -lpthread -ldl + alias-test_TESTDEPS := test-log.o + alias-test_LIBDEPS := -lpthread -ldl + valid-test_OBJDEPS := $(multipathdir)/valid.o $(multipathdir)/discovery.o +-valid-test_LIBDEPS := -ludev -lpthread -ldl ++valid-test_LIBDEPS := -lmount -ludev -lpthread -ldl + devt-test_LIBDEPS := -ludev + mpathvalid-test_LIBDEPS := -ludev -lpthread -ldl + mpathvalid-test_OBJDEPS := $(mpathvaliddir)/mpath_valid.o +diff --git a/tests/valid.c b/tests/valid.c +index 398b771e..70329324 100644 +--- a/tests/valid.c ++++ b/tests/valid.c +@@ -83,6 +83,13 @@ struct udev_device *__wrap_udev_device_new_from_subsystem_sysname(struct udev *u + return NULL; + } + ++/* For devtype check */ ++const char *__wrap_udev_device_get_property_value(struct udev_device *udev_device, const char *property) ++{ ++ check_expected(property); ++ return mock_ptr_type(char *); ++} ++ + /* For the "hidden" check in pathinfo() */ + const char *__wrap_udev_device_get_sysattr_value(struct udev_device *udev_device, + const char *sysattr) +@@ -97,6 +104,12 @@ int __wrap_add_foreign(struct udev_device *udev_device) + return mock_type(int); + } + ++/* For is_device_used() */ ++const char *__wrap_udev_device_get_sysname(struct udev_device *udev_device) ++{ ++ return mock_ptr_type(char *); ++} ++ + /* called from pathinfo() */ + int __wrap_filter_devnode(struct config *conf, const struct _vector *elist, + const char *vendor, const char * product, const char *dev) +@@ -165,6 +178,11 @@ int __wrap_is_failed_wwid(const char *wwid) + return ret; + } + ++const char *__wrap_udev_device_get_syspath(struct udev_device *udevice) ++{ ++ return mock_ptr_type(char *); ++} ++ + int __wrap_check_wwids_file(char *wwid, int write_wwid) + { + bool passed = mock_type(bool); +@@ -225,6 +243,8 @@ static void setup_passing(char *name, char *wwid, unsigned int check_multipathd, + will_return(__wrap_udev_device_new_from_subsystem_sysname, true); + will_return(__wrap_udev_device_new_from_subsystem_sysname, + name); ++ expect_string(__wrap_udev_device_get_property_value, property, "DEVTYPE"); ++ will_return(__wrap_udev_device_get_property_value, "disk"); + if (stage == STAGE_GET_UDEV_DEVICE) + return; + if (stage == STAGE_PATHINFO_REAL) { +@@ -250,6 +270,10 @@ static void setup_passing(char *name, char *wwid, unsigned int check_multipathd, + return; + will_return(__wrap_is_failed_wwid, WWID_IS_NOT_FAILED); + will_return(__wrap_is_failed_wwid, wwid); ++ /* avoid real is_device_in_use() check */ ++ if (conf.find_multipaths == FIND_MULTIPATHS_GREEDY || ++ conf.find_multipaths == FIND_MULTIPATHS_SMART) ++ will_return(__wrap_udev_device_get_syspath, NULL); + if (stage == STAGE_IS_FAILED) + return; + will_return(__wrap_check_wwids_file, false); +@@ -347,6 +371,30 @@ static void test_check_multipathd(void **state) + assert_int_equal(is_path_valid(name, &conf, &pp, true), + PATH_IS_ERROR); + assert_string_equal(pp.dev, name); ++ ++ /* test pass because connect succeeded. succeed getting udev. Wrong DEVTYPE */ ++ memset(&pp, 0, sizeof(pp)); ++ setup_passing(name, NULL, CHECK_MPATHD_RUNNING, STAGE_CHECK_MULTIPATHD); ++ will_return(__wrap_udev_device_new_from_subsystem_sysname, true); ++ will_return(__wrap_udev_device_new_from_subsystem_sysname, ++ name); ++ expect_string(__wrap_udev_device_get_property_value, property, "DEVTYPE"); ++ will_return(__wrap_udev_device_get_property_value, "partition"); ++ assert_int_equal(is_path_valid(name, &conf, &pp, true), ++ PATH_IS_NOT_VALID); ++ assert_string_equal(pp.dev, name); ++ ++ /* test pass because connect succeeded. succeed getting udev. Bad DEVTYPE */ ++ memset(&pp, 0, sizeof(pp)); ++ setup_passing(name, NULL, CHECK_MPATHD_RUNNING, STAGE_CHECK_MULTIPATHD); ++ will_return(__wrap_udev_device_new_from_subsystem_sysname, true); ++ will_return(__wrap_udev_device_new_from_subsystem_sysname, ++ name); ++ expect_string(__wrap_udev_device_get_property_value, property, "DEVTYPE"); ++ will_return(__wrap_udev_device_get_property_value, NULL); ++ assert_int_equal(is_path_valid(name, &conf, &pp, true), ++ PATH_IS_NOT_VALID); ++ assert_string_equal(pp.dev, name); + } + + static void test_pathinfo(void **state) diff --git a/0007-multipath-tools-Makefiles-simplify-code-for-include-.patch b/0007-multipath-tools-Makefiles-simplify-code-for-include-.patch deleted file mode 100644 index c6be343..0000000 --- a/0007-multipath-tools-Makefiles-simplify-code-for-include-.patch +++ /dev/null @@ -1,139 +0,0 @@ -From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 -From: Martin Wilck -Date: Thu, 27 Oct 2022 16:17:40 +0200 -Subject: [PATCH] multipath-tools: Makefiles: simplify code for include dirs - -Use make's if function, and use lower-case latters for make variable -names that represent directories, such as elsewhere. - -Signed-off-by: Martin Wilck -Signed-off-by: Benjamin Marzinski ---- - Makefile.inc | 16 +++------------- - kpartx/Makefile | 2 +- - libmultipath/Makefile | 14 +++++++------- - libmultipath/prioritizers/Makefile | 2 +- - multipathd/Makefile | 4 ++-- - 5 files changed, 14 insertions(+), 24 deletions(-) - -diff --git a/Makefile.inc b/Makefile.inc -index c39cec9b..38bd1d80 100644 ---- a/Makefile.inc -+++ b/Makefile.inc -@@ -37,20 +37,7 @@ else - endif - endif - --ifeq ($(shell $(PKGCONFIG) --modversion devmapper >/dev/null 2>&1 && echo 1), 1) -- DEVMAPPER_INCDIR = $(shell $(PKGCONFIG) --variable=includedir devmapper) --else -- DEVMAPPER_INCDIR = /usr/include --endif -- --ifeq ($(shell $(PKGCONFIG) --modversion libudev >/dev/null 2>&1 && echo 1), 1) -- LIBUDEV_INCDIR = $(shell $(PKGCONFIG) --variable=includedir libudev) --else -- LIBUDEV_INCDIR = /usr/include --endif -- - # Allow user to override default location. --LINUX_HEADERS_INCDIR = /usr/include - - # Paths. All these can be overridden on the "make" command line. - prefix = -@@ -89,6 +76,9 @@ pkgconfdir = $(usrlibdir)/pkgconfig - plugindir := $(prefix)/$(LIB)/multipath - configdir := $(prefix)/etc/multipath/conf.d - runtimedir := $(if $(shell test -L /var/run -o ! -d /var/run && echo 1),/run,/var/run) -+devmapper_incdir := $(or $(shell $(PKGCONFIG) --variable=includedir devmapper),/usr/include) -+libudev_incdir := $(or $(shell $(PKGCONFIG) --variable=includedir libudev),/usr/include) -+kernel_incdir := /usr/include - - GZIP_PROG = gzip -9 -c - RM = rm -f -diff --git a/kpartx/Makefile b/kpartx/Makefile -index 742d3bcd..bdf2d035 100644 ---- a/kpartx/Makefile -+++ b/kpartx/Makefile -@@ -9,7 +9,7 @@ LDFLAGS += $(BIN_LDFLAGS) - - LIBDEPS += -ldevmapper - --ifneq ($(call check_func,dm_task_set_cookie,$(DEVMAPPER_INCDIR)/libdevmapper.h),0) -+ifneq ($(call check_func,dm_task_set_cookie,$(devmapper_incdir)/libdevmapper.h),0) - CPPFLAGS += -DLIBDM_API_COOKIE - endif - -diff --git a/libmultipath/Makefile b/libmultipath/Makefile -index 3b60a525..f0df27c0 100644 ---- a/libmultipath/Makefile -+++ b/libmultipath/Makefile -@@ -22,31 +22,31 @@ ifdef SYSTEMD - endif - endif - --ifneq ($(call check_func,dm_task_no_flush,$(DEVMAPPER_INCDIR)/libdevmapper.h),0) -+ifneq ($(call check_func,dm_task_no_flush,$(devmapper_incdir)/libdevmapper.h),0) - CPPFLAGS += -DLIBDM_API_FLUSH - endif - --ifneq ($(call check_func,dm_task_get_errno,$(DEVMAPPER_INCDIR)/libdevmapper.h),0) -+ifneq ($(call check_func,dm_task_get_errno,$(devmapper_incdir)/libdevmapper.h),0) - CPPFLAGS += -DLIBDM_API_GET_ERRNO - endif - --ifneq ($(call check_func,dm_task_set_cookie,$(DEVMAPPER_INCDIR)/libdevmapper.h),0) -+ifneq ($(call check_func,dm_task_set_cookie,$(devmapper_incdir)/libdevmapper.h),0) - CPPFLAGS += -DLIBDM_API_COOKIE - endif - --ifneq ($(call check_func,udev_monitor_set_receive_buffer_size,$(LIBUDEV_INCDIR)/libudev.h),0) -+ifneq ($(call check_func,udev_monitor_set_receive_buffer_size,$(libudev_incdir)/libudev.h),0) - CPPFLAGS += -DLIBUDEV_API_RECVBUF - endif - --ifneq ($(call check_func,dm_task_deferred_remove,$(DEVMAPPER_INCDIR)/libdevmapper.h),0) -+ifneq ($(call check_func,dm_task_deferred_remove,$(devmapper_incdir)/libdevmapper.h),0) - CPPFLAGS += -DLIBDM_API_DEFERRED - endif - --ifneq ($(call check_func,dm_hold_control_dev,$(DEVMAPPER_INCDIR)/libdevmapper.h),0) -+ifneq ($(call check_func,dm_hold_control_dev,$(devmapper_incdir)/libdevmapper.h),0) - CPPFLAGS += -DLIBDM_API_HOLD_CONTROL - endif - --ifneq ($(call check_var,ELS_DTAG_LNK_INTEGRITY,$(LINUX_HEADERS_INCDIR)/scsi/fc/fc_els.h),0) -+ifneq ($(call check_var,ELS_DTAG_LNK_INTEGRITY,$(kernel_incdir)/scsi/fc/fc_els.h),0) - CPPFLAGS += -DFPIN_EVENT_HANDLER - endif - -diff --git a/libmultipath/prioritizers/Makefile b/libmultipath/prioritizers/Makefile -index 400f7735..97155f51 100644 ---- a/libmultipath/prioritizers/Makefile -+++ b/libmultipath/prioritizers/Makefile -@@ -26,7 +26,7 @@ LIBS = \ - libpriopath_latency.so \ - libpriosysfs.so - --ifneq ($(call check_file,$(LINUX_HEADERS_INCDIR)/linux/nvme_ioctl.h),0) -+ifneq ($(call check_file,$(kernel_incdir)/linux/nvme_ioctl.h),0) - LIBS += libprioana.so - CPPFLAGS += -I../nvme - endif -diff --git a/multipathd/Makefile b/multipathd/Makefile -index 3ce9465e..c462d7b1 100644 ---- a/multipathd/Makefile -+++ b/multipathd/Makefile -@@ -1,10 +1,10 @@ - include ../Makefile.inc - --ifneq ($(call check_func,dm_task_get_errno,$(DEVMAPPER_INCDIR)/libdevmapper.h),0) -+ifneq ($(call check_func,dm_task_get_errno,$(devmapper_incdir)/libdevmapper.h),0) - CPPFLAGS += -DLIBDM_API_GET_ERRNO - endif - --ifneq ($(call check_var,ELS_DTAG_LNK_INTEGRITY,$(LINUX_HEADERS_INCDIR)/scsi/fc/fc_els.h),0) -+ifneq ($(call check_var,ELS_DTAG_LNK_INTEGRITY,$(kernel_incdir)/scsi/fc/fc_els.h),0) - CPPFLAGS += -DFPIN_EVENT_HANDLER - FPIN_SUPPORT = 1 - endif diff --git a/0008-libmpathpersist-use-conf-timeout-for-updating-persis.patch b/0008-libmpathpersist-use-conf-timeout-for-updating-persis.patch new file mode 100644 index 0000000..9f3dcb2 --- /dev/null +++ b/0008-libmpathpersist-use-conf-timeout-for-updating-persis.patch @@ -0,0 +1,55 @@ +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 +From: Martin Wilck +Date: Mon, 2 Jan 2023 12:39:36 +0100 +Subject: [PATCH] libmpathpersist: use conf->timeout for updating persistent + reservations + +On systems with many LUNs, multipathd may fail to respond within the +default timeout to a "setprkey" command because the vecs lock is held +by the path checker. Honor the globally configured uxsock timeout in +libmpathpersist. + +Reported-by: boposki (github.com/opensvc/multipath-tools/pull/58) +Signed-off-by: Martin Wilck +Reviewed-by: Benjamin Marzinski +Signed-off-by: Benjamin Marzinski +--- + libmpathpersist/mpath_updatepr.c | 11 ++++++++++- + 1 file changed, 10 insertions(+), 1 deletion(-) + +diff --git a/libmpathpersist/mpath_updatepr.c b/libmpathpersist/mpath_updatepr.c +index 4529a82b..36bd777e 100644 +--- a/libmpathpersist/mpath_updatepr.c ++++ b/libmpathpersist/mpath_updatepr.c +@@ -14,6 +14,9 @@ + #include + #include "debug.h" + #include "mpath_cmd.h" ++#include "vector.h" ++#include "globals.h" ++#include "config.h" + #include "uxsock.h" + #include "mpathpr.h" + +@@ -24,6 +27,12 @@ static int do_update_pr(char *alias, char *cmd, char *key) + char str[256]; + char *reply; + int ret = 0; ++ int timeout; ++ struct config *conf; ++ ++ conf = get_multipath_config(); ++ timeout = conf->uxsock_timeout; ++ put_multipath_config(conf); + + fd = mpath_connect(); + if (fd == -1) { +@@ -41,7 +50,7 @@ static int do_update_pr(char *alias, char *cmd, char *key) + mpath_disconnect(fd); + return -1; + } +- ret = recv_packet(fd, &reply, DEFAULT_REPLY_TIMEOUT); ++ ret = recv_packet(fd, &reply, timeout); + if (ret < 0) { + condlog(2, "%s: message=%s recv error=%d", alias, str, errno); + ret = -1; diff --git a/0008-multipath-tools-Makefiles-use-mandir.patch b/0008-multipath-tools-Makefiles-use-mandir.patch deleted file mode 100644 index 10e1ca8..0000000 --- a/0008-multipath-tools-Makefiles-use-mandir.patch +++ /dev/null @@ -1,185 +0,0 @@ -From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 -From: Martin Wilck -Date: Thu, 27 Oct 2022 16:25:04 +0200 -Subject: [PATCH] multipath-tools: Makefiles: use $(mandir) - -Simply use $(mandir) rather than 3 different variables. - -Signed-off-by: Martin Wilck -Signed-off-by: Benjamin Marzinski ---- - Makefile.inc | 4 +--- - kpartx/Makefile | 6 +++--- - libdmmp/Makefile | 8 ++++---- - libmpathpersist/Makefile | 10 +++++----- - mpathpersist/Makefile | 6 +++--- - multipath/Makefile | 12 ++++++------ - multipathd/Makefile | 10 +++++----- - 7 files changed, 27 insertions(+), 29 deletions(-) - -diff --git a/Makefile.inc b/Makefile.inc -index 38bd1d80..f3c84771 100644 ---- a/Makefile.inc -+++ b/Makefile.inc -@@ -58,9 +58,7 @@ bindir = $(exec_prefix)/sbin - multipathdir = $(TOPDIR)/libmultipath - daemondir = $(TOPDIR)/multipathd - mpathutildir = $(TOPDIR)/libmpathutil --man8dir = $(usr_prefix)/share/man/man8 --man5dir = $(usr_prefix)/share/man/man5 --man3dir = $(usr_prefix)/share/man/man3 -+mandir := $(usr_prefix)/share/man - LIB := $(if $(shell test -d /lib64 && echo 1),lib64,lib) - syslibdir = $(prefix)/$(LIB) - usrlibdir = $(usr_prefix)/$(LIB) -diff --git a/kpartx/Makefile b/kpartx/Makefile -index bdf2d035..464925ad 100644 ---- a/kpartx/Makefile -+++ b/kpartx/Makefile -@@ -32,12 +32,12 @@ install: $(EXEC) $(EXEC).8 - $(INSTALL_PROGRAM) -m 644 dm-parts.rules $(DESTDIR)$(libudevdir)/rules.d/11-dm-parts.rules - $(INSTALL_PROGRAM) -m 644 kpartx.rules $(DESTDIR)$(libudevdir)/rules.d/66-kpartx.rules - $(INSTALL_PROGRAM) -m 644 del-part-nodes.rules $(DESTDIR)$(libudevdir)/rules.d/68-del-part-nodes.rules -- $(INSTALL_PROGRAM) -d $(DESTDIR)$(man8dir) -- $(INSTALL_PROGRAM) -m 644 $(EXEC).8 $(DESTDIR)$(man8dir) -+ $(INSTALL_PROGRAM) -d $(DESTDIR)$(mandir)/man8 -+ $(INSTALL_PROGRAM) -m 644 $(EXEC).8 $(DESTDIR)$(mandir)/man8 - - uninstall: - $(RM) $(DESTDIR)$(bindir)/$(EXEC) -- $(RM) $(DESTDIR)$(man8dir)/$(EXEC).8 -+ $(RM) $(DESTDIR)$(mandir)/man8/$(EXEC).8 - $(RM) $(DESTDIR)$(libudevdir)/kpartx_id - $(RM) $(DESTDIR)$(libudevdir)/rules.d/11-dm-parts.rules - $(RM) $(DESTDIR)$(libudevdir)/rules.d/66-kpartx.rules -diff --git a/libdmmp/Makefile b/libdmmp/Makefile -index e4589250..985b694b 100644 ---- a/libdmmp/Makefile -+++ b/libdmmp/Makefile -@@ -45,17 +45,17 @@ install: - $(DESTDIR)$(pkgconfdir)/$(PKGFILE) - perl -i -pe 's|__INCLUDEDIR__|$(includedir)|g' \ - $(DESTDIR)$(pkgconfdir)/$(PKGFILE) -- $(INSTALL_PROGRAM) -d 755 $(DESTDIR)$(man3dir) -- $(INSTALL_PROGRAM) -m 644 -t $(DESTDIR)$(man3dir) docs/man/*.3 -+ $(INSTALL_PROGRAM) -d 755 $(DESTDIR)$(mandir)/man3 -+ $(INSTALL_PROGRAM) -m 644 -t $(DESTDIR)$(mandir)/man3 docs/man/*.3 - - uninstall: - $(RM) $(DESTDIR)$(usrlibdir)/$(LIBS) - $(RM) $(DESTDIR)$(includedir)/$(HEADERS) - $(RM) $(DESTDIR)$(usrlibdir)/$(DEVLIB) -- @for file in $(DESTDIR)$(man3dir)/dmmp_*; do \ -+ @for file in $(DESTDIR)$(mandir)/man3/dmmp_*; do \ - $(RM) $$file; \ - done -- $(RM) $(DESTDIR)$(man3dir)/libdmmp.h* -+ $(RM) $(DESTDIR)$(mandir)/man3/libdmmp.h* - $(RM) $(DESTDIR)$(pkgconfdir)/$(PKGFILE) - - clean: dep_clean -diff --git a/libmpathpersist/Makefile b/libmpathpersist/Makefile -index 4e1717ef..479524d4 100644 ---- a/libmpathpersist/Makefile -+++ b/libmpathpersist/Makefile -@@ -36,17 +36,17 @@ install: all - $(INSTALL_PROGRAM) -d $(DESTDIR)$(syslibdir) - $(INSTALL_PROGRAM) -m 755 $(LIBS) $(DESTDIR)$(syslibdir)/$(LIBS) - $(INSTALL_PROGRAM) -m 755 -d $(DESTDIR)$(syslibdir) -- $(INSTALL_PROGRAM) -m 755 -d $(DESTDIR)$(man3dir) -+ $(INSTALL_PROGRAM) -m 755 -d $(DESTDIR)$(mandir)/man3 - $(INSTALL_PROGRAM) -m 755 -d $(DESTDIR)$(includedir) - $(LN) $(LIBS) $(DESTDIR)$(syslibdir)/$(DEVLIB) -- $(INSTALL_PROGRAM) -m 644 mpath_persistent_reserve_in.3 $(DESTDIR)$(man3dir) -- $(INSTALL_PROGRAM) -m 644 mpath_persistent_reserve_out.3 $(DESTDIR)$(man3dir) -+ $(INSTALL_PROGRAM) -m 644 mpath_persistent_reserve_in.3 $(DESTDIR)$(mandir)/man3 -+ $(INSTALL_PROGRAM) -m 644 mpath_persistent_reserve_out.3 $(DESTDIR)$(mandir)/man3 - $(INSTALL_PROGRAM) -m 644 mpath_persist.h $(DESTDIR)$(includedir) - - uninstall: - $(RM) $(DESTDIR)$(syslibdir)/$(LIBS) -- $(RM) $(DESTDIR)$(man3dir)/mpath_persistent_reserve_in.3 -- $(RM) $(DESTDIR)$(man3dir)/mpath_persistent_reserve_out.3 -+ $(RM) $(DESTDIR)$(mandir)/man3/mpath_persistent_reserve_in.3 -+ $(RM) $(DESTDIR)$(mandir)/man3/mpath_persistent_reserve_out.3 - $(RM) $(DESTDIR)$(includedir)/mpath_persist.h - $(RM) $(DESTDIR)$(syslibdir)/$(DEVLIB) - -diff --git a/mpathpersist/Makefile b/mpathpersist/Makefile -index 2219c86a..d62537b5 100644 ---- a/mpathpersist/Makefile -+++ b/mpathpersist/Makefile -@@ -19,8 +19,8 @@ $(EXEC): $(OBJS) - install: - $(INSTALL_PROGRAM) -d $(DESTDIR)$(bindir) - $(INSTALL_PROGRAM) -m 755 $(EXEC) $(DESTDIR)$(bindir)/ -- $(INSTALL_PROGRAM) -d $(DESTDIR)$(man8dir) -- $(INSTALL_PROGRAM) -m 644 $(EXEC).8 $(DESTDIR)$(man8dir) -+ $(INSTALL_PROGRAM) -d $(DESTDIR)$(mandir)/man8 -+ $(INSTALL_PROGRAM) -m 644 $(EXEC).8 $(DESTDIR)$(mandir)/man8 - - clean: dep_clean - $(RM) core *.o $(EXEC) -@@ -29,7 +29,7 @@ include $(wildcard $(OBJS:.o=.d)) - - uninstall: - $(RM) $(DESTDIR)$(bindir)/$(EXEC) -- $(RM) $(DESTDIR)$(man8dir)/$(EXEC).8 -+ $(RM) $(DESTDIR)$(mandir)/man8/$(EXEC).8 - - dep_clean: - $(RM) $(OBJS:.o=.d) -diff --git a/multipath/Makefile b/multipath/Makefile -index 116348e2..1c4e7a52 100644 ---- a/multipath/Makefile -+++ b/multipath/Makefile -@@ -28,10 +28,10 @@ install: - $(INSTALL_PROGRAM) -m 644 modules-load.conf $(DESTDIR)$(modulesloaddir)/multipath.conf - $(INSTALL_PROGRAM) -d $(DESTDIR)$(tmpfilesdir) - $(INSTALL_PROGRAM) -m 644 tmpfiles.conf $(DESTDIR)$(tmpfilesdir)/multipath.conf -- $(INSTALL_PROGRAM) -d $(DESTDIR)$(man8dir) -- $(INSTALL_PROGRAM) -m 644 $(EXEC).8 $(DESTDIR)$(man8dir) -- $(INSTALL_PROGRAM) -d $(DESTDIR)$(man5dir) -- $(INSTALL_PROGRAM) -m 644 $(EXEC).conf.5 $(DESTDIR)$(man5dir) -+ $(INSTALL_PROGRAM) -d $(DESTDIR)$(mandir)/man8 -+ $(INSTALL_PROGRAM) -m 644 $(EXEC).8 $(DESTDIR)$(mandir)/man8 -+ $(INSTALL_PROGRAM) -d $(DESTDIR)$(mandir)/man5 -+ $(INSTALL_PROGRAM) -m 644 $(EXEC).conf.5 $(DESTDIR)$(mandir)/man5 - ifneq ($(SCSI_DH_MODULES_PRELOAD),) - $(INSTALL_PROGRAM) -m 644 scsi_dh.conf $(DESTDIR)$(modulesloaddir)/scsi_dh.conf - for _x in $(SCSI_DH_MODULES_PRELOAD); do echo "$$_x"; done \ -@@ -44,8 +44,8 @@ uninstall: - $(RM) $(DESTDIR)$(modulesloaddir)/multipath.conf - $(RM) $(DESTDIR)$(modulesloaddir)/scsi_dh.conf - $(RM) $(DESTDIR)$(libudevdir)/rules.d/56-multipath.rules -- $(RM) $(DESTDIR)$(man8dir)/$(EXEC).8 -- $(RM) $(DESTDIR)$(man5dir)/$(EXEC).conf.5 -+ $(RM) $(DESTDIR)$(mandir)/man8/$(EXEC).8 -+ $(RM) $(DESTDIR)$(mandir)/man5/$(EXEC).conf.5 - - clean: dep_clean - $(RM) core *.o $(EXEC) multipath.rules tmpfiles.conf -diff --git a/multipathd/Makefile b/multipathd/Makefile -index c462d7b1..78aefee0 100644 ---- a/multipathd/Makefile -+++ b/multipathd/Makefile -@@ -89,14 +89,14 @@ ifdef SYSTEMD - $(INSTALL_PROGRAM) -m 644 $(EXEC).service $(DESTDIR)$(unitdir) - $(INSTALL_PROGRAM) -m 644 $(EXEC).socket $(DESTDIR)$(unitdir) - endif -- $(INSTALL_PROGRAM) -d $(DESTDIR)$(man8dir) -- $(INSTALL_PROGRAM) -m 644 $(EXEC).8 $(DESTDIR)$(man8dir) -- $(INSTALL_PROGRAM) -m 644 $(CLI).8 $(DESTDIR)$(man8dir) -+ $(INSTALL_PROGRAM) -d $(DESTDIR)$(mandir)/man8 -+ $(INSTALL_PROGRAM) -m 644 $(EXEC).8 $(DESTDIR)$(mandir)/man8 -+ $(INSTALL_PROGRAM) -m 644 $(CLI).8 $(DESTDIR)$(mandir)/man8 - - uninstall: - $(RM) $(DESTDIR)$(bindir)/$(EXEC) $(DESTDIR)$(bindir)/$(CLI) -- $(RM) $(DESTDIR)$(man8dir)/$(EXEC).8 -- $(RM) $(DESTDIR)$(man8dir)/$(CLI).8 -+ $(RM) $(DESTDIR)$(mandir)/man8/$(EXEC).8 -+ $(RM) $(DESTDIR)$(mandir)/man8/$(CLI).8 - $(RM) $(DESTDIR)$(unitdir)/$(EXEC).service - $(RM) $(DESTDIR)$(unitdir)/$(EXEC).socket - diff --git a/0009-libmultipath-pathinfo-don-t-fail-for-devices-lacking.patch b/0009-libmultipath-pathinfo-don-t-fail-for-devices-lacking.patch new file mode 100644 index 0000000..fe7f001 --- /dev/null +++ b/0009-libmultipath-pathinfo-don-t-fail-for-devices-lacking.patch @@ -0,0 +1,77 @@ +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 +From: Martin Wilck +Date: Wed, 30 Nov 2022 21:07:45 +0100 +Subject: [PATCH] libmultipath: pathinfo: don't fail for devices lacking + INQUIRY properties +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +Some SAS devices (e.g. Seagate factory recertified 'white label' drives) may +come with the Vendor field blank. This causes Multipath to fail to +complete the discovery of those devices. + +Such devices violate the SCSI Spec. From the SPC-6, §6.7.2: +"The T10 VENDOR IDENTIFICATION field contains eight bytes of left-aligned +ASCII data (see 4.3.1) identifying the manufacturer of the logical unit. The +T10 vendor identification shall be one assigned by INCITS.". + +But as we don't identify WWIDs by vendor and product, we don't need to discard +these devices right away. We can go ahead fingers crossed, and hope that the +the other VPD pages for the device are correct. + +We obviously can't look up reasonable device properties for such devices in +our hwtable. It would be up to the user to deal with that. + +Reported by: Allyn Malventano (github.com/opensvc/multipath-tools/issues/56) +Signed-off-by: Martin Wilck +Reviewed-by: Benjamin Marzinski +Signed-off-by: Benjamin Marzinski +--- + libmultipath/discovery.c | 22 +++++++++++++--------- + 1 file changed, 13 insertions(+), 9 deletions(-) + +diff --git a/libmultipath/discovery.c b/libmultipath/discovery.c +index d9ee2cb9..67ac0e6d 100644 +--- a/libmultipath/discovery.c ++++ b/libmultipath/discovery.c +@@ -1472,6 +1472,7 @@ scsi_sysfs_pathinfo (struct path *pp, const struct _vector *hwtable) + { + struct udev_device *parent; + const char *attr_path = NULL; ++ static const char unknown[] = "UNKNOWN"; + + parent = pp->udev; + while (parent) { +@@ -1492,19 +1493,22 @@ scsi_sysfs_pathinfo (struct path *pp, const struct _vector *hwtable) + if (!attr_path || pp->sg_id.host_no == -1) + return PATHINFO_FAILED; + +- if (sysfs_get_vendor(parent, pp->vendor_id, SCSI_VENDOR_SIZE) <= 0) +- return PATHINFO_FAILED;; +- ++ if (sysfs_get_vendor(parent, pp->vendor_id, SCSI_VENDOR_SIZE) <= 0) { ++ condlog(1, "%s: broken device without vendor ID", pp->dev); ++ strlcpy(pp->vendor_id, unknown, SCSI_VENDOR_SIZE); ++ } + condlog(3, "%s: vendor = %s", pp->dev, pp->vendor_id); + +- if (sysfs_get_model(parent, pp->product_id, PATH_PRODUCT_SIZE) <= 0) +- return PATHINFO_FAILED;; +- ++ if (sysfs_get_model(parent, pp->product_id, PATH_PRODUCT_SIZE) <= 0) { ++ condlog(1, "%s: broken device without product ID", pp->dev); ++ strlcpy(pp->product_id, unknown, PATH_PRODUCT_SIZE); ++ } + condlog(3, "%s: product = %s", pp->dev, pp->product_id); + +- if (sysfs_get_rev(parent, pp->rev, PATH_REV_SIZE) < 0) +- return PATHINFO_FAILED;; +- ++ if (sysfs_get_rev(parent, pp->rev, PATH_REV_SIZE) < 0) { ++ condlog(2, "%s: broken device without revision", pp->dev); ++ strlcpy(pp->rev, unknown, PATH_REV_SIZE); ++ } + condlog(3, "%s: rev = %s", pp->dev, pp->rev); + + /* diff --git a/0009-multipath-tools-Makefile.inc-simplify-expression-for.patch b/0009-multipath-tools-Makefile.inc-simplify-expression-for.patch deleted file mode 100644 index 9b0dbc5..0000000 --- a/0009-multipath-tools-Makefile.inc-simplify-expression-for.patch +++ /dev/null @@ -1,36 +0,0 @@ -From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 -From: Martin Wilck -Date: Thu, 27 Oct 2022 16:34:34 +0200 -Subject: [PATCH] multipath-tools: Makefile.inc: simplify expression for - SYSTEMD - -Use a shell "or" function here. Note the use of "strip" to remove -the whitespace that are caused by the line break. - -Signed-off-by: Martin Wilck -Signed-off-by: Benjamin Marzinski ---- - Makefile.inc | 10 ++-------- - 1 file changed, 2 insertions(+), 8 deletions(-) - -diff --git a/Makefile.inc b/Makefile.inc -index f3c84771..1a08b8fa 100644 ---- a/Makefile.inc -+++ b/Makefile.inc -@@ -28,14 +28,8 @@ ifeq ($(TOPDIR),) - TOPDIR = .. - endif - --ifeq ($(shell $(PKGCONFIG) --modversion libsystemd >/dev/null 2>&1 && echo 1), 1) -- SYSTEMD = $(shell $(PKGCONFIG) --modversion libsystemd | awk '{print $$1}') --else -- ifeq ($(shell systemctl --version >/dev/null 2>&1 && echo 1), 1) -- SYSTEMD = $(shell systemctl --version 2> /dev/null | \ -- sed -n 's/systemd \([0-9]*\).*/\1/p') -- endif --endif -+SYSTEMD := $(strip $(or $(shell $(PKGCONFIG) --modversion libsystemd 2>/dev/null | awk '{print $$1}'), \ -+ $(shell systemctl --version 2>/dev/null | sed -n 's/systemd \([0-9]*\).*/\1/p'))) - - # Allow user to override default location. - diff --git a/0010-libmultipath-bump-ABI-version-to-18.0.0.patch b/0010-libmultipath-bump-ABI-version-to-18.0.0.patch new file mode 100644 index 0000000..0d9a3c1 --- /dev/null +++ b/0010-libmultipath-bump-ABI-version-to-18.0.0.patch @@ -0,0 +1,26 @@ +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 +From: Martin Wilck +Date: Wed, 25 Jan 2023 11:35:38 +0100 +Subject: [PATCH] libmultipath: bump ABI version to 18.0.0 + +Commit 6b81153 ("libmultipath: make prflag an enum") changed +the size and member offsets of struct multipath. + +Signed-off-by: Benjamin Marzinski +--- + libmultipath/libmultipath.version | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/libmultipath/libmultipath.version b/libmultipath/libmultipath.version +index faef2a2d..015623cc 100644 +--- a/libmultipath/libmultipath.version ++++ b/libmultipath/libmultipath.version +@@ -43,7 +43,7 @@ LIBMPATHCOMMON_1.0.0 { + put_multipath_config; + }; + +-LIBMULTIPATH_17.0.0 { ++LIBMULTIPATH_18.0.0 { + global: + /* symbols referenced by multipath and multipathd */ + add_foreign; diff --git a/0010-multipath-tools-Makefile.inc-untangle-paths-and-sour.patch b/0010-multipath-tools-Makefile.inc-untangle-paths-and-sour.patch deleted file mode 100644 index 8591ac4..0000000 --- a/0010-multipath-tools-Makefile.inc-untangle-paths-and-sour.patch +++ /dev/null @@ -1,68 +0,0 @@ -From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 -From: Martin Wilck -Date: Thu, 27 Oct 2022 16:53:04 +0200 -Subject: [PATCH] multipath-tools: Makefile.inc: untangle paths and source - directories - -Only the installation paths can be customized. Move the definitions -of $(multipathdir) etc. further down. - -Signed-off-by: Martin Wilck -Signed-off-by: Benjamin Marzinski ---- - Makefile.inc | 23 ++++++++++++----------- - 1 file changed, 12 insertions(+), 11 deletions(-) - -diff --git a/Makefile.inc b/Makefile.inc -index 1a08b8fa..6ec8201b 100644 ---- a/Makefile.inc -+++ b/Makefile.inc -@@ -31,8 +31,6 @@ endif - SYSTEMD := $(strip $(or $(shell $(PKGCONFIG) --modversion libsystemd 2>/dev/null | awk '{print $$1}'), \ - $(shell systemctl --version 2>/dev/null | sed -n 's/systemd \([0-9]*\).*/\1/p'))) - --# Allow user to override default location. -- - # Paths. All these can be overridden on the "make" command line. - prefix = - # Prefix for binaries -@@ -49,20 +47,11 @@ modulesloaddir := $(systemd_prefix)/lib/modules-load.d - libudevdir := $(systemd_prefix)/lib/udev - udevrulesdir := $(libudevdir)/rules.d - bindir = $(exec_prefix)/sbin --multipathdir = $(TOPDIR)/libmultipath --daemondir = $(TOPDIR)/multipathd --mpathutildir = $(TOPDIR)/libmpathutil - mandir := $(usr_prefix)/share/man - LIB := $(if $(shell test -d /lib64 && echo 1),lib64,lib) - syslibdir = $(prefix)/$(LIB) - usrlibdir = $(usr_prefix)/$(LIB) - libdir = $(prefix)/$(LIB)/multipath --mpathpersistdir = $(TOPDIR)/libmpathpersist --mpathcmddir = $(TOPDIR)/libmpathcmd --mpathvaliddir = $(TOPDIR)/libmpathvalid --thirdpartydir = $(TOPDIR)/third-party --libdmmpdir = $(TOPDIR)/libdmmp --nvmedir = $(TOPDIR)/libmultipath/nvme - includedir = $(usr_prefix)/include - pkgconfdir = $(usrlibdir)/pkgconfig - plugindir := $(prefix)/$(LIB)/multipath -@@ -124,6 +113,18 @@ SHARED_FLAGS = -shared - LDFLAGS := $(LDFLAGS) -Wl,-z,relro -Wl,-z,now -Wl,-z,defs - BIN_LDFLAGS = -pie - -+# Source code directories. Don't modify. -+ -+multipathdir = $(TOPDIR)/libmultipath -+daemondir = $(TOPDIR)/multipathd -+mpathutildir = $(TOPDIR)/libmpathutil -+mpathpersistdir = $(TOPDIR)/libmpathpersist -+mpathcmddir = $(TOPDIR)/libmpathcmd -+mpathvaliddir = $(TOPDIR)/libmpathvalid -+thirdpartydir = $(TOPDIR)/third-party -+libdmmpdir = $(TOPDIR)/libdmmp -+nvmedir = $(TOPDIR)/libmultipath/nvme -+ - # Check whether a function with name $1 has been declared in header file $2. - check_func = $(shell \ - if grep -Eq "^[^[:blank:]]+[[:blank:]]+$1[[:blank:]]*(.*)*" "$2"; then \ diff --git a/0033-RH-fixup-udev-rules-for-redhat.patch b/0011-RH-fixup-udev-rules-for-redhat.patch similarity index 98% rename from 0033-RH-fixup-udev-rules-for-redhat.patch rename to 0011-RH-fixup-udev-rules-for-redhat.patch index f0fc0d2..618603c 100644 --- a/0033-RH-fixup-udev-rules-for-redhat.patch +++ b/0011-RH-fixup-udev-rules-for-redhat.patch @@ -15,7 +15,7 @@ Signed-off-by: Benjamin Marzinski 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/Makefile.inc b/Makefile.inc -index 866ab274..8c5a08a2 100644 +index 2e25d2ea..540e1dfc 100644 --- a/Makefile.inc +++ b/Makefile.inc @@ -34,9 +34,9 @@ endif diff --git a/0011-multipath-tools-Makefiles-replace-libdir-by-plugindi.patch b/0011-multipath-tools-Makefiles-replace-libdir-by-plugindi.patch deleted file mode 100644 index 82c63d1..0000000 --- a/0011-multipath-tools-Makefiles-replace-libdir-by-plugindi.patch +++ /dev/null @@ -1,110 +0,0 @@ -From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 -From: Martin Wilck -Date: Thu, 27 Oct 2022 17:17:00 +0200 -Subject: [PATCH] multipath-tools: Makefiles: replace $(libdir) by $(plugindir) - -The make variables $(libdir) and $(plugindir) are redundant. -I overlooked that in af15832 ("multipath-tools: make multipath_dir a -compiled-in option"). While libdir has existed longer, I think -plugindir describes better what this path is used for, so replace -libdir by plugindir. - -Signed-off-by: Martin Wilck -Signed-off-by: Benjamin Marzinski ---- - Makefile.inc | 1 - - libmpathutil/Makefile | 1 - - libmultipath/Makefile | 2 +- - libmultipath/checkers/Makefile | 4 ++-- - libmultipath/foreign/Makefile | 4 ++-- - libmultipath/prioritizers/Makefile | 4 ++-- - 6 files changed, 7 insertions(+), 9 deletions(-) - -diff --git a/Makefile.inc b/Makefile.inc -index 6ec8201b..17707a3e 100644 ---- a/Makefile.inc -+++ b/Makefile.inc -@@ -51,7 +51,6 @@ mandir := $(usr_prefix)/share/man - LIB := $(if $(shell test -d /lib64 && echo 1),lib64,lib) - syslibdir = $(prefix)/$(LIB) - usrlibdir = $(usr_prefix)/$(LIB) --libdir = $(prefix)/$(LIB)/multipath - includedir = $(usr_prefix)/include - pkgconfdir = $(usrlibdir)/pkgconfig - plugindir := $(prefix)/$(LIB)/multipath -diff --git a/libmpathutil/Makefile b/libmpathutil/Makefile -index 68b1c7d6..c913c761 100644 ---- a/libmpathutil/Makefile -+++ b/libmpathutil/Makefile -@@ -54,7 +54,6 @@ abi: $(LIBS:%.so.$(SONAME)=%-nv.abi) - install: all - $(INSTALL_PROGRAM) -d $(DESTDIR)$(syslibdir) - $(INSTALL_PROGRAM) -m 755 $(LIBS) $(DESTDIR)$(syslibdir)/$(LIBS) -- $(INSTALL_PROGRAM) -m 755 -d $(DESTDIR)$(libdir) - $(LN) $(LIBS) $(DESTDIR)$(syslibdir)/$(DEVLIB) - - uninstall: -diff --git a/libmultipath/Makefile b/libmultipath/Makefile -index f0df27c0..c7d4fc99 100644 ---- a/libmultipath/Makefile -+++ b/libmultipath/Makefile -@@ -119,7 +119,7 @@ test-lib: ../tests/$(LIBS) - install: all - $(INSTALL_PROGRAM) -d $(DESTDIR)$(syslibdir) - $(INSTALL_PROGRAM) -m 755 $(LIBS) $(DESTDIR)$(syslibdir)/$(LIBS) -- $(INSTALL_PROGRAM) -m 755 -d $(DESTDIR)$(libdir) -+ $(INSTALL_PROGRAM) -m 755 -d $(DESTDIR)$(plugindir) - $(LN) $(LIBS) $(DESTDIR)$(syslibdir)/$(DEVLIB) - - uninstall: -diff --git a/libmultipath/checkers/Makefile b/libmultipath/checkers/Makefile -index c9a2c4ca..39ad76e0 100644 ---- a/libmultipath/checkers/Makefile -+++ b/libmultipath/checkers/Makefile -@@ -25,10 +25,10 @@ libcheck%.so: %.o - $(CC) $(LDFLAGS) $(SHARED_FLAGS) -o $@ $^ $(LIBDEPS) - - install: -- $(INSTALL_PROGRAM) -m 755 $(LIBS) $(DESTDIR)$(libdir) -+ $(INSTALL_PROGRAM) -m 755 $(LIBS) $(DESTDIR)$(plugindir) - - uninstall: -- for file in $(LIBS); do $(RM) $(DESTDIR)$(libdir)/$$file; done -+ for file in $(LIBS); do $(RM) $(DESTDIR)$(plugindir)/$$file; done - - clean: dep_clean - $(RM) core *.a *.o *.gz *.so -diff --git a/libmultipath/foreign/Makefile b/libmultipath/foreign/Makefile -index d0232f20..8bf9047b 100644 ---- a/libmultipath/foreign/Makefile -+++ b/libmultipath/foreign/Makefile -@@ -17,10 +17,10 @@ libforeign-%.so: %.o - $(CC) $(LDFLAGS) $(SHARED_FLAGS) -o $@ $^ $(LIBDEPS) - - install: -- $(INSTALL_PROGRAM) -m 755 $(LIBS) $(DESTDIR)$(libdir) -+ $(INSTALL_PROGRAM) -m 755 $(LIBS) $(DESTDIR)$(plugindir) - - uninstall: -- for file in $(LIBS); do $(RM) $(DESTDIR)$(libdir)/$$file; done -+ for file in $(LIBS); do $(RM) $(DESTDIR)$(plugindir)/$$file; done - - clean: dep_clean - $(RM) core *.a *.o *.gz *.so -diff --git a/libmultipath/prioritizers/Makefile b/libmultipath/prioritizers/Makefile -index 97155f51..72eefe49 100644 ---- a/libmultipath/prioritizers/Makefile -+++ b/libmultipath/prioritizers/Makefile -@@ -37,10 +37,10 @@ libprio%.so: %.o - $(CC) $(LDFLAGS) $(SHARED_FLAGS) -o $@ $^ $(LIBDEPS) - - install: $(LIBS) -- $(INSTALL_PROGRAM) -m 755 libprio*.so $(DESTDIR)$(libdir) -+ $(INSTALL_PROGRAM) -m 755 libprio*.so $(DESTDIR)$(plugindir) - - uninstall: -- for file in $(LIBS); do $(RM) $(DESTDIR)$(libdir)/$$file; done -+ for file in $(LIBS); do $(RM) $(DESTDIR)$(plugindir)/$$file; done - - clean: dep_clean - $(RM) core *.a *.o *.gz *.so diff --git a/0034-RH-Remove-the-property-blacklist-exception-builtin.patch b/0012-RH-Remove-the-property-blacklist-exception-builtin.patch similarity index 96% rename from 0034-RH-Remove-the-property-blacklist-exception-builtin.patch rename to 0012-RH-Remove-the-property-blacklist-exception-builtin.patch index feef3f6..cbd2480 100644 --- a/0034-RH-Remove-the-property-blacklist-exception-builtin.patch +++ b/0012-RH-Remove-the-property-blacklist-exception-builtin.patch @@ -43,10 +43,10 @@ index 8d15d2ea..eff690fd 100644 udev_device_get_properties_list_entry(udev)) { diff --git a/multipath/multipath.conf.5 b/multipath/multipath.conf.5 -index 1fea9d5a..eef3c605 100644 +index b4dccd1b..284282c6 100644 --- a/multipath/multipath.conf.5 +++ b/multipath/multipath.conf.5 -@@ -1353,9 +1353,14 @@ keywords. Both are regular expressions. For a full description of these keywords +@@ -1367,9 +1367,14 @@ keywords. Both are regular expressions. For a full description of these keywords Regular expression for an udev property. All devices that have matching udev properties will be excluded/included. The handling of the \fIproperty\fR keyword is special, @@ -62,7 +62,7 @@ index 1fea9d5a..eef3c605 100644 . .RS .PP -@@ -1366,10 +1371,6 @@ Blacklisting by missing properties is only applied to devices which do have the +@@ -1380,10 +1385,6 @@ Blacklisting by missing properties is only applied to devices which do have the property specified by \fIuid_attribute\fR (e.g. \fIID_SERIAL\fR) set. Previously, it was applied to every device, possibly causing devices to be blacklisted because of temporary I/O error conditions. diff --git a/0012-multipath-tools-Makefile.inc-use-simple-make-variabl.patch b/0012-multipath-tools-Makefile.inc-use-simple-make-variabl.patch deleted file mode 100644 index 16cca1e..0000000 --- a/0012-multipath-tools-Makefile.inc-use-simple-make-variabl.patch +++ /dev/null @@ -1,112 +0,0 @@ -From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 -From: Martin Wilck -Date: Thu, 27 Oct 2022 17:35:48 +0200 -Subject: [PATCH] multipath-tools: Makefile.inc: use simple make variables - consistently - -"Simply expanded" make variables are generally preferred over "recursively -expanded" make variables, unless they reference other variables that are -defined over overwritten further down in the Makefile (see -https://www.gnu.org/software/make/manual/html_node/Flavors.html). -Using them makes the code easier to read and even somewhat faster. - -We've been adding simply expanded variables over time, but most older -code still uses recursively expanded ones. Try to be consistent, at least -in Makefile.inc. - -Signed-off-by: Martin Wilck -Signed-off-by: Benjamin Marzinski ---- - Makefile.inc | 50 +++++++++++++++++++++++++------------------------- - 1 file changed, 25 insertions(+), 25 deletions(-) - -diff --git a/Makefile.inc b/Makefile.inc -index 17707a3e..86602e2a 100644 ---- a/Makefile.inc -+++ b/Makefile.inc -@@ -32,11 +32,11 @@ SYSTEMD := $(strip $(or $(shell $(PKGCONFIG) --modversion libsystemd 2>/dev/null - $(shell systemctl --version 2>/dev/null | sed -n 's/systemd \([0-9]*\).*/\1/p'))) - - # Paths. All these can be overridden on the "make" command line. --prefix = -+prefix := - # Prefix for binaries --exec_prefix = $(prefix) -+exec_prefix := $(prefix) - # Prefix for non-essential libraries (libdmmp) --usr_prefix = $(prefix) -+usr_prefix := $(prefix) - # Where to install systemd-related files. systemd is usually installed under /usr - # Note: some systemd installations use separate "prefix" and "rootprefix". - # In this case, override only unitdir to use systemd's "rootprefix" instead of $(systemd_prefix) -@@ -46,13 +46,13 @@ tmpfilesdir := $(systemd_prefix)/lib/tmpfiles.d - modulesloaddir := $(systemd_prefix)/lib/modules-load.d - libudevdir := $(systemd_prefix)/lib/udev - udevrulesdir := $(libudevdir)/rules.d --bindir = $(exec_prefix)/sbin -+bindir := $(exec_prefix)/sbin - mandir := $(usr_prefix)/share/man - LIB := $(if $(shell test -d /lib64 && echo 1),lib64,lib) --syslibdir = $(prefix)/$(LIB) --usrlibdir = $(usr_prefix)/$(LIB) --includedir = $(usr_prefix)/include --pkgconfdir = $(usrlibdir)/pkgconfig -+syslibdir := $(prefix)/$(LIB) -+usrlibdir := $(usr_prefix)/$(LIB) -+includedir := $(usr_prefix)/include -+pkgconfdir := $(usrlibdir)/pkgconfig - plugindir := $(prefix)/$(LIB)/multipath - configdir := $(prefix)/etc/multipath/conf.d - runtimedir := $(if $(shell test -L /var/run -o ! -d /var/run && echo 1),/run,/var/run) -@@ -60,10 +60,10 @@ devmapper_incdir := $(or $(shell $(PKGCONFIG) --variable=includedir devmapper),/ - libudev_incdir := $(or $(shell $(PKGCONFIG) --variable=includedir libudev),/usr/include) - kernel_incdir := /usr/include - --GZIP_PROG = gzip -9 -c --RM = rm -f --LN = ln -sf --INSTALL_PROGRAM = install -+GZIP_PROG := gzip -9 -c -+RM := rm -f -+LN := ln -sf -+INSTALL_PROGRAM := install - NV_VERSION_SCRIPT = $(VERSION_SCRIPT:%.version=%-nv.version) - - # $(call TEST_CC_OPTION,option,fallback) -@@ -106,23 +106,23 @@ CPPFLAGS := $(FORTIFY_OPT) \ - -DRUNTIME_DIR=\"$(runtimedir)\" \ - -DCONFIG_DIR=\"$(configdir)\" -DEXTRAVERSION=\"$(EXTRAVERSION)\" -MMD -MP - CFLAGS := --std=gnu99 $(CFLAGS) $(OPTFLAGS) $(WARNFLAGS) -pipe --BIN_CFLAGS = -fPIE -DPIE --LIB_CFLAGS = -fPIC --SHARED_FLAGS = -shared -+BIN_CFLAGS := -fPIE -DPIE -+LIB_CFLAGS := -fPIC -+SHARED_FLAGS := -shared - LDFLAGS := $(LDFLAGS) -Wl,-z,relro -Wl,-z,now -Wl,-z,defs --BIN_LDFLAGS = -pie -+BIN_LDFLAGS := -pie - - # Source code directories. Don't modify. - --multipathdir = $(TOPDIR)/libmultipath --daemondir = $(TOPDIR)/multipathd --mpathutildir = $(TOPDIR)/libmpathutil --mpathpersistdir = $(TOPDIR)/libmpathpersist --mpathcmddir = $(TOPDIR)/libmpathcmd --mpathvaliddir = $(TOPDIR)/libmpathvalid --thirdpartydir = $(TOPDIR)/third-party --libdmmpdir = $(TOPDIR)/libdmmp --nvmedir = $(TOPDIR)/libmultipath/nvme -+multipathdir := $(TOPDIR)/libmultipath -+daemondir := $(TOPDIR)/multipathd -+mpathutildir := $(TOPDIR)/libmpathutil -+mpathpersistdir := $(TOPDIR)/libmpathpersist -+mpathcmddir := $(TOPDIR)/libmpathcmd -+mpathvaliddir := $(TOPDIR)/libmpathvalid -+thirdpartydir := $(TOPDIR)/third-party -+libdmmpdir := $(TOPDIR)/libdmmp -+nvmedir := $(TOPDIR)/libmultipath/nvme - - # Check whether a function with name $1 has been declared in header file $2. - check_func = $(shell \ diff --git a/0035-RH-don-t-start-without-a-config-file.patch b/0013-RH-don-t-start-without-a-config-file.patch similarity index 100% rename from 0035-RH-don-t-start-without-a-config-file.patch rename to 0013-RH-don-t-start-without-a-config-file.patch diff --git a/0013-multipath-tools-Makefile.inc-fix-a-log-message.patch b/0013-multipath-tools-Makefile.inc-fix-a-log-message.patch deleted file mode 100644 index 3e424dc..0000000 --- a/0013-multipath-tools-Makefile.inc-fix-a-log-message.patch +++ /dev/null @@ -1,24 +0,0 @@ -From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 -From: Martin Wilck -Date: Thu, 27 Oct 2022 17:40:30 +0200 -Subject: [PATCH] multipath-tools: Makefile.inc: fix a log message - -Signed-off-by: Martin Wilck -Signed-off-by: Benjamin Marzinski ---- - Makefile.inc | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/Makefile.inc b/Makefile.inc -index 86602e2a..77790ddf 100644 ---- a/Makefile.inc -+++ b/Makefile.inc -@@ -159,7 +159,7 @@ check_var = $(shell \ - found=0; \ - status="no"; \ - fi; \ -- echo 1>&2 "Checking for .. $1 in $2 ... $$status"; \ -+ echo 1>&2 "Checking for $1 in $2 ... $$status"; \ - echo "$$found" \ - ) - diff --git a/0036-RH-Fix-nvme-function-missing-argument.patch b/0014-RH-Fix-nvme-function-missing-argument.patch similarity index 100% rename from 0036-RH-Fix-nvme-function-missing-argument.patch rename to 0014-RH-Fix-nvme-function-missing-argument.patch diff --git a/0014-multipath-tools-Makefile.inc-set-systemd-specific-fl.patch b/0014-multipath-tools-Makefile.inc-set-systemd-specific-fl.patch deleted file mode 100644 index fa37b7c..0000000 --- a/0014-multipath-tools-Makefile.inc-set-systemd-specific-fl.patch +++ /dev/null @@ -1,129 +0,0 @@ -From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 -From: Martin Wilck -Date: Thu, 27 Oct 2022 16:40:27 +0200 -Subject: [PATCH] multipath-tools: Makefile.inc: set systemd-specific flags - -Define SYSTEMD_CPPFLAGS and SYSTEMD_LIBDEPS, and use them in Makefiles. - -Signed-off-by: Martin Wilck -Signed-off-by: Benjamin Marzinski ---- - Makefile.inc | 3 +++ - libmpathutil/Makefile | 13 ++----------- - libmultipath/Makefile | 14 +++----------- - multipathd/Makefile | 25 ++++++++----------------- - 4 files changed, 16 insertions(+), 39 deletions(-) - -diff --git a/Makefile.inc b/Makefile.inc -index 77790ddf..2cf25745 100644 ---- a/Makefile.inc -+++ b/Makefile.inc -@@ -97,6 +97,9 @@ ERROR_DISCARDED_QUALIFIERS := $(call TEST_CC_OPTION,-Werror=discarded-qualifiers - WNOCLOBBERED := $(call TEST_CC_OPTION,-Wno-clobbered -Wno-error=clobbered,) - WFORMATOVERFLOW := $(call TEST_CC_OPTION,-Wformat-overflow=2,) - -+SYSTEMD_CPPFLAGS := $(if $(SYSTEMD),-DUSE_SYSTEMD=$(SYSTEMD)) -+SYSTEMD_LIBDEPS := $(if $(SYSTEMD),$(if $(shell test $(SYSTEMD) -gt 209 && echo 1),-lsystemd,-lsystemd-daemon)) -+ - OPTFLAGS := -O2 -g $(STACKPROT) --param=ssp-buffer-size=4 - WARNFLAGS := -Werror -Wall -Wextra -Wformat=2 $(WFORMATOVERFLOW) -Werror=implicit-int \ - -Werror=implicit-function-declaration -Werror=format-security \ -diff --git a/libmpathutil/Makefile b/libmpathutil/Makefile -index c913c761..4be75d2d 100644 ---- a/libmpathutil/Makefile -+++ b/libmpathutil/Makefile -@@ -8,19 +8,10 @@ DEVLIB = libmpathutil.so - LIBS = $(DEVLIB).$(SONAME) - VERSION_SCRIPT := libmpathutil.version - --CPPFLAGS += -I. -I$(multipathdir) -I$(mpathcmddir) -+CPPFLAGS += -I. -I$(multipathdir) -I$(mpathcmddir) $(SYSTEMD_CPPFLAGS) - CFLAGS += $(LIB_CFLAGS) -D_GNU_SOURCE - --LIBDEPS += -lpthread -ldl -ludev -L$(mpathcmddir) -lmpathcmd -- --ifdef SYSTEMD -- CPPFLAGS += -DUSE_SYSTEMD=$(SYSTEMD) -- ifeq ($(shell test $(SYSTEMD) -gt 209 && echo 1), 1) -- LIBDEPS += -lsystemd -- else -- LIBDEPS += -lsystemd-daemon -- endif --endif -+LIBDEPS += -lpthread -ldl -ludev -L$(mpathcmddir) -lmpathcmd $(SYSTEMD_LIBDEPS) - - # object files referencing MULTIPATH_DIR or CONFIG_DIR - # they need to be recompiled for unit tests -diff --git a/libmultipath/Makefile b/libmultipath/Makefile -index c7d4fc99..009f26a3 100644 ---- a/libmultipath/Makefile -+++ b/libmultipath/Makefile -@@ -8,19 +8,11 @@ DEVLIB = libmultipath.so - LIBS = $(DEVLIB).$(SONAME) - VERSION_SCRIPT := libmultipath.version - --CPPFLAGS += -I$(mpathutildir) -I$(mpathcmddir) -I$(nvmedir) -D_GNU_SOURCE -+CPPFLAGS += -I$(mpathutildir) -I$(mpathcmddir) -I$(nvmedir) -D_GNU_SOURCE $(SYSTEMD_CPPFLAGS) - CFLAGS += $(LIB_CFLAGS) - --LIBDEPS += -lpthread -ldl -ldevmapper -ludev -L$(mpathutildir) -lmpathutil -L$(mpathcmddir) -lmpathcmd -lurcu -laio -- --ifdef SYSTEMD -- CPPFLAGS += -DUSE_SYSTEMD=$(SYSTEMD) -- ifeq ($(shell test $(SYSTEMD) -gt 209 && echo 1), 1) -- LIBDEPS += -lsystemd -- else -- LIBDEPS += -lsystemd-daemon -- endif --endif -+LIBDEPS += -lpthread -ldl -ldevmapper -ludev -L$(mpathutildir) -lmpathutil -L$(mpathcmddir) -lmpathcmd \ -+ -lurcu -laio $(SYSTEMD_LIBDEPS) - - ifneq ($(call check_func,dm_task_no_flush,$(devmapper_incdir)/libdevmapper.h),0) - CPPFLAGS += -DLIBDM_API_FLUSH -diff --git a/multipathd/Makefile b/multipathd/Makefile -index 78aefee0..cdda371b 100644 ---- a/multipathd/Makefile -+++ b/multipathd/Makefile -@@ -18,14 +18,17 @@ endif - CPPFLAGS += -I$(multipathdir) -I$(mpathutildir) -I$(mpathpersistdir) -I$(mpathcmddir) -I$(thirdpartydir) \ - $(shell $(PKGCONFIG) --modversion liburcu 2>/dev/null | \ - awk -F. '{ printf("-DURCU_VERSION=0x%06x", 256 * ( 256 * $$1 + $$2) + $$3); }') \ -- -DBINDIR='"$(bindir)"' -+ -DBINDIR='"$(bindir)"' $(SYSTEMD_CPPFLAGS) -+ifeq ($(ENABLE_DMEVENTS_POLL),0) -+ CPPFLAGS += -DNO_DMEVENTS_POLL -+endif - CFLAGS += $(BIN_CFLAGS) - LDFLAGS += $(BIN_LDFLAGS) - --CLI_LIBDEPS := -L$(mpathutildir) -lmpathutil -L$(mpathcmddir) -lmpathcmd -ludev -ldl -lurcu -lpthread --LIBDEPS += -L$(multipathdir) -lmultipath -L$(mpathpersistdir) -lmpathpersist \ -- -ldevmapper $(CLI_LIBDEPS) -- -+CLI_LIBDEPS := -L$(mpathutildir) -lmpathutil -L$(mpathcmddir) -lmpathcmd \ -+ -ludev -ldl -lurcu -lpthread $(SYSTEMD_LIBDEPS) -+LIBDEPS := -L$(multipathdir) -lmultipath -L$(mpathpersistdir) -lmpathpersist \ -+ -ldevmapper $(CLI_LIBDEPS) - - ifeq ($(READLINE),libedit) - RL_CPPFLAGS = -DUSE_LIBEDIT -@@ -40,18 +43,6 @@ RL_CPPFLAGS += -DBROKEN_RL_COMPLETION_FUNC - endif - endif - --ifdef SYSTEMD -- CPPFLAGS += -DUSE_SYSTEMD=$(SYSTEMD) -- ifeq ($(shell test $(SYSTEMD) -gt 209 && echo 1), 1) -- CLI_LIBDEPS += -lsystemd -- else -- CLI_LIBDEPS += -lsystemd-daemon -- endif --endif --ifeq ($(ENABLE_DMEVENTS_POLL),0) -- CPPFLAGS += -DNO_DMEVENTS_POLL --endif -- - OBJS = main.o pidfile.o uxlsnr.o uxclnt.o cli.o cli_handlers.o waiter.o \ - dmevents.o init_unwinder.o - diff --git a/0037-RH-use-rpm-optflags-if-present.patch b/0015-RH-use-rpm-optflags-if-present.patch similarity index 78% rename from 0037-RH-use-rpm-optflags-if-present.patch rename to 0015-RH-use-rpm-optflags-if-present.patch index c844afe..6a7fdea 100644 --- a/0037-RH-use-rpm-optflags-if-present.patch +++ b/0015-RH-use-rpm-optflags-if-present.patch @@ -9,14 +9,14 @@ still being generic. Signed-off-by: Benjamin Marzinski --- - Makefile.inc | 24 ++++++++++++++++++------ - 1 file changed, 18 insertions(+), 6 deletions(-) + Makefile.inc | 22 +++++++++++++++++----- + 1 file changed, 17 insertions(+), 5 deletions(-) diff --git a/Makefile.inc b/Makefile.inc -index 8c5a08a2..e6e7f7d7 100644 +index 540e1dfc..748911e2 100644 --- a/Makefile.inc +++ b/Makefile.inc -@@ -74,19 +74,31 @@ INSTALL_PROGRAM := install +@@ -78,11 +78,23 @@ ORIG_LDFLAGS := $(LDFLAGS) SYSTEMD_CPPFLAGS := $(if $(SYSTEMD),-DUSE_SYSTEMD=$(SYSTEMD)) SYSTEMD_LIBDEPS := $(if $(SYSTEMD),$(if $(shell test $(SYSTEMD) -gt 209 && echo 1),-lsystemd,-lsystemd-daemon)) @@ -37,15 +37,14 @@ index 8c5a08a2..e6e7f7d7 100644 +endif +WARNFLAGS := -Werror -Wextra -Wformat=2 $(WFORMATOVERFLOW) -Werror=implicit-int \ -Werror=implicit-function-declaration -Werror=format-security \ -- $(WNOCLOBBERED) -Werror=cast-qual $(ERROR_DISCARDED_QUALIFIERS) --CPPFLAGS := $(FORTIFY_OPT) \ -- -DBIN_DIR=\"$(bindir)\" -DMULTIPATH_DIR=\"$(plugindir)\" \ -+ $(WNOCLOBBERED) -Werror=cast-qual \ -+ $(ERROR_DISCARDED_QUALIFIERS) -Wstrict-prototypes -+CPPFLAGS := -DBIN_DIR=\"$(bindir)\" -DMULTIPATH_DIR=\"$(plugindir)\" \ +- $(WNOCLOBBERED) -Werror=cast-qual $(ERROR_DISCARDED_QUALIFIERS) $(W_URCU_TYPE_LIMITS) +-CPPFLAGS := $(FORTIFY_OPT) $(CPPFLAGS) \ ++ $(WNOCLOBBERED) -Werror=cast-qual $(ERROR_DISCARDED_QUALIFIERS) $(W_URCU_TYPE_LIMITS) -Wstrict-prototypes ++CPPFLAGS := $(CPPFLAGS) \ + -DBIN_DIR=\"$(bindir)\" -DMULTIPATH_DIR=\"$(plugindir)\" \ -DRUNTIME_DIR=\"$(runtimedir)\" \ -DCONFIG_DIR=\"$(configdir)\" -DEXTRAVERSION=\"$(EXTRAVERSION)\" -MMD -MP - CFLAGS := --std=gnu99 $(CFLAGS) $(OPTFLAGS) $(WARNFLAGS) -pipe +@@ -90,7 +102,7 @@ CFLAGS := --std=gnu99 $(CFLAGS) $(OPTFLAGS) $(WARNFLAGS) -pipe BIN_CFLAGS := -fPIE -DPIE LIB_CFLAGS := -fPIC SHARED_FLAGS := -shared diff --git a/0015-multipathd-Makefile-fix-compilation-flags-for-libedi.patch b/0015-multipathd-Makefile-fix-compilation-flags-for-libedi.patch deleted file mode 100644 index 0013036..0000000 --- a/0015-multipathd-Makefile-fix-compilation-flags-for-libedi.patch +++ /dev/null @@ -1,54 +0,0 @@ -From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 -From: Martin Wilck -Date: Thu, 27 Oct 2022 18:51:52 +0200 -Subject: [PATCH] multipathd: Makefile: fix compilation flags for libedit - -The workaround for the wrong prototype in older libedit versions -had ended up in the code for libreadline. Fix it, and use simple -make variables. - -Fixes: 2bd80f6 ("multipathd: fix incompatible pointer type error with libedit") -Signed-off-by: Martin Wilck -Signed-off-by: Benjamin Marzinski ---- - multipathd/Makefile | 16 +++++++--------- - 1 file changed, 7 insertions(+), 9 deletions(-) - -diff --git a/multipathd/Makefile b/multipathd/Makefile -index cdda371b..7221b6af 100644 ---- a/multipathd/Makefile -+++ b/multipathd/Makefile -@@ -31,17 +31,17 @@ LIBDEPS := -L$(multipathdir) -lmultipath -L$(mpathpersistdir) -lmpathpersist \ - -ldevmapper $(CLI_LIBDEPS) - - ifeq ($(READLINE),libedit) --RL_CPPFLAGS = -DUSE_LIBEDIT --RL_LIBDEPS += -ledit --endif --ifeq ($(READLINE),libreadline) --RL_CPPFLAGS += -DUSE_LIBREADLINE --RL_LIBDEPS += -lreadline --# See comment in uxclnt.c -+RL_CPPFLAGS := -DUSE_LIBEDIT -+RL_LIBDEPS := -ledit -+# See comment in multipathc.c - ifeq ($(shell sed -En 's/.*\ -Date: Thu, 27 Oct 2022 21:59:36 +0200 -Subject: [PATCH] multipath-tools Makefiles: clean up executable Makefiles - -Move the EXEC definition to the top, and use simple make variables -where possible. - -Signed-off-by: Martin Wilck -Signed-off-by: Benjamin Marzinski ---- - kpartx/Makefile | 15 +++++++-------- - multipath/Makefile | 6 +++--- - multipathd/Makefile | 30 ++++++++++++++---------------- - 3 files changed, 24 insertions(+), 27 deletions(-) - -diff --git a/kpartx/Makefile b/kpartx/Makefile -index 464925ad..7ceae96b 100644 ---- a/kpartx/Makefile -+++ b/kpartx/Makefile -@@ -3,20 +3,19 @@ - # - include ../Makefile.inc - --CPPFLAGS += -I. -I$(multipathdir) -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 --CFLAGS += $(BIN_CFLAGS) --LDFLAGS += $(BIN_LDFLAGS) -- --LIBDEPS += -ldevmapper -+EXEC := kpartx - -+CPPFLAGS += -I. -I$(multipathdir) -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 - ifneq ($(call check_func,dm_task_set_cookie,$(devmapper_incdir)/libdevmapper.h),0) - CPPFLAGS += -DLIBDM_API_COOKIE - endif - --OBJS = bsd.o dos.o kpartx.o solaris.o unixware.o dasd.o sun.o \ -- gpt.o mac.o ps3.o crc32.o lopart.o xstrncpy.o devmapper.o -+CFLAGS += $(BIN_CFLAGS) -+LDFLAGS += $(BIN_LDFLAGS) -+LIBDEPS += -ldevmapper - --EXEC = kpartx -+OBJS := bsd.o dos.o kpartx.o solaris.o unixware.o dasd.o sun.o \ -+ gpt.o mac.o ps3.o crc32.o lopart.o xstrncpy.o devmapper.o - - all: $(EXEC) - -diff --git a/multipath/Makefile b/multipath/Makefile -index 1c4e7a52..7f7b341d 100644 ---- a/multipath/Makefile -+++ b/multipath/Makefile -@@ -3,15 +3,15 @@ - # - include ../Makefile.inc - -+EXEC := multipath -+ - CPPFLAGS += -I$(multipathdir) -I$(mpathutildir) -I$(mpathcmddir) - CFLAGS += $(BIN_CFLAGS) - LDFLAGS += $(BIN_LDFLAGS) - LIBDEPS += -L$(multipathdir) -lmultipath -L$(mpathutildir) -lmpathutil \ - -L$(mpathcmddir) -lmpathcmd -lpthread -ldevmapper -ldl -ludev - --EXEC = multipath -- --OBJS = main.o -+OBJS := main.o - - all: $(EXEC) multipath.rules tmpfiles.conf - -diff --git a/multipathd/Makefile b/multipathd/Makefile -index 7221b6af..bb8f7770 100644 ---- a/multipathd/Makefile -+++ b/multipathd/Makefile -@@ -1,27 +1,30 @@ - include ../Makefile.inc - -+EXEC := multipathd -+CLI := multipathc -+ -+CPPFLAGS += -I$(multipathdir) -I$(mpathutildir) -I$(mpathpersistdir) -I$(mpathcmddir) -I$(thirdpartydir) \ -+ $(shell $(PKGCONFIG) --modversion liburcu 2>/dev/null | \ -+ awk -F. '{ printf("-DURCU_VERSION=0x%06x", 256 * ( 256 * $$1 + $$2) + $$3); }') \ -+ -DBINDIR='"$(bindir)"' $(SYSTEMD_CPPFLAGS) -+ -+ifeq ($(ENABLE_DMEVENTS_POLL),0) -+ CPPFLAGS += -DNO_DMEVENTS_POLL -+endif - ifneq ($(call check_func,dm_task_get_errno,$(devmapper_incdir)/libdevmapper.h),0) - CPPFLAGS += -DLIBDM_API_GET_ERRNO - endif -- - ifneq ($(call check_var,ELS_DTAG_LNK_INTEGRITY,$(kernel_incdir)/scsi/fc/fc_els.h),0) - CPPFLAGS += -DFPIN_EVENT_HANDLER - FPIN_SUPPORT = 1 - endif -+ - # - # debugging stuff - # - #CPPFLAGS += -DLCKDBG --#CPPFLAGS += -D_DEBUG_ - #CPPFLAGS += -DLOGDBG - --CPPFLAGS += -I$(multipathdir) -I$(mpathutildir) -I$(mpathpersistdir) -I$(mpathcmddir) -I$(thirdpartydir) \ -- $(shell $(PKGCONFIG) --modversion liburcu 2>/dev/null | \ -- awk -F. '{ printf("-DURCU_VERSION=0x%06x", 256 * ( 256 * $$1 + $$2) + $$3); }') \ -- -DBINDIR='"$(bindir)"' $(SYSTEMD_CPPFLAGS) --ifeq ($(ENABLE_DMEVENTS_POLL),0) -- CPPFLAGS += -DNO_DMEVENTS_POLL --endif - CFLAGS += $(BIN_CFLAGS) - LDFLAGS += $(BIN_LDFLAGS) - -@@ -43,18 +46,13 @@ RL_CPPFLAGS := -DUSE_LIBREADLINE - RL_LIBDEPS := -lreadline - endif - --OBJS = main.o pidfile.o uxlsnr.o uxclnt.o cli.o cli_handlers.o waiter.o \ -+CLI_OBJS := multipathc.o cli.o -+OBJS := main.o pidfile.o uxlsnr.o uxclnt.o cli.o cli_handlers.o waiter.o \ - dmevents.o init_unwinder.o -- --CLI_OBJS = multipathc.o cli.o -- - ifeq ($(FPIN_SUPPORT),1) - OBJS += fpin_handlers.o - endif - --EXEC = multipathd --CLI = multipathc -- - all : $(EXEC) $(CLI) - - $(EXEC): $(OBJS) $(multipathdir)/libmultipath.so $(mpathcmddir)/libmpathcmd.so diff --git a/0039-RH-add-wwids-from-kernel-cmdline-mpath.wwids-with-A.patch b/0017-RH-add-wwids-from-kernel-cmdline-mpath.wwids-with-A.patch similarity index 100% rename from 0039-RH-add-wwids-from-kernel-cmdline-mpath.wwids-with-A.patch rename to 0017-RH-add-wwids-from-kernel-cmdline-mpath.wwids-with-A.patch diff --git a/0017-multipath-tools-Makefiles-use-common-code-for-librar.patch b/0017-multipath-tools-Makefiles-use-common-code-for-librar.patch deleted file mode 100644 index 0b45e62..0000000 --- a/0017-multipath-tools-Makefiles-use-common-code-for-librar.patch +++ /dev/null @@ -1,261 +0,0 @@ -From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 -From: Martin Wilck -Date: Thu, 27 Oct 2022 21:52:06 +0200 -Subject: [PATCH] multipath-tools: Makefiles: use common code for libraries - -Move shared code to Makefile.inc as far as possible. Use simple -make variables where possible. - -Signed-off-by: Martin Wilck -Signed-off-by: Benjamin Marzinski ---- - Makefile.inc | 15 ++++++++++++++- - libdmmp/Makefile | 17 ++++++++--------- - libmpathcmd/Makefile | 14 ++------------ - libmpathpersist/Makefile | 14 ++------------ - libmpathutil/Makefile | 14 +------------- - libmpathvalid/Makefile | 14 ++------------ - libmultipath/Makefile | 12 +----------- - 7 files changed, 30 insertions(+), 70 deletions(-) - -diff --git a/Makefile.inc b/Makefile.inc -index 2cf25745..fe6bc088 100644 ---- a/Makefile.inc -+++ b/Makefile.inc -@@ -64,7 +64,6 @@ GZIP_PROG := gzip -9 -c - RM := rm -f - LN := ln -sf - INSTALL_PROGRAM := install --NV_VERSION_SCRIPT = $(VERSION_SCRIPT:%.version=%-nv.version) - - # $(call TEST_CC_OPTION,option,fallback) - # Test if the C compiler supports the option. -@@ -127,6 +126,13 @@ thirdpartydir := $(TOPDIR)/third-party - libdmmpdir := $(TOPDIR)/libdmmp - nvmedir := $(TOPDIR)/libmultipath/nvme - -+# Common code for libraries - library Makefiles just set DEVLIB -+# SONAME defaults to 0 (we use version scripts) -+SONAME := 0 -+LIBS = $(DEVLIB).$(SONAME) -+VERSION_SCRIPT = $(DEVLIB:%.so=%.version) -+NV_VERSION_SCRIPT = $(DEVLIB:%.so=%-nv.version) -+ - # Check whether a function with name $1 has been declared in header file $2. - check_func = $(shell \ - if grep -Eq "^[^[:blank:]]+[[:blank:]]+$1[[:blank:]]*(.*)*" "$2"; then \ -@@ -175,3 +181,10 @@ check_var = $(shell \ - - %.abi: %.so - abidw $< >$@ -+ -+%-nv.version: %.version -+ @echo creating $@ from $< -+ @printf 'NOVERSION {\nglobal:\n' >$@ -+ @grep -P '^[ \t]+[a-zA-Z_][a-zA-Z0-9_]*;' $< >>$@ -+ @printf 'local:\n\t*;\n};\n' >>$@ -+ -diff --git a/libdmmp/Makefile b/libdmmp/Makefile -index 985b694b..67b6f86f 100644 ---- a/libdmmp/Makefile -+++ b/libdmmp/Makefile -@@ -5,15 +5,14 @@ - # - include ../Makefile.inc - --LIBDMMP_VERSION=0.2.0 --SONAME=$(LIBDMMP_VERSION) --DEVLIB = libdmmp.so --LIBS = $(DEVLIB).$(SONAME) --PKGFILE = libdmmp.pc --EXTRA_MAN_FILES = libdmmp.h.3 --HEADERS = libdmmp/libdmmp.h -- --OBJS = libdmmp.o libdmmp_mp.o libdmmp_pg.o libdmmp_path.o libdmmp_misc.o -+LIBDMMP_VERSION := 0.2.0 -+SONAME := $(LIBDMMP_VERSION) -+DEVLIB := libdmmp.so -+PKGFILE := libdmmp.pc -+EXTRA_MAN_FILES := libdmmp.h.3 -+HEADERS := libdmmp/libdmmp.h -+ -+OBJS := libdmmp.o libdmmp_mp.o libdmmp_pg.o libdmmp_path.o libdmmp_misc.o - - CPPFLAGS += -I$(libdmmpdir) -I$(mpathcmddir) $(shell $(PKGCONFIG) --cflags json-c) - CFLAGS += $(LIB_CFLAGS) -fvisibility=hidden -diff --git a/libmpathcmd/Makefile b/libmpathcmd/Makefile -index 0f83fe7b..f705c7f0 100644 ---- a/libmpathcmd/Makefile -+++ b/libmpathcmd/Makefile -@@ -1,13 +1,8 @@ - include ../Makefile.inc - --SONAME = 0 --DEVLIB = libmpathcmd.so --LIBS = $(DEVLIB).$(SONAME) --VERSION_SCRIPT := libmpathcmd.version -- -+DEVLIB := libmpathcmd.so - CFLAGS += $(LIB_CFLAGS) -- --OBJS = mpath_cmd.o -+OBJS := mpath_cmd.o - - all: $(DEVLIB) - -@@ -15,11 +10,6 @@ $(LIBS): $(OBJS) $(VERSION_SCRIPT) - $(CC) $(LDFLAGS) $(SHARED_FLAGS) -Wl,-soname=$@ \ - -Wl,--version-script=$(VERSION_SCRIPT) -o $@ $(OBJS) $(LIBDEPS) - --$(NV_VERSION_SCRIPT): $(VERSION_SCRIPT) -- @printf 'NOVERSION {\nglobal:\n' >$@ -- @grep -P '^[ \t]+[a-zA-Z_][a-zA-Z0-9_]*;' $< >>$@ -- @printf 'local:\n\t*;\n};\n' >>$@ -- - $(LIBS:%.so.$(SONAME)=%-nv.so): $(OBJS) $(NV_VERSION_SCRIPT) - $(CC) $(LDFLAGS) $(SHARED_FLAGS) -Wl,-soname=$@ \ - -Wl,--version-script=$(NV_VERSION_SCRIPT) -o $@ $(OBJS) $(LIBDEPS) -diff --git a/libmpathpersist/Makefile b/libmpathpersist/Makefile -index 479524d4..6f69168f 100644 ---- a/libmpathpersist/Makefile -+++ b/libmpathpersist/Makefile -@@ -1,16 +1,11 @@ - include ../Makefile.inc - --SONAME = 0 --DEVLIB = libmpathpersist.so --LIBS = $(DEVLIB).$(SONAME) --VERSION_SCRIPT:= libmpathpersist.version -- -+DEVLIB := libmpathpersist.so - CFLAGS += $(LIB_CFLAGS) -I$(multipathdir) -I$(mpathutildir) -I$(mpathpersistdir) -I$(mpathcmddir) - LDFLAGS += -L$(multipathdir) -L$(mpathutildir) -L$(mpathcmddir) -- - LIBDEPS += -lmultipath -lmpathutil -lmpathcmd -ldevmapper -lpthread -ldl - --OBJS = mpath_persist.o mpath_updatepr.o mpath_pr_ioctl.o mpath_persist_int.o -+OBJS := mpath_persist.o mpath_updatepr.o mpath_pr_ioctl.o mpath_persist_int.o - - all: $(DEVLIB) - -@@ -18,11 +13,6 @@ $(LIBS): $(OBJS) $(VERSION_SCRIPT) - $(CC) $(LDFLAGS) $(SHARED_FLAGS) -Wl,-soname=$@ \ - -Wl,--version-script=$(VERSION_SCRIPT) -o $@ $(OBJS) $(LIBDEPS) - --$(NV_VERSION_SCRIPT): $(VERSION_SCRIPT) -- @printf 'NOVERSION {\nglobal:\n' >$@ -- @grep -P '^[ \t]+[a-zA-Z_][a-zA-Z0-9_]*;' $< >>$@ -- @printf 'local:\n\t*;\n};\n' >>$@ -- - $(LIBS:%.so.$(SONAME)=%-nv.so): $(OBJS) $(NV_VERSION_SCRIPT) - $(CC) $(LDFLAGS) $(SHARED_FLAGS) -Wl,-soname=$@ \ - -Wl,--version-script=$(NV_VERSION_SCRIPT) -o $@ $(OBJS) $(LIBDEPS) -diff --git a/libmpathutil/Makefile b/libmpathutil/Makefile -index 4be75d2d..5665af28 100644 ---- a/libmpathutil/Makefile -+++ b/libmpathutil/Makefile -@@ -3,14 +3,9 @@ - # - include ../Makefile.inc - --SONAME = 0 --DEVLIB = libmpathutil.so --LIBS = $(DEVLIB).$(SONAME) --VERSION_SCRIPT := libmpathutil.version -- -+DEVLIB := libmpathutil.so - CPPFLAGS += -I. -I$(multipathdir) -I$(mpathcmddir) $(SYSTEMD_CPPFLAGS) - CFLAGS += $(LIB_CFLAGS) -D_GNU_SOURCE -- - LIBDEPS += -lpthread -ldl -ludev -L$(mpathcmddir) -lmpathcmd $(SYSTEMD_LIBDEPS) - - # object files referencing MULTIPATH_DIR or CONFIG_DIR -@@ -22,8 +17,6 @@ OBJS := parser.o vector.o util.o debug.o time-util.o \ - - all: $(DEVLIB) - --make_static = $(shell sed '/^static/!s/^\([a-z]\{1,\} \)/static \1/' <$1 >$2) -- - $(LIBS): $(OBJS) $(VERSION_SCRIPT) - $(CC) $(LDFLAGS) $(SHARED_FLAGS) -Wl,-soname=$@ \ - -Wl,--version-script=$(VERSION_SCRIPT) -o $@ $(OBJS) $(LIBDEPS) -@@ -31,11 +24,6 @@ $(LIBS): $(OBJS) $(VERSION_SCRIPT) - $(DEVLIB): $(LIBS) - $(LN) $(LIBS) $@ - --$(NV_VERSION_SCRIPT): $(VERSION_SCRIPT) -- @printf 'NOVERSION {\nglobal:\n' >$@ -- @grep -P '^[ \t]+[a-zA-Z_][a-zA-Z0-9_]*;' $< >>$@ -- @printf 'local:\n\t*;\n};\n' >>$@ -- - $(LIBS:%.so.$(SONAME)=%-nv.so): $(OBJS) $(NV_VERSION_SCRIPT) - $(CC) $(LDFLAGS) $(SHARED_FLAGS) -Wl,-soname=$@ \ - -Wl,--version-script=$(NV_VERSION_SCRIPT) -o $@ $(OBJS) $(LIBDEPS) -diff --git a/libmpathvalid/Makefile b/libmpathvalid/Makefile -index 5dbfb923..bd4ccc0d 100644 ---- a/libmpathvalid/Makefile -+++ b/libmpathvalid/Makefile -@@ -1,17 +1,12 @@ - include ../Makefile.inc - --SONAME = 0 --DEVLIB = libmpathvalid.so --LIBS = $(DEVLIB).$(SONAME) --VERSION_SCRIPT := libmpathvalid.version -- -+DEVLIB := libmpathvalid.so - CPPFLAGS += -I$(multipathdir) -I$(mpathutildir) -I$(mpathcmddir) - CFLAGS += $(LIB_CFLAGS) -- - LIBDEPS += -lpthread -ldevmapper -ldl -L$(multipathdir) -lmultipath \ - -L$(mpathutildir) -lmpathutil -L$(mpathcmddir) -lmpathcmd -ludev - --OBJS = mpath_valid.o -+OBJS := mpath_valid.o - - all: $(LIBS) - -@@ -20,11 +15,6 @@ $(LIBS): $(OBJS) $(VERSION_SCRIPT) - -Wl,--version-script=$(VERSION_SCRIPT) - $(LN) $(LIBS) $(DEVLIB) - --$(NV_VERSION_SCRIPT): $(VERSION_SCRIPT) -- @printf 'NOVERSION {\nglobal:\n' >$@ -- @grep -P '^[ \t]+[a-zA-Z_][a-zA-Z0-9_]*;' $< >>$@ -- @printf 'local:\n\t*;\n};\n' >>$@ -- - $(LIBS:%.so.$(SONAME)=%-nv.so): $(OBJS) $(NV_VERSION_SCRIPT) - $(CC) $(LDFLAGS) $(SHARED_FLAGS) -Wl,-soname=$@ \ - -Wl,--version-script=$(NV_VERSION_SCRIPT) -o $@ $(OBJS) $(LIBDEPS) -diff --git a/libmultipath/Makefile b/libmultipath/Makefile -index 009f26a3..9dc229ae 100644 ---- a/libmultipath/Makefile -+++ b/libmultipath/Makefile -@@ -3,14 +3,9 @@ - # - include ../Makefile.inc - --SONAME = 0 --DEVLIB = libmultipath.so --LIBS = $(DEVLIB).$(SONAME) --VERSION_SCRIPT := libmultipath.version -- -+DEVLIB := libmultipath.so - CPPFLAGS += -I$(mpathutildir) -I$(mpathcmddir) -I$(nvmedir) -D_GNU_SOURCE $(SYSTEMD_CPPFLAGS) - CFLAGS += $(LIB_CFLAGS) -- - LIBDEPS += -lpthread -ldl -ldevmapper -ludev -L$(mpathutildir) -lmpathutil -L$(mpathcmddir) -lmpathcmd \ - -lurcu -laio $(SYSTEMD_LIBDEPS) - -@@ -85,11 +80,6 @@ $(LIBS): $(OBJS) $(VERSION_SCRIPT) - $(DEVLIB): $(LIBS) - $(LN) $(LIBS) $@ - --$(NV_VERSION_SCRIPT): $(VERSION_SCRIPT) -- @printf 'NOVERSION {\nglobal:\n' >$@ -- @grep -P '^[ \t]+[a-zA-Z_][a-zA-Z0-9_]*;' $< >>$@ -- @printf 'local:\n\t*;\n};\n' >>$@ -- - $(LIBS:%.so.$(SONAME)=%-nv.so): $(OBJS) $(NV_VERSION_SCRIPT) - $(CC) $(LDFLAGS) $(SHARED_FLAGS) -Wl,-soname=$@ \ - -Wl,--version-script=$(NV_VERSION_SCRIPT) -o $@ $(OBJS) $(LIBDEPS) diff --git a/0040-RH-reset-default-find_mutipaths-value-to-off.patch b/0018-RH-reset-default-find_mutipaths-value-to-off.patch similarity index 100% rename from 0040-RH-reset-default-find_mutipaths-value-to-off.patch rename to 0018-RH-reset-default-find_mutipaths-value-to-off.patch diff --git a/0018-multipath-tools-Makefiles-move-common-code-to-rules..patch b/0018-multipath-tools-Makefiles-move-common-code-to-rules..patch deleted file mode 100644 index 1a2069f..0000000 --- a/0018-multipath-tools-Makefiles-move-common-code-to-rules..patch +++ /dev/null @@ -1,172 +0,0 @@ -From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 -From: Martin Wilck -Date: Thu, 27 Oct 2022 22:18:22 +0200 -Subject: [PATCH] multipath-tools: Makefiles: move common code to rules.mk - -The library Makefiles contain a lot of similar rules. Just -maintain them in a single file. - -Signed-off-by: Martin Wilck -Signed-off-by: Benjamin Marzinski ---- - libmpathcmd/Makefile | 13 +------------ - libmpathpersist/Makefile | 13 +------------ - libmpathutil/Makefile | 13 +------------ - libmpathvalid/Makefile | 13 ++----------- - libmultipath/Makefile | 16 ++-------------- - rules.mk | 15 +++++++++++++++ - 6 files changed, 22 insertions(+), 61 deletions(-) - create mode 100644 rules.mk - -diff --git a/libmpathcmd/Makefile b/libmpathcmd/Makefile -index f705c7f0..cfb202b8 100644 ---- a/libmpathcmd/Makefile -+++ b/libmpathcmd/Makefile -@@ -6,18 +6,7 @@ OBJS := mpath_cmd.o - - all: $(DEVLIB) - --$(LIBS): $(OBJS) $(VERSION_SCRIPT) -- $(CC) $(LDFLAGS) $(SHARED_FLAGS) -Wl,-soname=$@ \ -- -Wl,--version-script=$(VERSION_SCRIPT) -o $@ $(OBJS) $(LIBDEPS) -- --$(LIBS:%.so.$(SONAME)=%-nv.so): $(OBJS) $(NV_VERSION_SCRIPT) -- $(CC) $(LDFLAGS) $(SHARED_FLAGS) -Wl,-soname=$@ \ -- -Wl,--version-script=$(NV_VERSION_SCRIPT) -o $@ $(OBJS) $(LIBDEPS) -- --abi: $(LIBS:%.so.$(SONAME)=%-nv.abi) -- --$(DEVLIB): $(LIBS) -- $(LN) $(LIBS) $@ -+include $(TOPDIR)/rules.mk - - install: all - $(INSTALL_PROGRAM) -d $(DESTDIR)$(syslibdir) -diff --git a/libmpathpersist/Makefile b/libmpathpersist/Makefile -index 6f69168f..94672556 100644 ---- a/libmpathpersist/Makefile -+++ b/libmpathpersist/Makefile -@@ -9,18 +9,7 @@ OBJS := mpath_persist.o mpath_updatepr.o mpath_pr_ioctl.o mpath_persist_int.o - - all: $(DEVLIB) - --$(LIBS): $(OBJS) $(VERSION_SCRIPT) -- $(CC) $(LDFLAGS) $(SHARED_FLAGS) -Wl,-soname=$@ \ -- -Wl,--version-script=$(VERSION_SCRIPT) -o $@ $(OBJS) $(LIBDEPS) -- --$(LIBS:%.so.$(SONAME)=%-nv.so): $(OBJS) $(NV_VERSION_SCRIPT) -- $(CC) $(LDFLAGS) $(SHARED_FLAGS) -Wl,-soname=$@ \ -- -Wl,--version-script=$(NV_VERSION_SCRIPT) -o $@ $(OBJS) $(LIBDEPS) -- --abi: $(LIBS:%.so.$(SONAME)=%-nv.abi) -- --$(DEVLIB): $(LIBS) -- $(LN) $(LIBS) $@ -+include $(TOPDIR)/rules.mk - - install: all - $(INSTALL_PROGRAM) -d $(DESTDIR)$(syslibdir) -diff --git a/libmpathutil/Makefile b/libmpathutil/Makefile -index 5665af28..5ab33c09 100644 ---- a/libmpathutil/Makefile -+++ b/libmpathutil/Makefile -@@ -17,18 +17,7 @@ OBJS := parser.o vector.o util.o debug.o time-util.o \ - - all: $(DEVLIB) - --$(LIBS): $(OBJS) $(VERSION_SCRIPT) -- $(CC) $(LDFLAGS) $(SHARED_FLAGS) -Wl,-soname=$@ \ -- -Wl,--version-script=$(VERSION_SCRIPT) -o $@ $(OBJS) $(LIBDEPS) -- --$(DEVLIB): $(LIBS) -- $(LN) $(LIBS) $@ -- --$(LIBS:%.so.$(SONAME)=%-nv.so): $(OBJS) $(NV_VERSION_SCRIPT) -- $(CC) $(LDFLAGS) $(SHARED_FLAGS) -Wl,-soname=$@ \ -- -Wl,--version-script=$(NV_VERSION_SCRIPT) -o $@ $(OBJS) $(LIBDEPS) -- --abi: $(LIBS:%.so.$(SONAME)=%-nv.abi) -+include $(TOPDIR)/rules.mk - - install: all - $(INSTALL_PROGRAM) -d $(DESTDIR)$(syslibdir) -diff --git a/libmpathvalid/Makefile b/libmpathvalid/Makefile -index bd4ccc0d..88034df3 100644 ---- a/libmpathvalid/Makefile -+++ b/libmpathvalid/Makefile -@@ -8,18 +8,9 @@ LIBDEPS += -lpthread -ldevmapper -ldl -L$(multipathdir) -lmultipath \ - - OBJS := mpath_valid.o - --all: $(LIBS) -+all: $(DEVLIB) - --$(LIBS): $(OBJS) $(VERSION_SCRIPT) -- $(CC) $(LDFLAGS) $(SHARED_FLAGS) -Wl,-soname=$@ -o $@ $(OBJS) $(LIBDEPS) \ -- -Wl,--version-script=$(VERSION_SCRIPT) -- $(LN) $(LIBS) $(DEVLIB) -- --$(LIBS:%.so.$(SONAME)=%-nv.so): $(OBJS) $(NV_VERSION_SCRIPT) -- $(CC) $(LDFLAGS) $(SHARED_FLAGS) -Wl,-soname=$@ \ -- -Wl,--version-script=$(NV_VERSION_SCRIPT) -o $@ $(OBJS) $(LIBDEPS) -- --abi: $(LIBS:%.so.$(SONAME)=%-nv.abi) -+include $(TOPDIR)/rules.mk - - install: $(LIBS) - $(INSTALL_PROGRAM) -m 755 -d $(DESTDIR)$(syslibdir) -diff --git a/libmultipath/Makefile b/libmultipath/Makefile -index 9dc229ae..e24eab8a 100644 ---- a/libmultipath/Makefile -+++ b/libmultipath/Makefile -@@ -56,6 +56,8 @@ OBJS := $(OBJS-O) $(OBJS-U) - - all: $(DEVLIB) - -+include $(TOPDIR)/rules.mk -+ - nvme-lib.o: nvme-lib.c nvme-ioctl.c nvme-ioctl.h - $(CC) $(CPPFLAGS) $(CFLAGS) -Wno-unused-function -c -o $@ $< - -@@ -72,20 +74,6 @@ nvme-ioctl.c: nvme/nvme-ioctl.c - nvme-ioctl.h: nvme/nvme-ioctl.h - $(call make_static,$<,$@) - -- --$(LIBS): $(OBJS) $(VERSION_SCRIPT) -- $(CC) $(LDFLAGS) $(SHARED_FLAGS) -Wl,-soname=$@ \ -- -Wl,--version-script=$(VERSION_SCRIPT) -o $@ $(OBJS) $(LIBDEPS) -- --$(DEVLIB): $(LIBS) -- $(LN) $(LIBS) $@ -- --$(LIBS:%.so.$(SONAME)=%-nv.so): $(OBJS) $(NV_VERSION_SCRIPT) -- $(CC) $(LDFLAGS) $(SHARED_FLAGS) -Wl,-soname=$@ \ -- -Wl,--version-script=$(NV_VERSION_SCRIPT) -o $@ $(OBJS) $(LIBDEPS) -- --abi: $(LIBS:%.so.$(SONAME)=%-nv.abi) -- - ../tests/$(LIBS): $(OBJS-O) $(OBJS-T) $(VERSION_SCRIPT) - $(CC) $(LDFLAGS) $(SHARED_FLAGS) -Wl,-soname=`basename $@` \ - -o $@ $(OBJS-O) $(OBJS-T) $(LIBDEPS) -diff --git a/rules.mk b/rules.mk -new file mode 100644 -index 00000000..c1d80820 ---- /dev/null -+++ b/rules.mk -@@ -0,0 +1,15 @@ -+# Copyright (c) SUSE LLC -+# SPDX-License-Identifier: GPL-2.0-or-later -+ -+$(DEVLIB): $(LIBS) -+ $(LN) $(LIBS) $@ -+ -+$(LIBS): $(OBJS) $(VERSION_SCRIPT) -+ $(CC) $(LDFLAGS) $(SHARED_FLAGS) -Wl,-soname=$@ \ -+ -Wl,--version-script=$(VERSION_SCRIPT) -o $@ $(OBJS) $(LIBDEPS) -+ -+$(LIBS:%.so.$(SONAME)=%-nv.so): $(OBJS) $(NV_VERSION_SCRIPT) -+ $(CC) $(LDFLAGS) $(SHARED_FLAGS) -Wl,-soname=$@ \ -+ -Wl,--version-script=$(NV_VERSION_SCRIPT) -o $@ $(OBJS) $(LIBDEPS) -+ -+abi: $(LIBS:%.so.$(SONAME)=%-nv.abi) diff --git a/0041-RH-attempt-to-get-ANA-info-via-sysfs-first.patch b/0019-RH-attempt-to-get-ANA-info-via-sysfs-first.patch similarity index 100% rename from 0041-RH-attempt-to-get-ANA-info-via-sysfs-first.patch rename to 0019-RH-attempt-to-get-ANA-info-via-sysfs-first.patch diff --git a/0019-multipath-tools-Makefiles-create-config.mk.patch b/0019-multipath-tools-Makefiles-create-config.mk.patch deleted file mode 100644 index 4d403d0..0000000 --- a/0019-multipath-tools-Makefiles-create-config.mk.patch +++ /dev/null @@ -1,603 +0,0 @@ -From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 -From: Martin Wilck -Date: Fri, 28 Oct 2022 00:01:46 +0200 -Subject: [PATCH] multipath-tools Makefiles: create config.mk - -Rather than running the test scripts for certain system features -every time "make" is called, save the configuration in "config.mk" -and "libmultipath/autoconfig.h", and reuse it later. This reduces -build time, especially in subsequent builds, and the build output is -less garbled by compiler options. - -It works by invoking the separate make file "create-config.mk" at -the beginning of the build process. Most of the complex makefile -functions are moved to "create-config.mk". - -Signed-off-by: Martin Wilck -Signed-off-by: Benjamin Marzinski ---- - .github/workflows/foreign.yaml | 2 +- - .gitignore | 2 + - Makefile | 19 +++- - Makefile.inc | 76 +-------------- - create-config.mk | 144 +++++++++++++++++++++++++++++ - kpartx/Makefile | 4 - - kpartx/devmapper.c | 1 + - kpartx/kpartx.c | 1 + - libdmmp/test/Makefile | 1 + - libmultipath/Makefile | 30 +----- - libmultipath/devmapper.h | 2 +- - libmultipath/dict.c | 1 + - libmultipath/prioritizers/Makefile | 2 +- - libmultipath/propsel.c | 1 + - libmultipath/uevent.c | 1 + - multipathd/Makefile | 11 --- - multipathd/fpin.h | 1 + - multipathd/main.c | 1 + - rules.mk | 3 + - tests/Makefile | 8 -- - 20 files changed, 179 insertions(+), 132 deletions(-) - create mode 100644 create-config.mk - -diff --git a/.github/workflows/foreign.yaml b/.github/workflows/foreign.yaml -index bd4e9c12..5a19913a 100644 ---- a/.github/workflows/foreign.yaml -+++ b/.github/workflows/foreign.yaml -@@ -30,7 +30,7 @@ jobs: - if: ${{ matrix.arch != '' && matrix.arch != '-i386' }} - run: > - tar cfv binaries.tar -- Makefile* -+ Makefile* config.mk - libmpathcmd/*.so* libmultipath/*.so* libmpathutil/*.so* - libmultipath/checkers/*.so libmultipath/prioritizers/*.so - libmultipath/foreign/*.so -diff --git a/.gitignore b/.gitignore -index 83f8a552..535353e5 100644 ---- a/.gitignore -+++ b/.gitignore -@@ -8,6 +8,7 @@ - *.gz - *.d - \#* -+config.mk - cscope.files - cscope.out - kpartx/kpartx -@@ -35,5 +36,6 @@ tests/*.out - tests/*.vgr - libmultipath/nvme-ioctl.c - libmultipath/nvme-ioctl.h -+libmultipath/autoconfig.h - */*-nv.version - reference-abi -diff --git a/Makefile b/Makefile -index 27b4641f..1b28db62 100644 ---- a/Makefile -+++ b/Makefile -@@ -30,7 +30,14 @@ BUILDDIRS.clean := $(BUILDDIRS:=.clean) tests.clean - - all: $(BUILDDIRS) - --$(BUILDDIRS): -+config.mk libmultipath/autoconfig.h: -+ @$(MAKE) -f create-config.mk -+ @echo ==== config.mk ==== -+ @cat config.mk -+ @echo ==== autoconfig.h ==== -+ @cat libmultipath/autoconfig.h -+ -+$(BUILDDIRS): config.mk - $(MAKE) -C $@ - - $(LIB_BUILDDIRS:=.abi): $(LIB_BUILDDIRS) -@@ -83,7 +90,7 @@ libmultipath/checkers.install \ - libmultipath/prioritizers.install \ - libmultipath/foreign.install: libmultipath.install - --$(BUILDDIRS.clean): -+%.clean: - $(MAKE) -C ${@:.clean=} clean - - %.install: % -@@ -92,8 +99,12 @@ $(BUILDDIRS.clean): - $(BUILDDIRS:=.uninstall): - $(MAKE) -C ${@:.uninstall=} uninstall - --clean: $(BUILDDIRS.clean) -- rm -rf abi abi.tar.gz abi-test compile_commands.json -+# If config.mk is missing, "make clean" in subdir either fails, or tries to -+# build it. Both is undesirable. Avoid it by creating config.mk temporarily. -+clean: -+ @touch config.mk -+ $(MAKE) $(BUILDDIRS:=.clean) tests.clean || true -+ rm -rf abi abi.tar.gz abi-test compile_commands.json config.mk - - install: $(BUILDDIRS:=.install) - uninstall: $(BUILDDIRS:=.uninstall) -diff --git a/Makefile.inc b/Makefile.inc -index fe6bc088..415634f5 100644 ---- a/Makefile.inc -+++ b/Makefile.inc -@@ -27,9 +27,9 @@ PKGCONFIG ?= pkg-config - ifeq ($(TOPDIR),) - TOPDIR = .. - endif -- --SYSTEMD := $(strip $(or $(shell $(PKGCONFIG) --modversion libsystemd 2>/dev/null | awk '{print $$1}'), \ -- $(shell systemctl --version 2>/dev/null | sed -n 's/systemd \([0-9]*\).*/\1/p'))) -+ifneq ($(CREATE_CONFIG),1) -+include $(TOPDIR)/config.mk -+endif - - # Paths. All these can be overridden on the "make" command line. - prefix := -@@ -65,37 +65,6 @@ RM := rm -f - LN := ln -sf - INSTALL_PROGRAM := install - --# $(call TEST_CC_OPTION,option,fallback) --# Test if the C compiler supports the option. --# Evaluates to "option" if yes, and "fallback" otherwise. --TEST_CC_OPTION = $(shell \ -- if echo 'int main(void){return 0;}' | \ -- $(CC) -o /dev/null -c -Werror "$(1)" -xc - >/dev/null 2>&1; \ -- then \ -- echo "$(1)"; \ -- else \ -- echo "$(2)"; \ -- fi) -- --# "make" on some distros will fail on explicit '#' or '\#' in the program text below --__HASH__ := \# --# Check if _DFORTIFY_SOURCE=3 is supported. --# On some distros (e.g. Debian Buster) it will be falsely reported as supported --# but it doesn't seem to make a difference wrt the compilation result. --FORTIFY_OPT := $(shell \ -- if /bin/echo -e '$(__HASH__)include \nint main(void) { return 0; }' | \ -- $(CC) -o /dev/null -c -O2 -Werror -D_FORTIFY_SOURCE=3 -xc - 2>/dev/null; \ -- then \ -- echo "-D_FORTIFY_SOURCE=3"; \ -- else \ -- echo "-D_FORTIFY_SOURCE=2"; \ -- fi) -- --STACKPROT := $(call TEST_CC_OPTION,-fstack-protector-strong,-fstack-protector) --ERROR_DISCARDED_QUALIFIERS := $(call TEST_CC_OPTION,-Werror=discarded-qualifiers,) --WNOCLOBBERED := $(call TEST_CC_OPTION,-Wno-clobbered -Wno-error=clobbered,) --WFORMATOVERFLOW := $(call TEST_CC_OPTION,-Wformat-overflow=2,) -- - SYSTEMD_CPPFLAGS := $(if $(SYSTEMD),-DUSE_SYSTEMD=$(SYSTEMD)) - SYSTEMD_LIBDEPS := $(if $(SYSTEMD),$(if $(shell test $(SYSTEMD) -gt 209 && echo 1),-lsystemd,-lsystemd-daemon)) - -@@ -133,45 +102,6 @@ LIBS = $(DEVLIB).$(SONAME) - VERSION_SCRIPT = $(DEVLIB:%.so=%.version) - NV_VERSION_SCRIPT = $(DEVLIB:%.so=%-nv.version) - --# Check whether a function with name $1 has been declared in header file $2. --check_func = $(shell \ -- if grep -Eq "^[^[:blank:]]+[[:blank:]]+$1[[:blank:]]*(.*)*" "$2"; then \ -- found=1; \ -- status="yes"; \ -- else \ -- found=0; \ -- status="no"; \ -- fi; \ -- echo 1>&2 "Checking for $1 in $2 ... $$status"; \ -- echo "$$found" \ -- ) -- --# Checker whether a file with name $1 exists --check_file = $(shell \ -- if [ -f "$1" ]; then \ -- found=1; \ -- status="yes"; \ -- else \ -- found=0; \ -- status="no"; \ -- fi; \ -- echo 1>&2 "Checking if $1 exists ... $$status"; \ -- echo "$$found" \ -- ) -- --# Check whether a file contains a variable with name $1 in header file $2 --check_var = $(shell \ -- if grep -Eq "(^|[[:blank:]])$1([[:blank:]]|=|$$)" "$2"; then \ -- found=1; \ -- status="yes"; \ -- else \ -- found=0; \ -- status="no"; \ -- fi; \ -- echo 1>&2 "Checking for $1 in $2 ... $$status"; \ -- echo "$$found" \ -- ) -- - %.o: %.c - @echo building $@ because of $? - $(CC) $(CPPFLAGS) $(CFLAGS) -c -o $@ $< -diff --git a/create-config.mk b/create-config.mk -new file mode 100644 -index 00000000..2cc5284f ---- /dev/null -+++ b/create-config.mk -@@ -0,0 +1,144 @@ -+# Copyright (c) SUSE LLC -+# SPDX-License-Identifier: GPL-2.0-or-later -+ -+TOPDIR := . -+CREATE_CONFIG := 1 -+include $(TOPDIR)/Makefile.inc -+ -+# Check whether a function with name $1 has been declared in header file $2. -+check_func = $(shell \ -+ if grep -Eq "^[^[:blank:]]+[[:blank:]]+$1[[:blank:]]*(.*)*" "$2"; then \ -+ found=1; \ -+ status="yes"; \ -+ else \ -+ found=0; \ -+ status="no"; \ -+ fi; \ -+ echo 1>&2 "Checking for $1 in $2 ... $$status"; \ -+ echo "$$found" \ -+ ) -+ -+# Checker whether a file with name $1 exists -+check_file = $(shell \ -+ if [ -f "$1" ]; then \ -+ found=1; \ -+ status="yes"; \ -+ else \ -+ found=0; \ -+ status="no"; \ -+ fi; \ -+ echo 1>&2 "Checking if $1 exists ... $$status"; \ -+ echo "$$found" \ -+ ) -+ -+# Check whether a file contains a variable with name $1 in header file $2 -+check_var = $(shell \ -+ if grep -Eq "(^|[[:blank:]])$1([[:blank:]]|=|$$)" "$2"; then \ -+ found=1; \ -+ status="yes"; \ -+ else \ -+ found=0; \ -+ status="no"; \ -+ fi; \ -+ echo 1>&2 "Checking for $1 in $2 ... $$status"; \ -+ echo "$$found" \ -+ ) -+ -+# Test special behavior of gcc 4.8 with nested initializers -+# gcc 4.8 compiles blacklist.c only with -Wno-missing-field-initializers -+TEST_MISSING_INITIALIZERS = $(shell \ -+ echo 'struct A {int a, b;}; struct B {struct A a; int b;} b = {.a.a=1};' | \ -+ $(CC) -c -Werror -Wmissing-field-initializers -o /dev/null -xc - >/dev/null 2>&1 \ -+ || echo -Wno-missing-field-initializers) -+ -+DEFINES := -+ -+ifneq ($(call check_func,dm_task_no_flush,$(devmapper_incdir)/libdevmapper.h),0) -+ DEFINES += LIBDM_API_FLUSH -+endif -+ -+ifneq ($(call check_func,dm_task_get_errno,$(devmapper_incdir)/libdevmapper.h),0) -+ DEFINES += LIBDM_API_GET_ERRNO -+endif -+ -+ifneq ($(call check_func,dm_task_set_cookie,$(devmapper_incdir)/libdevmapper.h),0) -+ DEFINES += LIBDM_API_COOKIE -+endif -+ -+ifneq ($(call check_func,udev_monitor_set_receive_buffer_size,$(libudev_incdir)/libudev.h),0) -+ DEFINES += LIBUDEV_API_RECVBUF -+endif -+ -+ifneq ($(call check_func,dm_task_deferred_remove,$(devmapper_incdir)/libdevmapper.h),0) -+ DEFINES += LIBDM_API_DEFERRED -+endif -+ -+ifneq ($(call check_func,dm_hold_control_dev,$(devmapper_incdir)/libdevmapper.h),0) -+ DEFINES += LIBDM_API_HOLD_CONTROL -+endif -+ -+ifneq ($(call check_var,ELS_DTAG_LNK_INTEGRITY,$(kernel_incdir)/scsi/fc/fc_els.h),0) -+ DEFINES += FPIN_EVENT_HANDLER -+ FPIN_SUPPORT = 1 -+endif -+ -+ifneq ($(call check_file,$(kernel_incdir)/linux/nvme_ioctl.h),0) -+ ANA_SUPPORT := 1 -+endif -+ -+ifeq ($(ENABLE_DMEVENTS_POLL),0) -+ DEFINES += -DNO_DMEVENTS_POLL -+endif -+ -+SYSTEMD := $(strip $(or $(shell $(PKGCONFIG) --modversion libsystemd 2>/dev/null | awk '{print $$1}'), \ -+ $(shell systemctl --version 2>/dev/null | sed -n 's/systemd \([0-9]*\).*/\1/p'))) -+ -+ -+# $(call TEST_CC_OPTION,option,fallback) -+# Test if the C compiler supports the option. -+# Evaluates to "option" if yes, and "fallback" otherwise. -+TEST_CC_OPTION = $(shell \ -+ if echo 'int main(void){return 0;}' | \ -+ $(CC) -o /dev/null -c -Werror "$(1)" -xc - >/dev/null 2>&1; \ -+ then \ -+ echo "$(1)"; \ -+ else \ -+ echo "$(2)"; \ -+ fi) -+ -+# "make" on some distros will fail on explicit '#' or '\#' in the program text below -+__HASH__ := \# -+# Check if _DFORTIFY_SOURCE=3 is supported. -+# On some distros (e.g. Debian Buster) it will be falsely reported as supported -+# but it doesn't seem to make a difference wrt the compilation result. -+FORTIFY_OPT := $(shell \ -+ if /bin/echo -e '$(__HASH__)include \nint main(void) { return 0; }' | \ -+ $(CC) -o /dev/null -c -O2 -Werror -D_FORTIFY_SOURCE=3 -xc - 2>/dev/null; \ -+ then \ -+ echo "-D_FORTIFY_SOURCE=3"; \ -+ else \ -+ echo "-D_FORTIFY_SOURCE=2"; \ -+ fi) -+ -+STACKPROT := -+ -+all: $(multipathdir)/autoconfig.h $(TOPDIR)/config.mk -+ -+$(multipathdir)/autoconfig.h: -+ @echo creating $@ -+ @echo '#ifndef _AUTOCONFIG_H' >$@ -+ @echo '#define _AUTOCONFIG_H' >>$@ -+ @for x in $(DEFINES); do echo "#define $$x" >>$@; done -+ @echo '#endif' >>$@ -+ -+$(TOPDIR)/config.mk: -+ @echo creating $@ -+ @echo "FPIN_SUPPORT := $(FPIN_SUPPORT)" >$@ -+ @echo "FORTIFY_OPT := $(FORTIFY_OPT)" >>$@ -+ @echo "SYSTEMD := $(SYSTEMD)" >>$@ -+ @echo "ANA_SUPPORT := $(ANA_SUPPORT)" >>$@ -+ @echo "STACKPROT := $(call TEST_CC_OPTION,-fstack-protector-strong,-fstack-protector)" >>$@ -+ @echo "ERROR_DISCARDED_QUALIFIERS := $(call TEST_CC_OPTION,-Werror=discarded-qualifiers,)" >>$@ -+ @echo "WNOCLOBBERED := $(call TEST_CC_OPTION,-Wno-clobbered -Wno-error=clobbered,)" >>$@ -+ @echo "WFORMATOVERFLOW := $(call TEST_CC_OPTION,-Wformat-overflow=2,)" >>$@ -+ @echo "W_MISSING_INITIALIZERS := $(call TEST_MISSING_INITIALIZERS)" >>$@ -diff --git a/kpartx/Makefile b/kpartx/Makefile -index 7ceae96b..31b1138a 100644 ---- a/kpartx/Makefile -+++ b/kpartx/Makefile -@@ -6,10 +6,6 @@ include ../Makefile.inc - EXEC := kpartx - - CPPFLAGS += -I. -I$(multipathdir) -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 --ifneq ($(call check_func,dm_task_set_cookie,$(devmapper_incdir)/libdevmapper.h),0) -- CPPFLAGS += -DLIBDM_API_COOKIE --endif -- - CFLAGS += $(BIN_CFLAGS) - LDFLAGS += $(BIN_LDFLAGS) - LIBDEPS += -ldevmapper -diff --git a/kpartx/devmapper.c b/kpartx/devmapper.c -index bf14c784..f12762c5 100644 ---- a/kpartx/devmapper.c -+++ b/kpartx/devmapper.c -@@ -9,6 +9,7 @@ - #include - #include - #include -+#include "autoconfig.h" - #include "devmapper.h" - #include "kpartx.h" - -diff --git a/kpartx/kpartx.c b/kpartx/kpartx.c -index 1d568c9e..46cb76ba 100644 ---- a/kpartx/kpartx.c -+++ b/kpartx/kpartx.c -@@ -34,6 +34,7 @@ - #include - #include - -+#include "autoconfig.h" - #include "devmapper.h" - #include "crc32.h" - #include "lopart.h" -diff --git a/libdmmp/test/Makefile b/libdmmp/test/Makefile -index 76b24d61..93de64a0 100644 ---- a/libdmmp/test/Makefile -+++ b/libdmmp/test/Makefile -@@ -2,6 +2,7 @@ - # - # Copyright (C) 2015-2016 Gris Ge - # -+TOPDIR := ../.. - include ../../Makefile.inc - - _libdmmpdir=../$(libdmmpdir) -diff --git a/libmultipath/Makefile b/libmultipath/Makefile -index e24eab8a..1cc13577 100644 ---- a/libmultipath/Makefile -+++ b/libmultipath/Makefile -@@ -9,34 +9,6 @@ CFLAGS += $(LIB_CFLAGS) - LIBDEPS += -lpthread -ldl -ldevmapper -ludev -L$(mpathutildir) -lmpathutil -L$(mpathcmddir) -lmpathcmd \ - -lurcu -laio $(SYSTEMD_LIBDEPS) - --ifneq ($(call check_func,dm_task_no_flush,$(devmapper_incdir)/libdevmapper.h),0) -- CPPFLAGS += -DLIBDM_API_FLUSH --endif -- --ifneq ($(call check_func,dm_task_get_errno,$(devmapper_incdir)/libdevmapper.h),0) -- CPPFLAGS += -DLIBDM_API_GET_ERRNO --endif -- --ifneq ($(call check_func,dm_task_set_cookie,$(devmapper_incdir)/libdevmapper.h),0) -- CPPFLAGS += -DLIBDM_API_COOKIE --endif -- --ifneq ($(call check_func,udev_monitor_set_receive_buffer_size,$(libudev_incdir)/libudev.h),0) -- CPPFLAGS += -DLIBUDEV_API_RECVBUF --endif -- --ifneq ($(call check_func,dm_task_deferred_remove,$(devmapper_incdir)/libdevmapper.h),0) -- CPPFLAGS += -DLIBDM_API_DEFERRED --endif -- --ifneq ($(call check_func,dm_hold_control_dev,$(devmapper_incdir)/libdevmapper.h),0) -- CPPFLAGS += -DLIBDM_API_HOLD_CONTROL --endif -- --ifneq ($(call check_var,ELS_DTAG_LNK_INTEGRITY,$(kernel_incdir)/scsi/fc/fc_els.h),0) -- CPPFLAGS += -DFPIN_EVENT_HANDLER --endif -- - # object files referencing MULTIPATH_DIR or CONFIG_DIR - # they need to be recompiled for unit tests - OBJS-U := prio.o checkers.o foreign.o config.o -@@ -97,7 +69,7 @@ uninstall: - $(RM) $(DESTDIR)$(syslibdir)/$(DEVLIB) - - clean: dep_clean -- $(RM) core *.a *.o *.so *.so.* *.abi nvme-ioctl.c nvme-ioctl.h $(NV_VERSION_SCRIPT) -+ $(RM) core *.a *.o *.so *.so.* *.abi nvme-ioctl.c nvme-ioctl.h autoconfig.h $(NV_VERSION_SCRIPT) - - include $(wildcard $(OBJS:.o=.d)) - -diff --git a/libmultipath/devmapper.h b/libmultipath/devmapper.h -index 703f3bf8..42f8eccd 100644 ---- a/libmultipath/devmapper.h -+++ b/libmultipath/devmapper.h -@@ -1,6 +1,6 @@ - #ifndef _DEVMAPPER_H - #define _DEVMAPPER_H -- -+#include "autoconfig.h" - #include "structs.h" - - #define TGT_MPATH "multipath" -diff --git a/libmultipath/dict.c b/libmultipath/dict.c -index aa93fe43..6fc77315 100644 ---- a/libmultipath/dict.c -+++ b/libmultipath/dict.c -@@ -24,6 +24,7 @@ - #include - #include - #include -+#include "autoconfig.h" - #include "mpath_cmd.h" - #include "dict.h" - #include "strbuf.h" -diff --git a/libmultipath/prioritizers/Makefile b/libmultipath/prioritizers/Makefile -index 72eefe49..a699e8a6 100644 ---- a/libmultipath/prioritizers/Makefile -+++ b/libmultipath/prioritizers/Makefile -@@ -26,7 +26,7 @@ LIBS = \ - libpriopath_latency.so \ - libpriosysfs.so - --ifneq ($(call check_file,$(kernel_incdir)/linux/nvme_ioctl.h),0) -+ifneq ($(ANA_SUPPORT),1) - LIBS += libprioana.so - CPPFLAGS += -I../nvme - endif -diff --git a/libmultipath/propsel.c b/libmultipath/propsel.c -index d4f19897..d1d5cc25 100644 ---- a/libmultipath/propsel.c -+++ b/libmultipath/propsel.c -@@ -5,6 +5,7 @@ - */ - #include - -+#include "autoconfig.h" - #include "nvme-lib.h" - #include "checkers.h" - #include "vector.h" -diff --git a/libmultipath/uevent.c b/libmultipath/uevent.c -index 57447ca0..bbc8e9e5 100644 ---- a/libmultipath/uevent.c -+++ b/libmultipath/uevent.c -@@ -42,6 +42,7 @@ - #include - #include - -+#include "autoconfig.h" - #include "debug.h" - #include "list.h" - #include "uevent.h" -diff --git a/multipathd/Makefile b/multipathd/Makefile -index bb8f7770..587bb916 100644 ---- a/multipathd/Makefile -+++ b/multipathd/Makefile -@@ -8,17 +8,6 @@ CPPFLAGS += -I$(multipathdir) -I$(mpathutildir) -I$(mpathpersistdir) -I$(mpathcm - awk -F. '{ printf("-DURCU_VERSION=0x%06x", 256 * ( 256 * $$1 + $$2) + $$3); }') \ - -DBINDIR='"$(bindir)"' $(SYSTEMD_CPPFLAGS) - --ifeq ($(ENABLE_DMEVENTS_POLL),0) -- CPPFLAGS += -DNO_DMEVENTS_POLL --endif --ifneq ($(call check_func,dm_task_get_errno,$(devmapper_incdir)/libdevmapper.h),0) -- CPPFLAGS += -DLIBDM_API_GET_ERRNO --endif --ifneq ($(call check_var,ELS_DTAG_LNK_INTEGRITY,$(kernel_incdir)/scsi/fc/fc_els.h),0) -- CPPFLAGS += -DFPIN_EVENT_HANDLER -- FPIN_SUPPORT = 1 --endif -- - # - # debugging stuff - # -diff --git a/multipathd/fpin.h b/multipathd/fpin.h -index bfcc1ce2..3c374441 100644 ---- a/multipathd/fpin.h -+++ b/multipathd/fpin.h -@@ -1,5 +1,6 @@ - #ifndef __FPIN_H__ - #define __FPIN_H__ -+#include "autoconfig.h" - - #ifdef FPIN_EVENT_HANDLER - void *fpin_fabric_notification_receiver(void *unused); -diff --git a/multipathd/main.c b/multipathd/main.c -index ba52d393..1e1b254f 100644 ---- a/multipathd/main.c -+++ b/multipathd/main.c -@@ -4,6 +4,7 @@ - * Copyright (c) 2005 Benjamin Marzinski, Redhat - * Copyright (c) 2005 Edward Goggin, EMC - */ -+#include "autoconfig.h" - #include - #include - #include -diff --git a/rules.mk b/rules.mk -index c1d80820..d8612527 100644 ---- a/rules.mk -+++ b/rules.mk -@@ -13,3 +13,6 @@ $(LIBS:%.so.$(SONAME)=%-nv.so): $(OBJS) $(NV_VERSION_SCRIPT) - -Wl,--version-script=$(NV_VERSION_SCRIPT) -o $@ $(OBJS) $(LIBDEPS) - - abi: $(LIBS:%.so.$(SONAME)=%-nv.abi) -+ -+$(TOPDIR)/config.mk $(multipathdir)/autoconfig.h: -+ $(MAKE) -C $(TOPDIR) -f create-config.mk -diff --git a/tests/Makefile b/tests/Makefile -index 3a5b161c..d9856d17 100644 ---- a/tests/Makefile -+++ b/tests/Makefile -@@ -3,14 +3,6 @@ include ../Makefile.inc - # directory where to run the tests - TESTDIR := $(CURDIR) - --# Test special behavior of gcc 4.8 with nested initializers --# gcc 4.8 compiles blacklist.c only with -Wno-missing-field-initializers --TEST_MISSING_INITIALIZERS = $(shell \ -- echo 'struct A {int a, b;}; struct B {struct A a; int b;} b = {.a.a=1};' | \ -- $(CC) -c -Werror -Wmissing-field-initializers -o /dev/null -xc - >/dev/null 2>&1 \ -- || echo -Wno-missing-field-initializers) --W_MISSING_INITIALIZERS := $(call TEST_MISSING_INITIALIZERS) -- - CPPFLAGS += -I$(multipathdir) -I$(mpathutildir) -I$(mpathcmddir) -I$(daemondir) \ - -DTESTCONFDIR=\"$(TESTDIR)/conf.d\" - CFLAGS += $(BIN_CFLAGS) -Wno-unused-parameter $(W_MISSING_INITIALIZERS) diff --git a/0042-RH-make-parse_vpd_pg83-match-scsi_id-output.patch b/0020-RH-make-parse_vpd_pg83-match-scsi_id-output.patch similarity index 94% rename from 0042-RH-make-parse_vpd_pg83-match-scsi_id-output.patch rename to 0020-RH-make-parse_vpd_pg83-match-scsi_id-output.patch index 5812a54..824c747 100644 --- a/0042-RH-make-parse_vpd_pg83-match-scsi_id-output.patch +++ b/0020-RH-make-parse_vpd_pg83-match-scsi_id-output.patch @@ -14,10 +14,10 @@ Signed-off-by: Benjamin Marzinski 2 files changed, 8 insertions(+), 10 deletions(-) diff --git a/libmultipath/discovery.c b/libmultipath/discovery.c -index f3fccedd..c883fd02 100644 +index 67ac0e6d..7fdbc1c3 100644 --- a/libmultipath/discovery.c +++ b/libmultipath/discovery.c -@@ -1176,13 +1176,9 @@ parse_vpd_pg83(const unsigned char *in, size_t in_len, +@@ -1177,13 +1177,9 @@ parse_vpd_pg83(const unsigned char *in, size_t in_len, good_len = 8; break; case 2: @@ -33,7 +33,7 @@ index f3fccedd..c883fd02 100644 good_len = 8; break; default: -@@ -1200,10 +1196,6 @@ parse_vpd_pg83(const unsigned char *in, size_t in_len, +@@ -1201,10 +1197,6 @@ parse_vpd_pg83(const unsigned char *in, size_t in_len, break; case 0x8: /* SCSI Name: Prio 3 */ diff --git a/0020-multipath-tools-Makefiles-enable-quiet-build.patch b/0020-multipath-tools-Makefiles-enable-quiet-build.patch deleted file mode 100644 index dbe1129..0000000 --- a/0020-multipath-tools-Makefiles-enable-quiet-build.patch +++ /dev/null @@ -1,879 +0,0 @@ -From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 -From: Martin Wilck -Date: Fri, 28 Oct 2022 12:39:06 +0200 -Subject: [PATCH] multipath-tools Makefiles: enable quiet build - -Like many other projects, make it possible to print much less -output during build. Verbose output is enabled with "make V=1", as -usual. - -Signed-off-by: Martin Wilck -Signed-off-by: Benjamin Marzinski ---- - Makefile | 12 +++---- - Makefile.inc | 10 +++--- - kpartx/Makefile | 41 ++++++++++++----------- - libdmmp/Makefile | 48 +++++++++++++------------- - libdmmp/test/Makefile | 8 ++--- - libmpathcmd/Makefile | 20 +++++------ - libmpathpersist/Makefile | 32 +++++++++--------- - libmpathutil/Makefile | 14 ++++---- - libmpathvalid/Makefile | 20 +++++------ - libmultipath/Makefile | 30 ++++++++--------- - libmultipath/checkers/Makefile | 8 ++--- - libmultipath/foreign/Makefile | 8 ++--- - libmultipath/prioritizers/Makefile | 8 ++--- - mpathpersist/Makefile | 18 +++++----- - multipath/Makefile | 54 ++++++++++++++++-------------- - multipathd/Makefile | 42 ++++++++++++----------- - rules.mk | 8 ++--- - tests/Makefile | 23 +++++++------ - 18 files changed, 206 insertions(+), 198 deletions(-) - -diff --git a/Makefile b/Makefile -index 1b28db62..e3ce1a8d 100644 ---- a/Makefile -+++ b/Makefile -@@ -38,17 +38,17 @@ config.mk libmultipath/autoconfig.h: - @cat libmultipath/autoconfig.h - - $(BUILDDIRS): config.mk -- $(MAKE) -C $@ -+ @$(MAKE) -C $@ - - $(LIB_BUILDDIRS:=.abi): $(LIB_BUILDDIRS) -- $(MAKE) -C ${@:.abi=} abi -+ @$(MAKE) -C ${@:.abi=} abi - - # Create formal representation of the ABI - # Useful for verifying ABI compatibility - # Requires abidw from the abigail suite (https://sourceware.org/libabigail/) - .PHONY: abi - abi: $(LIB_BUILDDIRS:=.abi) -- mkdir -p $@ -+ @mkdir -p $@ - ln -ft $@ $(LIB_BUILDDIRS:=/*.abi) - - abi.tar.gz: abi -@@ -91,13 +91,13 @@ libmultipath/checkers.install \ - libmultipath/foreign.install: libmultipath.install - - %.clean: -- $(MAKE) -C ${@:.clean=} clean -+ @$(MAKE) -C ${@:.clean=} clean - - %.install: % -- $(MAKE) -C ${@:.install=} install -+ @$(MAKE) -C ${@:.install=} install - - $(BUILDDIRS:=.uninstall): -- $(MAKE) -C ${@:.uninstall=} uninstall -+ @$(MAKE) -C ${@:.uninstall=} uninstall - - # If config.mk is missing, "make clean" in subdir either fails, or tries to - # build it. Both is undesirable. Avoid it by creating config.mk temporarily. -diff --git a/Makefile.inc b/Makefile.inc -index 415634f5..3e14cb8c 100644 ---- a/Makefile.inc -+++ b/Makefile.inc -@@ -1,4 +1,4 @@ --# -+# -*- Makefile -*- - # Copyright (C) 2004 Christophe Varoqui, - # - -@@ -60,6 +60,8 @@ devmapper_incdir := $(or $(shell $(PKGCONFIG) --variable=includedir devmapper),/ - libudev_incdir := $(or $(shell $(PKGCONFIG) --variable=includedir libudev),/usr/include) - kernel_incdir := /usr/include - -+Q := $(if $(V),,@) -+ - GZIP_PROG := gzip -9 -c - RM := rm -f - LN := ln -sf -@@ -104,13 +106,13 @@ NV_VERSION_SCRIPT = $(DEVLIB:%.so=%-nv.version) - - %.o: %.c - @echo building $@ because of $? -- $(CC) $(CPPFLAGS) $(CFLAGS) -c -o $@ $< -+ $(Q)$(CC) $(CPPFLAGS) $(CFLAGS) -c -o $@ $< - - %.abi: %.so.0 -- abidw $< >$@ -+ $(Q)abidw $< >$@ - - %.abi: %.so -- abidw $< >$@ -+ $(Q)abidw $< >$@ - - %-nv.version: %.version - @echo creating $@ from $< -diff --git a/kpartx/Makefile b/kpartx/Makefile -index 31b1138a..7720a740 100644 ---- a/kpartx/Makefile -+++ b/kpartx/Makefile -@@ -16,33 +16,34 @@ OBJS := bsd.o dos.o kpartx.o solaris.o unixware.o dasd.o sun.o \ - all: $(EXEC) - - $(EXEC): $(OBJS) -- $(CC) $(CFLAGS) $(OBJS) -o $(EXEC) $(LDFLAGS) $(LIBDEPS) -+ @echo building $@ because of $? -+ $(Q)$(CC) $(CFLAGS) $(OBJS) -o $(EXEC) $(LDFLAGS) $(LIBDEPS) - - install: $(EXEC) $(EXEC).8 -- $(INSTALL_PROGRAM) -d $(DESTDIR)$(bindir) -- $(INSTALL_PROGRAM) -m 755 $(EXEC) $(DESTDIR)$(bindir) -- $(INSTALL_PROGRAM) -d $(DESTDIR)$(libudevdir) -- $(INSTALL_PROGRAM) -m 755 kpartx_id $(DESTDIR)$(libudevdir) -- $(INSTALL_PROGRAM) -d $(DESTDIR)$(libudevdir)/rules.d -- $(INSTALL_PROGRAM) -m 644 dm-parts.rules $(DESTDIR)$(libudevdir)/rules.d/11-dm-parts.rules -- $(INSTALL_PROGRAM) -m 644 kpartx.rules $(DESTDIR)$(libudevdir)/rules.d/66-kpartx.rules -- $(INSTALL_PROGRAM) -m 644 del-part-nodes.rules $(DESTDIR)$(libudevdir)/rules.d/68-del-part-nodes.rules -- $(INSTALL_PROGRAM) -d $(DESTDIR)$(mandir)/man8 -- $(INSTALL_PROGRAM) -m 644 $(EXEC).8 $(DESTDIR)$(mandir)/man8 -+ $(Q)$(INSTALL_PROGRAM) -d $(DESTDIR)$(bindir) -+ $(Q)$(INSTALL_PROGRAM) -m 755 $(EXEC) $(DESTDIR)$(bindir) -+ $(Q)$(INSTALL_PROGRAM) -d $(DESTDIR)$(libudevdir) -+ $(Q)$(INSTALL_PROGRAM) -m 755 kpartx_id $(DESTDIR)$(libudevdir) -+ $(Q)$(INSTALL_PROGRAM) -d $(DESTDIR)$(libudevdir)/rules.d -+ $(Q)$(INSTALL_PROGRAM) -m 644 dm-parts.rules $(DESTDIR)$(libudevdir)/rules.d/11-dm-parts.rules -+ $(Q)$(INSTALL_PROGRAM) -m 644 kpartx.rules $(DESTDIR)$(libudevdir)/rules.d/66-kpartx.rules -+ $(Q)$(INSTALL_PROGRAM) -m 644 del-part-nodes.rules $(DESTDIR)$(libudevdir)/rules.d/68-del-part-nodes.rules -+ $(Q)$(INSTALL_PROGRAM) -d $(DESTDIR)$(mandir)/man8 -+ $(Q)$(INSTALL_PROGRAM) -m 644 $(EXEC).8 $(DESTDIR)$(mandir)/man8 - - uninstall: -- $(RM) $(DESTDIR)$(bindir)/$(EXEC) -- $(RM) $(DESTDIR)$(mandir)/man8/$(EXEC).8 -- $(RM) $(DESTDIR)$(libudevdir)/kpartx_id -- $(RM) $(DESTDIR)$(libudevdir)/rules.d/11-dm-parts.rules -- $(RM) $(DESTDIR)$(libudevdir)/rules.d/66-kpartx.rules -- $(RM) $(DESTDIR)$(libudevdir)/rules.d/67-kpartx-compat.rules -- $(RM) $(DESTDIR)$(libudevdir)/rules.d/68-del-part-nodes.rules -+ $(Q)$(RM) $(DESTDIR)$(bindir)/$(EXEC) -+ $(Q)$(RM) $(DESTDIR)$(mandir)/man8/$(EXEC).8 -+ $(Q)$(RM) $(DESTDIR)$(libudevdir)/kpartx_id -+ $(Q)$(RM) $(DESTDIR)$(libudevdir)/rules.d/11-dm-parts.rules -+ $(Q)$(RM) $(DESTDIR)$(libudevdir)/rules.d/66-kpartx.rules -+ $(Q)$(RM) $(DESTDIR)$(libudevdir)/rules.d/67-kpartx-compat.rules -+ $(Q)$(RM) $(DESTDIR)$(libudevdir)/rules.d/68-del-part-nodes.rules - - clean: dep_clean -- $(RM) core *.o $(EXEC) -+ $(Q)$(RM) core *.o $(EXEC) - - include $(wildcard $(OBJS:.o=.d)) - - dep_clean: -- $(RM) $(OBJS:.o=.d) -+ $(Q)$(RM) $(OBJS:.o=.d) -diff --git a/libdmmp/Makefile b/libdmmp/Makefile -index 67b6f86f..7693facb 100644 ---- a/libdmmp/Makefile -+++ b/libdmmp/Makefile -@@ -23,62 +23,62 @@ all: $(LIBS) doc - .PHONY: doc clean install uninstall check speed_test dep_clean - - $(LIBS): $(OBJS) -- $(CC) $(LDFLAGS) $(SHARED_FLAGS) -Wl,-soname=$@ -o $@ $(OBJS) $(LIBDEPS) -+ $(Q)$(CC) $(LDFLAGS) $(SHARED_FLAGS) -Wl,-soname=$@ -o $@ $(OBJS) $(LIBDEPS) - - $(DEVLIB): $(LIBS) -- $(LN) $(LIBS) $@ -+ $(Q)$(LN) $(LIBS) $@ - - abi: $(DEVLIB:%.so=%.abi) - - install: -- mkdir -p $(DESTDIR)$(usrlibdir) -- $(INSTALL_PROGRAM) -m 755 $(LIBS) $(DESTDIR)$(usrlibdir)/$(LIBS) -- $(INSTALL_PROGRAM) -m 644 -D \ -+ @mkdir -p $(DESTDIR)$(usrlibdir) -+ $(Q)$(INSTALL_PROGRAM) -m 755 $(LIBS) $(DESTDIR)$(usrlibdir)/$(LIBS) -+ $(Q)$(INSTALL_PROGRAM) -m 644 -D \ - $(HEADERS) $(DESTDIR)$(includedir)/$(HEADERS) -- $(LN) $(LIBS) $(DESTDIR)$(usrlibdir)/$(DEVLIB) -- $(INSTALL_PROGRAM) -m 644 -D \ -+ $(Q)$(LN) $(LIBS) $(DESTDIR)$(usrlibdir)/$(DEVLIB) -+ $(Q)$(INSTALL_PROGRAM) -m 644 -D \ - $(PKGFILE).in $(DESTDIR)$(pkgconfdir)/$(PKGFILE) -- perl -i -pe 's|__VERSION__|$(LIBDMMP_VERSION)|g' \ -+ $(Q)perl -i -pe 's|__VERSION__|$(LIBDMMP_VERSION)|g' \ - $(DESTDIR)$(pkgconfdir)/$(PKGFILE) -- perl -i -pe 's|__LIBDIR__|$(usrlibdir)|g' \ -+ $(Q)perl -i -pe 's|__LIBDIR__|$(usrlibdir)|g' \ - $(DESTDIR)$(pkgconfdir)/$(PKGFILE) -- perl -i -pe 's|__INCLUDEDIR__|$(includedir)|g' \ -+ $(Q)perl -i -pe 's|__INCLUDEDIR__|$(includedir)|g' \ - $(DESTDIR)$(pkgconfdir)/$(PKGFILE) -- $(INSTALL_PROGRAM) -d 755 $(DESTDIR)$(mandir)/man3 -- $(INSTALL_PROGRAM) -m 644 -t $(DESTDIR)$(mandir)/man3 docs/man/*.3 -+ $(Q)$(INSTALL_PROGRAM) -d 755 $(DESTDIR)$(mandir)/man3 -+ $(Q)$(INSTALL_PROGRAM) -m 644 -t $(DESTDIR)$(mandir)/man3 docs/man/*.3 - - uninstall: -- $(RM) $(DESTDIR)$(usrlibdir)/$(LIBS) -- $(RM) $(DESTDIR)$(includedir)/$(HEADERS) -- $(RM) $(DESTDIR)$(usrlibdir)/$(DEVLIB) -+ $(Q)$(RM) $(DESTDIR)$(usrlibdir)/$(LIBS) -+ $(Q)$(RM) $(DESTDIR)$(includedir)/$(HEADERS) -+ $(Q)$(RM) $(DESTDIR)$(usrlibdir)/$(DEVLIB) - @for file in $(DESTDIR)$(mandir)/man3/dmmp_*; do \ - $(RM) $$file; \ - done -- $(RM) $(DESTDIR)$(mandir)/man3/libdmmp.h* -- $(RM) $(DESTDIR)$(pkgconfdir)/$(PKGFILE) -+ $(Q)$(RM) $(DESTDIR)$(mandir)/man3/libdmmp.h* -+ $(Q)$(RM) $(DESTDIR)$(pkgconfdir)/$(PKGFILE) - - clean: dep_clean -- $(RM) core *.a *.o *.so *.so.* *.abi $(NV_VERSION_SCRIPT) -- $(MAKE) -C test clean -+ $(Q)$(RM) core *.a *.o *.so *.so.* *.abi $(NV_VERSION_SCRIPT) -+ @$(MAKE) -C test clean - - include $(wildcard $(OBJS:.o=.d)) - - check: all -- $(MAKE) -C test check -+ @$(MAKE) -C test check - - speed_test: all -- $(MAKE) -C test speed_test -+ @$(MAKE) -C test speed_test - - doc: docs/man/dmmp_strerror.3 - - docs/man/dmmp_strerror.3: $(HEADERS) -- TEMPFILE=$(shell mktemp); \ -+ $(Q)TEMPFILE=$(shell mktemp); \ - cat $^ | perl docs/doc-preclean.pl >$$TEMPFILE; \ - LC_ALL=C \ - KBUILD_BUILD_TIMESTAMP=`git log -n1 --pretty=%cd --date=iso -- $^` \ - perl docs/kernel-doc -man $$TEMPFILE | \ - perl docs/split-man.pl docs/man; \ -- rm -f $$TEMPFILE -+ $(RM) -f $$TEMPFILE - - dep_clean: -- $(RM) $(OBJS:.o=.d) -+ $(Q)$(RM) $(OBJS:.o=.d) -diff --git a/libdmmp/test/Makefile b/libdmmp/test/Makefile -index 93de64a0..9d0817c8 100644 ---- a/libdmmp/test/Makefile -+++ b/libdmmp/test/Makefile -@@ -16,7 +16,7 @@ LDFLAGS += -L$(_libdmmpdir) -ldmmp - all: $(TEST_EXEC) $(SPD_TEST_EXEC) - - check: $(TEST_EXEC) $(SPD_TEST_EXEC) -- sudo env LD_LIBRARY_PATH=$(_libdmmpdir):$(_mpathcmddir) \ -+ $(Q)sudo env LD_LIBRARY_PATH=$(_libdmmpdir):$(_mpathcmddir) \ - valgrind --quiet --leak-check=full \ - --show-reachable=no --show-possibly-lost=no \ - --trace-children=yes --error-exitcode=1 \ -@@ -24,15 +24,15 @@ check: $(TEST_EXEC) $(SPD_TEST_EXEC) - $(MAKE) speed_test - - speed_test: $(SPD_TEST_EXEC) -- sudo env LD_LIBRARY_PATH=$(_libdmmpdir):$(_mpathcmddir) \ -+ $(Q)sudo env LD_LIBRARY_PATH=$(_libdmmpdir):$(_mpathcmddir) \ - time -p ./$(SPD_TEST_EXEC) - - clean: dep_clean -- rm -f $(TEST_EXEC) $(SPD_TEST_EXEC) -+ $(Q)$(RM) -f $(TEST_EXEC) $(SPD_TEST_EXEC) - - OBJS = $(TEST_EXEC).o $(SPD_TEST_EXEC).o - include $(wildcard $(OBJS:.o=.d)) - - - dep_clean: -- $(RM) $(OBJS:.o=.d) -+ $(Q)$(RM) $(OBJS:.o=.d) -diff --git a/libmpathcmd/Makefile b/libmpathcmd/Makefile -index cfb202b8..be615c2f 100644 ---- a/libmpathcmd/Makefile -+++ b/libmpathcmd/Makefile -@@ -9,22 +9,22 @@ all: $(DEVLIB) - include $(TOPDIR)/rules.mk - - install: all -- $(INSTALL_PROGRAM) -d $(DESTDIR)$(syslibdir) -- $(INSTALL_PROGRAM) -m 755 $(LIBS) $(DESTDIR)$(syslibdir)/$(LIBS) -- $(LN) $(LIBS) $(DESTDIR)$(syslibdir)/$(DEVLIB) -- $(INSTALL_PROGRAM) -d $(DESTDIR)$(includedir) -- $(INSTALL_PROGRAM) -m 644 mpath_cmd.h $(DESTDIR)$(includedir) -+ $(Q)$(INSTALL_PROGRAM) -d $(DESTDIR)$(syslibdir) -+ $(Q)$(INSTALL_PROGRAM) -m 755 $(LIBS) $(DESTDIR)$(syslibdir)/$(LIBS) -+ $(Q)$(LN) $(LIBS) $(DESTDIR)$(syslibdir)/$(DEVLIB) -+ $(Q)$(INSTALL_PROGRAM) -d $(DESTDIR)$(includedir) -+ $(Q)$(INSTALL_PROGRAM) -m 644 mpath_cmd.h $(DESTDIR)$(includedir) - - uninstall: -- $(RM) $(DESTDIR)$(syslibdir)/$(LIBS) -- $(RM) $(DESTDIR)$(syslibdir)/$(DEVLIB) -- $(RM) $(DESTDIR)$(includedir)/mpath_cmd.h -+ $(Q)$(RM) $(DESTDIR)$(syslibdir)/$(LIBS) -+ $(Q)$(RM) $(DESTDIR)$(syslibdir)/$(DEVLIB) -+ $(Q)$(RM) $(DESTDIR)$(includedir)/mpath_cmd.h - - clean: dep_clean -- $(RM) core *.a *.o *.so *.so.* *.abi $(NV_VERSION_SCRIPT) -+ $(Q)$(RM) core *.a *.o *.so *.so.* *.abi $(NV_VERSION_SCRIPT) - - include $(wildcard $(OBJS:.o=.d)) - - - dep_clean: -- $(RM) $(OBJS:.o=.d) -+ $(Q)$(RM) $(OBJS:.o=.d) -diff --git a/libmpathpersist/Makefile b/libmpathpersist/Makefile -index 94672556..8f9a43f6 100644 ---- a/libmpathpersist/Makefile -+++ b/libmpathpersist/Makefile -@@ -12,28 +12,28 @@ all: $(DEVLIB) - include $(TOPDIR)/rules.mk - - install: all -- $(INSTALL_PROGRAM) -d $(DESTDIR)$(syslibdir) -- $(INSTALL_PROGRAM) -m 755 $(LIBS) $(DESTDIR)$(syslibdir)/$(LIBS) -- $(INSTALL_PROGRAM) -m 755 -d $(DESTDIR)$(syslibdir) -- $(INSTALL_PROGRAM) -m 755 -d $(DESTDIR)$(mandir)/man3 -- $(INSTALL_PROGRAM) -m 755 -d $(DESTDIR)$(includedir) -- $(LN) $(LIBS) $(DESTDIR)$(syslibdir)/$(DEVLIB) -- $(INSTALL_PROGRAM) -m 644 mpath_persistent_reserve_in.3 $(DESTDIR)$(mandir)/man3 -- $(INSTALL_PROGRAM) -m 644 mpath_persistent_reserve_out.3 $(DESTDIR)$(mandir)/man3 -- $(INSTALL_PROGRAM) -m 644 mpath_persist.h $(DESTDIR)$(includedir) -+ $(Q)$(INSTALL_PROGRAM) -d $(DESTDIR)$(syslibdir) -+ $(Q)$(INSTALL_PROGRAM) -m 755 $(LIBS) $(DESTDIR)$(syslibdir)/$(LIBS) -+ $(Q)$(INSTALL_PROGRAM) -m 755 -d $(DESTDIR)$(syslibdir) -+ $(Q)$(INSTALL_PROGRAM) -m 755 -d $(DESTDIR)$(mandir)/man3 -+ $(Q)$(INSTALL_PROGRAM) -m 755 -d $(DESTDIR)$(includedir) -+ $(Q)$(LN) $(LIBS) $(DESTDIR)$(syslibdir)/$(DEVLIB) -+ $(Q)$(INSTALL_PROGRAM) -m 644 mpath_persistent_reserve_in.3 $(DESTDIR)$(mandir)/man3 -+ $(Q)$(INSTALL_PROGRAM) -m 644 mpath_persistent_reserve_out.3 $(DESTDIR)$(mandir)/man3 -+ $(Q)$(INSTALL_PROGRAM) -m 644 mpath_persist.h $(DESTDIR)$(includedir) - - uninstall: -- $(RM) $(DESTDIR)$(syslibdir)/$(LIBS) -- $(RM) $(DESTDIR)$(mandir)/man3/mpath_persistent_reserve_in.3 -- $(RM) $(DESTDIR)$(mandir)/man3/mpath_persistent_reserve_out.3 -- $(RM) $(DESTDIR)$(includedir)/mpath_persist.h -- $(RM) $(DESTDIR)$(syslibdir)/$(DEVLIB) -+ $(Q)$(RM) $(DESTDIR)$(syslibdir)/$(LIBS) -+ $(Q)$(RM) $(DESTDIR)$(mandir)/man3/mpath_persistent_reserve_in.3 -+ $(Q)$(RM) $(DESTDIR)$(mandir)/man3/mpath_persistent_reserve_out.3 -+ $(Q)$(RM) $(DESTDIR)$(includedir)/mpath_persist.h -+ $(Q)$(RM) $(DESTDIR)$(syslibdir)/$(DEVLIB) - - clean: dep_clean -- $(RM) core *.a *.o *.so *.so.* *.abi $(NV_VERSION_SCRIPT) -+ $(Q)$(RM) core *.a *.o *.so *.so.* *.abi $(NV_VERSION_SCRIPT) - - include $(wildcard $(OBJS:.o=.d)) - - - dep_clean: -- $(RM) $(OBJS:.o=.d) -+ $(Q)$(RM) $(OBJS:.o=.d) -diff --git a/libmpathutil/Makefile b/libmpathutil/Makefile -index 5ab33c09..f059de14 100644 ---- a/libmpathutil/Makefile -+++ b/libmpathutil/Makefile -@@ -20,18 +20,18 @@ all: $(DEVLIB) - include $(TOPDIR)/rules.mk - - install: all -- $(INSTALL_PROGRAM) -d $(DESTDIR)$(syslibdir) -- $(INSTALL_PROGRAM) -m 755 $(LIBS) $(DESTDIR)$(syslibdir)/$(LIBS) -- $(LN) $(LIBS) $(DESTDIR)$(syslibdir)/$(DEVLIB) -+ $(Q)$(INSTALL_PROGRAM) -d $(DESTDIR)$(syslibdir) -+ $(Q)$(INSTALL_PROGRAM) -m 755 $(LIBS) $(DESTDIR)$(syslibdir)/$(LIBS) -+ $(Q)$(LN) $(LIBS) $(DESTDIR)$(syslibdir)/$(DEVLIB) - - uninstall: -- $(RM) $(DESTDIR)$(syslibdir)/$(LIBS) -- $(RM) $(DESTDIR)$(syslibdir)/$(DEVLIB) -+ $(Q)$(RM) $(DESTDIR)$(syslibdir)/$(LIBS) -+ $(Q)$(RM) $(DESTDIR)$(syslibdir)/$(DEVLIB) - - clean: dep_clean -- $(RM) core *.a *.o *.so *.so.* *.abi nvme-ioctl.c nvme-ioctl.h $(NV_VERSION_SCRIPT) -+ $(Q)$(RM) core *.a *.o *.so *.so.* *.abi nvme-ioctl.c nvme-ioctl.h $(NV_VERSION_SCRIPT) - - include $(wildcard $(OBJS:.o=.d)) - - dep_clean: -- $(RM) $(OBJS:.o=.d) -+ $(Q)$(RM) $(OBJS:.o=.d) -diff --git a/libmpathvalid/Makefile b/libmpathvalid/Makefile -index 88034df3..791a0398 100644 ---- a/libmpathvalid/Makefile -+++ b/libmpathvalid/Makefile -@@ -13,21 +13,21 @@ all: $(DEVLIB) - include $(TOPDIR)/rules.mk - - install: $(LIBS) -- $(INSTALL_PROGRAM) -m 755 -d $(DESTDIR)$(syslibdir) -- $(INSTALL_PROGRAM) -m 755 $(LIBS) $(DESTDIR)$(syslibdir)/$(LIBS) -- $(LN) $(LIBS) $(DESTDIR)$(syslibdir)/$(DEVLIB) -- $(INSTALL_PROGRAM) -m 755 -d $(DESTDIR)$(includedir) -- $(INSTALL_PROGRAM) -m 644 mpath_valid.h $(DESTDIR)$(includedir) -+ $(Q)$(INSTALL_PROGRAM) -m 755 -d $(DESTDIR)$(syslibdir) -+ $(Q)$(INSTALL_PROGRAM) -m 755 $(LIBS) $(DESTDIR)$(syslibdir)/$(LIBS) -+ $(Q)$(LN) $(LIBS) $(DESTDIR)$(syslibdir)/$(DEVLIB) -+ $(Q)$(INSTALL_PROGRAM) -m 755 -d $(DESTDIR)$(includedir) -+ $(Q)$(INSTALL_PROGRAM) -m 644 mpath_valid.h $(DESTDIR)$(includedir) - - uninstall: -- $(RM) $(DESTDIR)$(syslibdir)/$(LIBS) -- $(RM) $(DESTDIR)$(syslibdir)/$(DEVLIB) -- $(RM) $(DESTDIR)$(includedir)/mpath_valid.h -+ $(Q)$(RM) $(DESTDIR)$(syslibdir)/$(LIBS) -+ $(Q)$(RM) $(DESTDIR)$(syslibdir)/$(DEVLIB) -+ $(Q)$(RM) $(DESTDIR)$(includedir)/mpath_valid.h - - clean: dep_clean -- $(RM) core *.a *.o *.so *.so.* *.abi $(NV_VERSION_SCRIPT) -+ $(Q)$(RM) core *.a *.o *.so *.so.* *.abi $(NV_VERSION_SCRIPT) - - include $(wildcard $(OBJS:.o=.d)) - - dep_clean: -- $(RM) $(OBJS:.o=.d) -+ $(Q)$(RM) $(OBJS:.o=.d) -diff --git a/libmultipath/Makefile b/libmultipath/Makefile -index 1cc13577..3df851e2 100644 ---- a/libmultipath/Makefile -+++ b/libmultipath/Makefile -@@ -31,47 +31,47 @@ all: $(DEVLIB) - include $(TOPDIR)/rules.mk - - nvme-lib.o: nvme-lib.c nvme-ioctl.c nvme-ioctl.h -- $(CC) $(CPPFLAGS) $(CFLAGS) -Wno-unused-function -c -o $@ $< -+ $(Q)$(CC) $(CPPFLAGS) $(CFLAGS) -Wno-unused-function -c -o $@ $< - - # there are lots of "unused parameters" in dict.c - # because not all handler / snprint methods need all parameters - dict.o: dict.c -- $(CC) $(CPPFLAGS) $(CFLAGS) -Wno-unused-parameter -c -o $@ $< -+ $(Q)$(CC) $(CPPFLAGS) $(CFLAGS) -Wno-unused-parameter -c -o $@ $< - - make_static = $(shell sed '/^static/!s/^\([a-z]\{1,\} \)/static \1/' <$1 >$2) - - nvme-ioctl.c: nvme/nvme-ioctl.c -- $(call make_static,$<,$@) -+ $(Q)$(call make_static,$<,$@) - - nvme-ioctl.h: nvme/nvme-ioctl.h -- $(call make_static,$<,$@) -+ $(Q)$(call make_static,$<,$@) - - ../tests/$(LIBS): $(OBJS-O) $(OBJS-T) $(VERSION_SCRIPT) -- $(CC) $(LDFLAGS) $(SHARED_FLAGS) -Wl,-soname=`basename $@` \ -+ $(Q)$(CC) $(LDFLAGS) $(SHARED_FLAGS) -Wl,-soname=`basename $@` \ - -o $@ $(OBJS-O) $(OBJS-T) $(LIBDEPS) -- $(LN) $@ ${@:.so.0=.so} -+ $(Q)$(LN) $@ ${@:.so.0=.so} - - # This rule is invoked from tests/Makefile, overriding configdir and plugindir - %-test.o: %.c - @echo building $@ because of $? -- $(CC) $(CPPFLAGS) $(CFLAGS) -c -o $@ $< -+ $(Q)$(CC) $(CPPFLAGS) $(CFLAGS) -c -o $@ $< - - test-lib: ../tests/$(LIBS) - - install: all -- $(INSTALL_PROGRAM) -d $(DESTDIR)$(syslibdir) -- $(INSTALL_PROGRAM) -m 755 $(LIBS) $(DESTDIR)$(syslibdir)/$(LIBS) -- $(INSTALL_PROGRAM) -m 755 -d $(DESTDIR)$(plugindir) -- $(LN) $(LIBS) $(DESTDIR)$(syslibdir)/$(DEVLIB) -+ $(Q)$(INSTALL_PROGRAM) -d $(DESTDIR)$(syslibdir) -+ $(Q)$(INSTALL_PROGRAM) -m 755 $(LIBS) $(DESTDIR)$(syslibdir)/$(LIBS) -+ $(Q)$(INSTALL_PROGRAM) -m 755 -d $(DESTDIR)$(plugindir) -+ $(Q)$(LN) $(LIBS) $(DESTDIR)$(syslibdir)/$(DEVLIB) - - uninstall: -- $(RM) $(DESTDIR)$(syslibdir)/$(LIBS) -- $(RM) $(DESTDIR)$(syslibdir)/$(DEVLIB) -+ $(Q)$(RM) $(DESTDIR)$(syslibdir)/$(LIBS) -+ $(Q)$(RM) $(DESTDIR)$(syslibdir)/$(DEVLIB) - - clean: dep_clean -- $(RM) core *.a *.o *.so *.so.* *.abi nvme-ioctl.c nvme-ioctl.h autoconfig.h $(NV_VERSION_SCRIPT) -+ $(Q)$(RM) core *.a *.o *.so *.so.* *.abi nvme-ioctl.c nvme-ioctl.h autoconfig.h $(NV_VERSION_SCRIPT) - - include $(wildcard $(OBJS:.o=.d)) - - dep_clean: -- $(RM) $(OBJS:.o=.d) -+ $(Q)$(RM) $(OBJS:.o=.d) -diff --git a/libmultipath/checkers/Makefile b/libmultipath/checkers/Makefile -index 39ad76e0..b3120611 100644 ---- a/libmultipath/checkers/Makefile -+++ b/libmultipath/checkers/Makefile -@@ -22,16 +22,16 @@ LIBS= \ - all: $(LIBS) - - libcheck%.so: %.o -- $(CC) $(LDFLAGS) $(SHARED_FLAGS) -o $@ $^ $(LIBDEPS) -+ $(Q)$(CC) $(LDFLAGS) $(SHARED_FLAGS) -o $@ $^ $(LIBDEPS) - - install: -- $(INSTALL_PROGRAM) -m 755 $(LIBS) $(DESTDIR)$(plugindir) -+ $(Q)$(INSTALL_PROGRAM) -m 755 $(LIBS) $(DESTDIR)$(plugindir) - - uninstall: - for file in $(LIBS); do $(RM) $(DESTDIR)$(plugindir)/$$file; done - - clean: dep_clean -- $(RM) core *.a *.o *.gz *.so -+ $(Q)$(RM) core *.a *.o *.gz *.so - - OBJS := $(LIBS:libcheck%.so=%.o) - .SECONDARY: $(OBJS) -@@ -39,4 +39,4 @@ OBJS := $(LIBS:libcheck%.so=%.o) - include $(wildcard $(OBJS:.o=.d)) - - dep_clean: -- $(RM) $(OBJS:.o=.d) -+ $(Q)$(RM) $(OBJS:.o=.d) -diff --git a/libmultipath/foreign/Makefile b/libmultipath/foreign/Makefile -index 8bf9047b..0e245d6f 100644 ---- a/libmultipath/foreign/Makefile -+++ b/libmultipath/foreign/Makefile -@@ -14,16 +14,16 @@ LIBS = libforeign-nvme.so - all: $(LIBS) - - libforeign-%.so: %.o -- $(CC) $(LDFLAGS) $(SHARED_FLAGS) -o $@ $^ $(LIBDEPS) -+ $(Q)$(CC) $(LDFLAGS) $(SHARED_FLAGS) -o $@ $^ $(LIBDEPS) - - install: -- $(INSTALL_PROGRAM) -m 755 $(LIBS) $(DESTDIR)$(plugindir) -+ $(Q)$(INSTALL_PROGRAM) -m 755 $(LIBS) $(DESTDIR)$(plugindir) - - uninstall: - for file in $(LIBS); do $(RM) $(DESTDIR)$(plugindir)/$$file; done - - clean: dep_clean -- $(RM) core *.a *.o *.gz *.so -+ $(Q)$(RM) core *.a *.o *.gz *.so - - OBJS := $(LIBS:libforeign-%.so=%.o) - .SECONDARY: $(OBJS) -@@ -31,4 +31,4 @@ OBJS := $(LIBS:libforeign-%.so=%.o) - include $(wildcard $(OBJS:.o=.d)) - - dep_clean: -- $(RM) $(OBJS:.o=.d) -+ $(Q)$(RM) $(OBJS:.o=.d) -diff --git a/libmultipath/prioritizers/Makefile b/libmultipath/prioritizers/Makefile -index a699e8a6..e1688163 100644 ---- a/libmultipath/prioritizers/Makefile -+++ b/libmultipath/prioritizers/Makefile -@@ -34,16 +34,16 @@ endif - all: $(LIBS) - - libprio%.so: %.o -- $(CC) $(LDFLAGS) $(SHARED_FLAGS) -o $@ $^ $(LIBDEPS) -+ $(Q)$(CC) $(LDFLAGS) $(SHARED_FLAGS) -o $@ $^ $(LIBDEPS) - - install: $(LIBS) -- $(INSTALL_PROGRAM) -m 755 libprio*.so $(DESTDIR)$(plugindir) -+ $(Q)$(INSTALL_PROGRAM) -m 755 libprio*.so $(DESTDIR)$(plugindir) - - uninstall: - for file in $(LIBS); do $(RM) $(DESTDIR)$(plugindir)/$$file; done - - clean: dep_clean -- $(RM) core *.a *.o *.gz *.so -+ $(Q)$(RM) core *.a *.o *.gz *.so - - OBJS = $(LIBS:libprio%.so=%.o) alua_rtpg.o - .SECONDARY: $(OBJS) -@@ -51,4 +51,4 @@ OBJS = $(LIBS:libprio%.so=%.o) alua_rtpg.o - include $(wildcard $(OBJS:.o=.d)) - - dep_clean: -- $(RM) $(OBJS:.o=.d) -+ $(Q)$(RM) $(OBJS:.o=.d) -diff --git a/mpathpersist/Makefile b/mpathpersist/Makefile -index d62537b5..f57c105c 100644 ---- a/mpathpersist/Makefile -+++ b/mpathpersist/Makefile -@@ -14,22 +14,22 @@ OBJS = main.o - all: $(EXEC) - - $(EXEC): $(OBJS) -- $(CC) $(OBJS) -o $(EXEC) $(LDFLAGS) $(CFLAGS) $(LIBDEPS) -+ $(Q)$(CC) $(OBJS) -o $(EXEC) $(LDFLAGS) $(CFLAGS) $(LIBDEPS) - - install: -- $(INSTALL_PROGRAM) -d $(DESTDIR)$(bindir) -- $(INSTALL_PROGRAM) -m 755 $(EXEC) $(DESTDIR)$(bindir)/ -- $(INSTALL_PROGRAM) -d $(DESTDIR)$(mandir)/man8 -- $(INSTALL_PROGRAM) -m 644 $(EXEC).8 $(DESTDIR)$(mandir)/man8 -+ $(Q)$(INSTALL_PROGRAM) -d $(DESTDIR)$(bindir) -+ $(Q)$(INSTALL_PROGRAM) -m 755 $(EXEC) $(DESTDIR)$(bindir)/ -+ $(Q)$(INSTALL_PROGRAM) -d $(DESTDIR)$(mandir)/man8 -+ $(Q)$(INSTALL_PROGRAM) -m 644 $(EXEC).8 $(DESTDIR)$(mandir)/man8 - - clean: dep_clean -- $(RM) core *.o $(EXEC) -+ $(Q)$(RM) core *.o $(EXEC) - - include $(wildcard $(OBJS:.o=.d)) - - uninstall: -- $(RM) $(DESTDIR)$(bindir)/$(EXEC) -- $(RM) $(DESTDIR)$(mandir)/man8/$(EXEC).8 -+ $(Q)$(RM) $(DESTDIR)$(bindir)/$(EXEC) -+ $(Q)$(RM) $(DESTDIR)$(mandir)/man8/$(EXEC).8 - - dep_clean: -- $(RM) $(OBJS:.o=.d) -+ $(Q)$(RM) $(OBJS:.o=.d) -diff --git a/multipath/Makefile b/multipath/Makefile -index 7f7b341d..73db991a 100644 ---- a/multipath/Makefile -+++ b/multipath/Makefile -@@ -16,44 +16,46 @@ OBJS := main.o - all: $(EXEC) multipath.rules tmpfiles.conf - - $(EXEC): $(OBJS) $(multipathdir)/libmultipath.so $(mpathcmddir)/libmpathcmd.so -- $(CC) $(CFLAGS) $(OBJS) -o $(EXEC) $(LDFLAGS) $(LIBDEPS) -+ @echo building $@ because of $? -+ $(Q)$(CC) $(CFLAGS) $(OBJS) -o $(EXEC) $(LDFLAGS) $(LIBDEPS) - - install: -- $(INSTALL_PROGRAM) -d $(DESTDIR)$(bindir) -- $(INSTALL_PROGRAM) -m 755 $(EXEC) $(DESTDIR)$(bindir)/ -- $(INSTALL_PROGRAM) -d $(DESTDIR)$(udevrulesdir) -- $(INSTALL_PROGRAM) -m 644 11-dm-mpath.rules $(DESTDIR)$(udevrulesdir) -- $(INSTALL_PROGRAM) -m 644 multipath.rules $(DESTDIR)$(udevrulesdir)/56-multipath.rules -- $(INSTALL_PROGRAM) -d $(DESTDIR)$(modulesloaddir) -- $(INSTALL_PROGRAM) -m 644 modules-load.conf $(DESTDIR)$(modulesloaddir)/multipath.conf -- $(INSTALL_PROGRAM) -d $(DESTDIR)$(tmpfilesdir) -- $(INSTALL_PROGRAM) -m 644 tmpfiles.conf $(DESTDIR)$(tmpfilesdir)/multipath.conf -- $(INSTALL_PROGRAM) -d $(DESTDIR)$(mandir)/man8 -- $(INSTALL_PROGRAM) -m 644 $(EXEC).8 $(DESTDIR)$(mandir)/man8 -- $(INSTALL_PROGRAM) -d $(DESTDIR)$(mandir)/man5 -- $(INSTALL_PROGRAM) -m 644 $(EXEC).conf.5 $(DESTDIR)$(mandir)/man5 -+ $(Q)$(INSTALL_PROGRAM) -d $(DESTDIR)$(bindir) -+ $(Q)$(INSTALL_PROGRAM) -m 755 $(EXEC) $(DESTDIR)$(bindir)/ -+ $(Q)$(INSTALL_PROGRAM) -d $(DESTDIR)$(udevrulesdir) -+ $(Q)$(INSTALL_PROGRAM) -m 644 11-dm-mpath.rules $(DESTDIR)$(udevrulesdir) -+ $(Q)$(INSTALL_PROGRAM) -m 644 multipath.rules $(DESTDIR)$(udevrulesdir)/56-multipath.rules -+ $(Q)$(INSTALL_PROGRAM) -d $(DESTDIR)$(modulesloaddir) -+ $(Q)$(INSTALL_PROGRAM) -m 644 modules-load.conf $(DESTDIR)$(modulesloaddir)/multipath.conf -+ $(Q)$(INSTALL_PROGRAM) -d $(DESTDIR)$(tmpfilesdir) -+ $(Q)$(INSTALL_PROGRAM) -m 644 tmpfiles.conf $(DESTDIR)$(tmpfilesdir)/multipath.conf -+ $(Q)$(INSTALL_PROGRAM) -d $(DESTDIR)$(mandir)/man8 -+ $(Q)$(INSTALL_PROGRAM) -m 644 $(EXEC).8 $(DESTDIR)$(mandir)/man8 -+ $(Q)$(INSTALL_PROGRAM) -d $(DESTDIR)$(mandir)/man5 -+ $(Q)$(INSTALL_PROGRAM) -m 644 $(EXEC).conf.5 $(DESTDIR)$(mandir)/man5 - ifneq ($(SCSI_DH_MODULES_PRELOAD),) -- $(INSTALL_PROGRAM) -m 644 scsi_dh.conf $(DESTDIR)$(modulesloaddir)/scsi_dh.conf -- for _x in $(SCSI_DH_MODULES_PRELOAD); do echo "$$_x"; done \ -+ $(Q)$(INSTALL_PROGRAM) -m 644 scsi_dh.conf $(DESTDIR)$(modulesloaddir)/scsi_dh.conf -+ $(Q)for _x in $(SCSI_DH_MODULES_PRELOAD); do echo "$$_x"; done \ - >>$(DESTDIR)$(modulesloaddir)/scsi_dh.conf - endif - - uninstall: -- $(RM) $(DESTDIR)$(bindir)/$(EXEC) -- $(RM) $(DESTDIR)$(udevrulesdir)/11-dm-mpath.rules -- $(RM) $(DESTDIR)$(modulesloaddir)/multipath.conf -- $(RM) $(DESTDIR)$(modulesloaddir)/scsi_dh.conf -- $(RM) $(DESTDIR)$(libudevdir)/rules.d/56-multipath.rules -- $(RM) $(DESTDIR)$(mandir)/man8/$(EXEC).8 -- $(RM) $(DESTDIR)$(mandir)/man5/$(EXEC).conf.5 -+ $(Q)$(RM) $(DESTDIR)$(bindir)/$(EXEC) -+ $(Q)$(RM) $(DESTDIR)$(udevrulesdir)/11-dm-mpath.rules -+ $(Q)$(RM) $(DESTDIR)$(modulesloaddir)/multipath.conf -+ $(Q)$(RM) $(DESTDIR)$(modulesloaddir)/scsi_dh.conf -+ $(Q)$(RM) $(DESTDIR)$(libudevdir)/rules.d/56-multipath.rules -+ $(Q)$(RM) $(DESTDIR)$(mandir)/man8/$(EXEC).8 -+ $(Q)$(RM) $(DESTDIR)$(mandir)/man5/$(EXEC).conf.5 - - clean: dep_clean -- $(RM) core *.o $(EXEC) multipath.rules tmpfiles.conf -+ $(Q)$(RM) core *.o $(EXEC) multipath.rules tmpfiles.conf - - include $(wildcard $(OBJS:.o=.d)) - - dep_clean: -- $(RM) $(OBJS:.o=.d) -+ $(Q)$(RM) $(OBJS:.o=.d) - - %: %.in -- sed 's,@RUNTIME_DIR@,$(runtimedir),' $< >$@ -+ @echo creating $@ -+ $(Q)sed 's,@RUNTIME_DIR@,$(runtimedir),' $< >$@ -diff --git a/multipathd/Makefile b/multipathd/Makefile -index 587bb916..9d531329 100644 ---- a/multipathd/Makefile -+++ b/multipathd/Makefile -@@ -45,41 +45,43 @@ endif - all : $(EXEC) $(CLI) - - $(EXEC): $(OBJS) $(multipathdir)/libmultipath.so $(mpathcmddir)/libmpathcmd.so -- $(CC) $(CFLAGS) $(OBJS) $(LDFLAGS) -o $(EXEC) $(LIBDEPS) -+ @echo building $@ because of $? -+ $(Q)$(CC) $(CFLAGS) $(OBJS) $(LDFLAGS) -o $(EXEC) $(LIBDEPS) - - multipathc.o: multipathc.c -- $(CC) $(CPPFLAGS) $(RL_CPPFLAGS) $(CFLAGS) -Wno-unused-parameter -c -o $@ $< -+ $(Q)$(CC) $(CPPFLAGS) $(RL_CPPFLAGS) $(CFLAGS) -Wno-unused-parameter -c -o $@ $< - - $(CLI): $(CLI_OBJS) -- $(CC) $(CFLAGS) $(CLI_OBJS) $(LDFLAGS) -o $@ $(CLI_LIBDEPS) $(RL_LIBDEPS) -+ @echo building $@ because of $? -+ $(Q)$(CC) $(CFLAGS) $(CLI_OBJS) $(LDFLAGS) -o $@ $(CLI_LIBDEPS) $(RL_LIBDEPS) - - cli_handlers.o: cli_handlers.c -- $(CC) $(CPPFLAGS) $(CFLAGS) -Wno-unused-parameter -c -o $@ $< -+ $(Q)$(CC) $(CPPFLAGS) $(CFLAGS) -Wno-unused-parameter -c -o $@ $< - - install: -- $(INSTALL_PROGRAM) -d $(DESTDIR)$(bindir) -- $(INSTALL_PROGRAM) -m 755 $(EXEC) $(DESTDIR)$(bindir) -- $(INSTALL_PROGRAM) -m 755 $(CLI) $(DESTDIR)$(bindir) -+ $(Q)$(INSTALL_PROGRAM) -d $(DESTDIR)$(bindir) -+ $(Q)$(INSTALL_PROGRAM) -m 755 $(EXEC) $(DESTDIR)$(bindir) -+ $(Q)$(INSTALL_PROGRAM) -m 755 $(CLI) $(DESTDIR)$(bindir) - ifdef SYSTEMD -- $(INSTALL_PROGRAM) -d $(DESTDIR)$(unitdir) -- $(INSTALL_PROGRAM) -m 644 $(EXEC).service $(DESTDIR)$(unitdir) -- $(INSTALL_PROGRAM) -m 644 $(EXEC).socket $(DESTDIR)$(unitdir) -+ $(Q)$(INSTALL_PROGRAM) -d $(DESTDIR)$(unitdir) -+ $(Q)$(INSTALL_PROGRAM) -m 644 $(EXEC).service $(DESTDIR)$(unitdir) -+ $(Q)$(INSTALL_PROGRAM) -m 644 $(EXEC).socket $(DESTDIR)$(unitdir) - endif -- $(INSTALL_PROGRAM) -d $(DESTDIR)$(mandir)/man8 -- $(INSTALL_PROGRAM) -m 644 $(EXEC).8 $(DESTDIR)$(mandir)/man8 -- $(INSTALL_PROGRAM) -m 644 $(CLI).8 $(DESTDIR)$(mandir)/man8 -+ $(Q)$(INSTALL_PROGRAM) -d $(DESTDIR)$(mandir)/man8 -+ $(Q)$(INSTALL_PROGRAM) -m 644 $(EXEC).8 $(DESTDIR)$(mandir)/man8 -+ $(Q)$(INSTALL_PROGRAM) -m 644 $(CLI).8 $(DESTDIR)$(mandir)/man8 - - uninstall: -- $(RM) $(DESTDIR)$(bindir)/$(EXEC) $(DESTDIR)$(bindir)/$(CLI) -- $(RM) $(DESTDIR)$(mandir)/man8/$(EXEC).8 -- $(RM) $(DESTDIR)$(mandir)/man8/$(CLI).8 -- $(RM) $(DESTDIR)$(unitdir)/$(EXEC).service -- $(RM) $(DESTDIR)$(unitdir)/$(EXEC).socket -+ $(Q)$(RM) $(DESTDIR)$(bindir)/$(EXEC) $(DESTDIR)$(bindir)/$(CLI) -+ $(Q)$(RM) $(DESTDIR)$(mandir)/man8/$(EXEC).8 -+ $(Q)$(RM) $(DESTDIR)$(mandir)/man8/$(CLI).8 -+ $(Q)$(RM) $(DESTDIR)$(unitdir)/$(EXEC).service -+ $(Q)$(RM) $(DESTDIR)$(unitdir)/$(EXEC).socket - - clean: dep_clean -- $(RM) core *.o $(EXEC) $(CLI) -+ $(Q)$(RM) core *.o $(EXEC) $(CLI) - - include $(wildcard $(OBJS:.o=.d)) - - dep_clean: -- $(RM) $(OBJS:.o=.d) -+ $(Q)$(RM) $(OBJS:.o=.d) -diff --git a/rules.mk b/rules.mk -index d8612527..c3a8e7ac 100644 ---- a/rules.mk -+++ b/rules.mk -@@ -2,17 +2,17 @@ - # SPDX-License-Identifier: GPL-2.0-or-later - - $(DEVLIB): $(LIBS) -- $(LN) $(LIBS) $@ -+ $(Q)$(LN) $(LIBS) $@ - - $(LIBS): $(OBJS) $(VERSION_SCRIPT) -- $(CC) $(LDFLAGS) $(SHARED_FLAGS) -Wl,-soname=$@ \ -+ $(Q)$(CC) $(LDFLAGS) $(SHARED_FLAGS) -Wl,-soname=$@ \ - -Wl,--version-script=$(VERSION_SCRIPT) -o $@ $(OBJS) $(LIBDEPS) - - $(LIBS:%.so.$(SONAME)=%-nv.so): $(OBJS) $(NV_VERSION_SCRIPT) -- $(CC) $(LDFLAGS) $(SHARED_FLAGS) -Wl,-soname=$@ \ -+ $(Q)$(CC) $(LDFLAGS) $(SHARED_FLAGS) -Wl,-soname=$@ \ - -Wl,--version-script=$(NV_VERSION_SCRIPT) -o $@ $(OBJS) $(LIBDEPS) - - abi: $(LIBS:%.so.$(SONAME)=%-nv.abi) - - $(TOPDIR)/config.mk $(multipathdir)/autoconfig.h: -- $(MAKE) -C $(TOPDIR) -f create-config.mk -+ $(Q)$(MAKE) -C $(TOPDIR) -f create-config.mk -diff --git a/tests/Makefile b/tests/Makefile -index d9856d17..021da0b0 100644 ---- a/tests/Makefile -+++ b/tests/Makefile -@@ -12,7 +12,6 @@ TESTS := uevent parser util dmevents hwtable blacklist unaligned vpd pgpolicy \ - alias directio valid devt mpathvalid strbuf sysfs features cli - HELPERS := test-lib.o test-log.o - --.SILENT: $(TESTS:%=%.o) - .PRECIOUS: $(TESTS:%=%-test) - - all: $(TESTS:%=%.out) -@@ -71,11 +70,12 @@ features-test_LIBDEPS := -ludev -lpthread - cli-test_OBJDEPS := $(daemondir)/cli.o - - %.o: %.c -- $(CC) $(CPPFLAGS) $(CFLAGS) $($*-test_FLAGS) -c -o $@ $< -+ @echo building $@ because of $? -+ $(Q)$(CC) $(CPPFLAGS) $(CFLAGS) $($*-test_FLAGS) -c -o $@ $< - - lib/libchecktur.so: -- mkdir -p lib -- cd lib && ln -s ../$(multipathdir)/*/*.so . -+ @mkdir -p lib -+ $(Q)cd lib && ln -s ../$(multipathdir)/*/*.so . - - %.out: %-test lib/libchecktur.so - @echo == running $< == -@@ -89,34 +89,35 @@ lib/libchecktur.so: - OBJS = $(TESTS:%=%.o) $(HELPERS) - - test_clean: -- $(RM) $(TESTS:%=%.out) $(TESTS:%=%.vgr) *.so* -+ $(Q)$(RM) $(TESTS:%=%.out) $(TESTS:%=%.vgr) *.so* - - valgrind_clean: -- $(RM) $(TESTS:%=%.vgr) -+ $(Q)$(RM) $(TESTS:%=%.vgr) - - clean: test_clean valgrind_clean dep_clean -- $(RM) $(TESTS:%=%-test) $(OBJS) *.o.wrap -- $(RM) -rf lib conf.d -+ $(Q)$(RM) $(TESTS:%=%-test) $(OBJS) *.o.wrap -+ $(Q)$(RM) -rf lib conf.d - - .SECONDARY: $(OBJS) - - include $(wildcard $(OBJS:.o=.d)) - - dep_clean: -- $(RM) $(OBJS:.o=.d) -+ $(Q)$(RM) $(OBJS:.o=.d) - - %.o.wrap: %.c - @sed -n 's/^.*__wrap_\([a-zA-Z0-9_]*\).*$$/-Wl,--wrap=\1/p' $< | \ - sort -u | tr '\n' ' ' >$@ - - libmultipath.so.0: $(multipathdir)/libmultipath.so.0 -- make -C $(multipathdir) configdir=$(TESTDIR)/conf.d plugindir=$(TESTDIR)/lib test-lib -+ @make -C $(multipathdir) configdir=$(TESTDIR)/conf.d plugindir=$(TESTDIR)/lib test-lib - - # COLON will get expanded during second expansion below - COLON:=: - .SECONDEXPANSION: - %-test: %.o %.o.wrap $$($$@_OBJDEPS) $$($$@_TESTDEPS) $$($$@_TESTDEPS$$(COLON).o=.o.wrap) \ - libmultipath.so.0 $(mpathutildir)/libmpathutil.so.0 $(mpathcmddir)/libmpathcmd.so.0 Makefile -- $(CC) $(CFLAGS) -o $@ $(LDFLAGS) $< $($@_TESTDEPS) $($@_OBJDEPS) \ -+ @echo building $@ -+ $(Q)$(CC) $(CFLAGS) -o $@ $(LDFLAGS) $< $($@_TESTDEPS) $($@_OBJDEPS) \ - $(LIBDEPS) $($@_LIBDEPS) \ - $(shell cat $<.wrap) $(foreach dep,$($@_TESTDEPS),$(shell cat $(dep).wrap)) diff --git a/0043-RH-add-scsi-device-handlers-to-modules-load.d.patch b/0021-RH-add-scsi-device-handlers-to-modules-load.d.patch similarity index 96% rename from 0043-RH-add-scsi-device-handlers-to-modules-load.d.patch rename to 0021-RH-add-scsi-device-handlers-to-modules-load.d.patch index 72fbfe8..26b0d06 100644 --- a/0043-RH-add-scsi-device-handlers-to-modules-load.d.patch +++ b/0021-RH-add-scsi-device-handlers-to-modules-load.d.patch @@ -11,7 +11,7 @@ Signed-off-by: Benjamin Marzinski 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Makefile.inc b/Makefile.inc -index e6e7f7d7..15f0b9f6 100644 +index 748911e2..c07bcb0c 100644 --- a/Makefile.inc +++ b/Makefile.inc @@ -16,7 +16,7 @@ READLINE := diff --git a/0021-multipath-tools-quiet-build-support-for-top-level-Ma.patch b/0021-multipath-tools-quiet-build-support-for-top-level-Ma.patch deleted file mode 100644 index d45f99f..0000000 --- a/0021-multipath-tools-quiet-build-support-for-top-level-Ma.patch +++ /dev/null @@ -1,183 +0,0 @@ -From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 -From: Martin Wilck -Date: Fri, 28 Oct 2022 14:39:22 +0200 -Subject: [PATCH] multipath-tools: quiet build support for top-level Makefile - -This requires including "Makefile.inc" in the top-level Makefile, -too. - -Signed-off-by: Martin Wilck -Signed-off-by: Benjamin Marzinski ---- - Makefile | 32 ++++++++++++++++++------------ - Makefile.inc | 8 ++++++-- - create-config.mk | 1 - - libmultipath/checkers/Makefile | 2 +- - libmultipath/foreign/Makefile | 2 +- - libmultipath/prioritizers/Makefile | 2 +- - 6 files changed, 28 insertions(+), 19 deletions(-) - -diff --git a/Makefile b/Makefile -index e3ce1a8d..b9e30234 100644 ---- a/Makefile -+++ b/Makefile -@@ -2,6 +2,9 @@ - # Copyright (C) 2003 Christophe Varoqui, - # - -+TOPDIR := . -+include Makefile.inc -+ - LIB_BUILDDIRS := \ - libmpathcmd \ - libmpathutil \ -@@ -32,10 +35,12 @@ all: $(BUILDDIRS) - - config.mk libmultipath/autoconfig.h: - @$(MAKE) -f create-config.mk -+ifeq ($(V),1) - @echo ==== config.mk ==== - @cat config.mk - @echo ==== autoconfig.h ==== - @cat libmultipath/autoconfig.h -+endif - - $(BUILDDIRS): config.mk - @$(MAKE) -C $@ -@@ -48,11 +53,12 @@ $(LIB_BUILDDIRS:=.abi): $(LIB_BUILDDIRS) - # Requires abidw from the abigail suite (https://sourceware.org/libabigail/) - .PHONY: abi - abi: $(LIB_BUILDDIRS:=.abi) -+ @echo creating abi - @mkdir -p $@ -- ln -ft $@ $(LIB_BUILDDIRS:=/*.abi) -+ $(Q)ln -ft $@ $(LIB_BUILDDIRS:=/*.abi) - - abi.tar.gz: abi -- tar cfz $@ abi -+ $(Q)tar cfz $@ abi - - # Check the ABI against a reference. - # This requires the ABI from a previous run to be present -@@ -77,8 +83,8 @@ abi-test: abi reference-abi $(wildcard abi/*.abi) - # Create compile_commands.json, useful for using clangd with an IDE - # Requires bear (https://github.com/rizsotto/Bear) - compile_commands.json: Makefile Makefile.inc $(BUILDDIRS:=/Makefile) -- $(MAKE) clean -- bear -- $(MAKE) -+ $(Q)$(MAKE) clean -+ $(Q)bear -- $(MAKE) - - libmpathutil libdmmp: libmpathcmd - libmultipath: libmpathutil -@@ -103,24 +109,24 @@ $(BUILDDIRS:=.uninstall): - # build it. Both is undesirable. Avoid it by creating config.mk temporarily. - clean: - @touch config.mk -- $(MAKE) $(BUILDDIRS:=.clean) tests.clean || true -- rm -rf abi abi.tar.gz abi-test compile_commands.json config.mk -+ $(Q)$(MAKE) $(BUILDDIRS:=.clean) tests.clean || true -+ $(Q)$(RM) -r abi abi.tar.gz abi-test compile_commands.json config.mk - - install: $(BUILDDIRS:=.install) - uninstall: $(BUILDDIRS:=.uninstall) - - test-progs: all -- $(MAKE) -C tests progs -+ @$(MAKE) -C tests progs - - test: all -- $(MAKE) -C tests all -+ @$(MAKE) -C tests all - - valgrind-test: all -- $(MAKE) -C tests valgrind -+ @$(MAKE) -C tests valgrind - - .PHONY: TAGS - TAGS: -- etags -a libmultipath/*.c -- etags -a libmultipath/*.h -- etags -a multipathd/*.c -- etags -a multipathd/*.h -+ @etags -a libmultipath/*.c -+ @etags -a libmultipath/*.h -+ @etags -a multipathd/*.c -+ @etags -a multipathd/*.h -diff --git a/Makefile.inc b/Makefile.inc -index 3e14cb8c..866ab274 100644 ---- a/Makefile.inc -+++ b/Makefile.inc -@@ -27,7 +27,7 @@ PKGCONFIG ?= pkg-config - ifeq ($(TOPDIR),) - TOPDIR = .. - endif --ifneq ($(CREATE_CONFIG),1) -+ifneq ($(TOPDIR),.) - include $(TOPDIR)/config.mk - endif - -@@ -60,7 +60,11 @@ devmapper_incdir := $(or $(shell $(PKGCONFIG) --variable=includedir devmapper),/ - libudev_incdir := $(or $(shell $(PKGCONFIG) --variable=includedir libudev),/usr/include) - kernel_incdir := /usr/include - --Q := $(if $(V),,@) -+ifeq ($(V),) -+Q := @ -+# make's "Entering directory" messages are confusing in parallel mode -+#MAKEFLAGS = --no-print-directory -+endif - - GZIP_PROG := gzip -9 -c - RM := rm -f -diff --git a/create-config.mk b/create-config.mk -index 2cc5284f..434dee06 100644 ---- a/create-config.mk -+++ b/create-config.mk -@@ -2,7 +2,6 @@ - # SPDX-License-Identifier: GPL-2.0-or-later - - TOPDIR := . --CREATE_CONFIG := 1 - include $(TOPDIR)/Makefile.inc - - # Check whether a function with name $1 has been declared in header file $2. -diff --git a/libmultipath/checkers/Makefile b/libmultipath/checkers/Makefile -index b3120611..6f7cfb95 100644 ---- a/libmultipath/checkers/Makefile -+++ b/libmultipath/checkers/Makefile -@@ -28,7 +28,7 @@ install: - $(Q)$(INSTALL_PROGRAM) -m 755 $(LIBS) $(DESTDIR)$(plugindir) - - uninstall: -- for file in $(LIBS); do $(RM) $(DESTDIR)$(plugindir)/$$file; done -+ $(Q)for file in $(LIBS); do $(RM) $(DESTDIR)$(plugindir)/$$file; done - - clean: dep_clean - $(Q)$(RM) core *.a *.o *.gz *.so -diff --git a/libmultipath/foreign/Makefile b/libmultipath/foreign/Makefile -index 0e245d6f..b83213d6 100644 ---- a/libmultipath/foreign/Makefile -+++ b/libmultipath/foreign/Makefile -@@ -20,7 +20,7 @@ install: - $(Q)$(INSTALL_PROGRAM) -m 755 $(LIBS) $(DESTDIR)$(plugindir) - - uninstall: -- for file in $(LIBS); do $(RM) $(DESTDIR)$(plugindir)/$$file; done -+ $(Q)for file in $(LIBS); do $(RM) $(DESTDIR)$(plugindir)/$$file; done - - clean: dep_clean - $(Q)$(RM) core *.a *.o *.gz *.so -diff --git a/libmultipath/prioritizers/Makefile b/libmultipath/prioritizers/Makefile -index e1688163..fdec36e7 100644 ---- a/libmultipath/prioritizers/Makefile -+++ b/libmultipath/prioritizers/Makefile -@@ -40,7 +40,7 @@ install: $(LIBS) - $(Q)$(INSTALL_PROGRAM) -m 755 libprio*.so $(DESTDIR)$(plugindir) - - uninstall: -- for file in $(LIBS); do $(RM) $(DESTDIR)$(plugindir)/$$file; done -+ $(Q)for file in $(LIBS); do $(RM) $(DESTDIR)$(plugindir)/$$file; done - - clean: dep_clean - $(Q)$(RM) core *.a *.o *.gz *.so diff --git a/0022-GitHub-workflows-use-make-j8-Orecurse.patch b/0022-GitHub-workflows-use-make-j8-Orecurse.patch deleted file mode 100644 index 33b7dcd..0000000 --- a/0022-GitHub-workflows-use-make-j8-Orecurse.patch +++ /dev/null @@ -1,132 +0,0 @@ -From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 -From: Martin Wilck -Date: Fri, 28 Oct 2022 15:29:51 +0200 -Subject: [PATCH] GitHub workflows: use make -j8 -Orecurse - -Without -Orecurse, quiet make output is confusing in parallel mode -because make prints "Entering directory" and "Leaving directory" -messages before and after every target. - -Use parallel compilation also in native.yaml and foreign.yaml. - -Signed-off-by: Martin Wilck -Signed-off-by: Benjamin Marzinski ---- - .github/workflows/abi.yaml | 2 +- - .github/workflows/build-and-unittest.yaml | 18 +++++++++--------- - .github/workflows/coverity.yaml | 2 +- - .github/workflows/foreign.yaml | 4 ++-- - .github/workflows/native.yaml | 6 +++--- - 5 files changed, 16 insertions(+), 16 deletions(-) - -diff --git a/.github/workflows/abi.yaml b/.github/workflows/abi.yaml -index 89b971cd..644fcb62 100644 ---- a/.github/workflows/abi.yaml -+++ b/.github/workflows/abi.yaml -@@ -32,7 +32,7 @@ jobs: - libdevmapper-dev libreadline-dev libaio-dev libsystemd-dev - libudev-dev libjson-c-dev liburcu-dev libcmocka-dev libedit-dev - - name: create ABI -- run: make -O -j$(grep -c ^processor /proc/cpuinfo) abi.tar.gz -+ run: make -Orecurse -j$(grep -c ^processor /proc/cpuinfo) abi.tar.gz - - name: save ABI - uses: actions/upload-artifact@v1 - with: -diff --git a/.github/workflows/build-and-unittest.yaml b/.github/workflows/build-and-unittest.yaml -index a5a0717d..8b6bb776 100644 ---- a/.github/workflows/build-and-unittest.yaml -+++ b/.github/workflows/build-and-unittest.yaml -@@ -32,11 +32,11 @@ jobs: - libdevmapper-dev libreadline-dev libaio-dev libsystemd-dev - libudev-dev libjson-c-dev liburcu-dev libcmocka-dev libedit-dev - - name: build -- run: make -O -j$(grep -c ^processor /proc/cpuinfo) READLINE=${{ matrix.rl }} -+ run: make -Orecurse -j$(grep -c ^processor /proc/cpuinfo) READLINE=${{ matrix.rl }} - - name: test -- run: make -O -j$(grep -c ^processor /proc/cpuinfo) test -+ run: make -Orecurse -j$(grep -c ^processor /proc/cpuinfo) test - - name: valgrind-test -- run: make -O -j$(grep -c ^processor /proc/cpuinfo) valgrind-test -+ run: make -Orecurse -j$(grep -c ^processor /proc/cpuinfo) valgrind-test - - name: valgrind-results - run: cat tests/*.vgr - - name: clean-nonroot-artifacts -@@ -65,11 +65,11 @@ jobs: - - name: set CC - run: echo CC=gcc-10 >> $GITHUB_ENV - - name: build -- run: make -O -j$(grep -c ^processor /proc/cpuinfo) READLINE=${{ matrix.rl }} -+ run: make -Orecurse -j$(grep -c ^processor /proc/cpuinfo) READLINE=${{ matrix.rl }} - - name: test -- run: make -O -j$(grep -c ^processor /proc/cpuinfo) test -+ run: make -Orecurse -j$(grep -c ^processor /proc/cpuinfo) test - - name: valgrind-test -- run: make -O -j$(grep -c ^processor /proc/cpuinfo) valgrind-test -+ run: make -Orecurse -j$(grep -c ^processor /proc/cpuinfo) valgrind-test - - name: valgrind-results - run: cat tests/*.vgr - - name: clean-nonroot-artifacts -@@ -98,11 +98,11 @@ jobs: - - name: set CC - run: echo CC=clang >> $GITHUB_ENV - - name: build -- run: make -O -j$(grep -c ^processor /proc/cpuinfo) READLINE=${{ matrix.rl }} -+ run: make -Orecurse -j$(grep -c ^processor /proc/cpuinfo) READLINE=${{ matrix.rl }} - - name: test -- run: make -O -j$(grep -c ^processor /proc/cpuinfo) test -+ run: make -Orecurse -j$(grep -c ^processor /proc/cpuinfo) test - - name: valgrind-test -- run: make -O -j$(grep -c ^processor /proc/cpuinfo) valgrind-test -+ run: make -Orecurse -j$(grep -c ^processor /proc/cpuinfo) valgrind-test - - name: valgrind-results - run: cat tests/*.vgr - - name: clean-nonroot-artifacts -diff --git a/.github/workflows/coverity.yaml b/.github/workflows/coverity.yaml -index 3c6b3824..321b94e0 100644 ---- a/.github/workflows/coverity.yaml -+++ b/.github/workflows/coverity.yaml -@@ -32,7 +32,7 @@ jobs: - - name: build with cov-build - run: > - PATH="$PWD/coverity/bin:$PATH" -- cov-build --dir cov-int make -O -j"$(grep -c ^processor /proc/cpuinfo)" -+ cov-build --dir cov-int make -Orecurse -j"$(grep -c ^processor /proc/cpuinfo)" - - name: pack results - run: tar cfz multipath-tools.tgz cov-int - - name: submit results -diff --git a/.github/workflows/foreign.yaml b/.github/workflows/foreign.yaml -index 5a19913a..72ac24fb 100644 ---- a/.github/workflows/foreign.yaml -+++ b/.github/workflows/foreign.yaml -@@ -21,11 +21,11 @@ jobs: - uses: actions/checkout@v1 - - name: build and test - if: ${{ matrix.arch == '' || matrix.arch == '-i386' }} -- run: make test -+ run: make -j8 -Orecurse test - - name: build - if: ${{ matrix.arch != '' && matrix.arch != '-i386' }} - # The build path is different between builder and runner -- run: make TESTDIR=${{ github.workspace }}/tests test-progs -+ run: make -j8 -Orecurse TESTDIR=${{ github.workspace }}/tests test-progs - - name: archive - if: ${{ matrix.arch != '' && matrix.arch != '-i386' }} - run: > -diff --git a/.github/workflows/native.yaml b/.github/workflows/native.yaml -index 8b599209..68bf0984 100644 ---- a/.github/workflows/native.yaml -+++ b/.github/workflows/native.yaml -@@ -92,10 +92,10 @@ jobs: - - name: checkout - uses: actions/checkout@v1 - - name: build and test -- run: make test -+ run: make -j8 -Orecurse test - - name: clean -- run: make clean -+ run: make -j8 -Orecurse clean - - name: clang - env: - CC: clang -- run: make test -+ run: make -j8 -Orecurse test diff --git a/0044-RH-compile-with-libreadline-support.patch b/0022-RH-compile-with-libreadline-support.patch similarity index 96% rename from 0044-RH-compile-with-libreadline-support.patch rename to 0022-RH-compile-with-libreadline-support.patch index b6d59f5..df99295 100644 --- a/0044-RH-compile-with-libreadline-support.patch +++ b/0022-RH-compile-with-libreadline-support.patch @@ -12,7 +12,7 @@ Signed-off-by: Benjamin Marzinski 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Makefile.inc b/Makefile.inc -index 15f0b9f6..881c1d52 100644 +index c07bcb0c..e59313c6 100644 --- a/Makefile.inc +++ b/Makefile.inc @@ -12,7 +12,7 @@ diff --git a/0023-README.md-Move-section-about-libedit-and-libreadline.patch b/0023-README.md-Move-section-about-libedit-and-libreadline.patch deleted file mode 100644 index b860971..0000000 --- a/0023-README.md-Move-section-about-libedit-and-libreadline.patch +++ /dev/null @@ -1,48 +0,0 @@ -From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 -From: Martin Wilck -Date: Fri, 28 Oct 2022 15:40:16 +0200 -Subject: [PATCH] README.md: Move section about libedit and libreadline - -This paragraph belongs in the "Customiting build" section. - -Signed-off-by: Martin Wilck -Signed-off-by: Benjamin Marzinski ---- - README.md | 17 +++++++++-------- - 1 file changed, 9 insertions(+), 8 deletions(-) - -diff --git a/README.md b/README.md -index d003e1db..52ab776b 100644 ---- a/README.md -+++ b/README.md -@@ -53,14 +53,9 @@ Building multipath-tools - ======================== - - Prerequisites: development packages of for `libdevmapper`, `libaio`, `libudev`, --`libjson-c`, `liburcu`, and `libsystemd`. -- --To enable commandline history and TAB completion in the interactive mode *(which --is entered with `multipathd -k` or `multipathc`)* you might also set `READLINE` --make variable to `libedit` or `libreadline`, like `make READLINE=libreadline`. --That requires a development package for the library you chose. Note that using --libreadline may [make binary indistributable due to license --incompatibility](https://github.com/opensvc/multipath-tools/issues/36). -+`libjson-c`, `liburcu`, and `libsystemd`. If commandline editing is enabled -+(see below), the development package for either `libedit` or `libreadline` is -+required as well. - - Then, build and install multipath-tools with: - -@@ -82,6 +77,12 @@ The following variables can be passed to the `make` command line: - * `configdir="/some/path"` : directory to search for configuration files. - This used to be the run-time option `config_dir` in earlier versions. - The default is `/etc/multipath/conf.d`. -+ * `READLINE=libedit` or `READLINE=libreadline`: enable command line history -+ and TAB completion in the interactive mode *(which is entered with `multipathd -k` or `multipathc`)*. -+ The respective development package will be required for building. -+ By default, command line editing is disabled. -+ Note that using libreadline may -+ [make binary indistributable due to license incompatibility](https://github.com/opensvc/multipath-tools/issues/36). - * `ENABLE_LIBDMMP=0`: disable building libdmmp - * `ENABLE_DMEVENTS_POLL=0`: disable support for the device-mapper event - polling API. For use with pre-5.0 kernels that don't support dmevent polling diff --git a/0024-README.md-Fix-indentation-in-paragraph-about-device-.patch b/0024-README.md-Fix-indentation-in-paragraph-about-device-.patch deleted file mode 100644 index 63b6c2f..0000000 --- a/0024-README.md-Fix-indentation-in-paragraph-about-device-.patch +++ /dev/null @@ -1,34 +0,0 @@ -From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 -From: Martin Wilck -Date: Fri, 28 Oct 2022 15:42:15 +0200 -Subject: [PATCH] README.md: Fix indentation in paragraph about device handlers - -Signed-off-by: Martin Wilck -Signed-off-by: Benjamin Marzinski ---- - README.md | 12 ++++++------ - 1 file changed, 6 insertions(+), 6 deletions(-) - -diff --git a/README.md b/README.md -index 52ab776b..b1b78fbb 100644 ---- a/README.md -+++ b/README.md -@@ -94,12 +94,12 @@ The following variables can be passed to the `make` command line: - early. This option causes a *modules-load.d(5)* configuration file to be - created, thus it depends on functionality provided by *systemd*. - This variable only matters for `make install`. -- --Note: The usefulness of the preload list depends on the kernel configuration. --It's especially useful if `scsi_mod` is builtin but `scsi_dh_alua` and --other device handler modules are built as modules. If `scsi_mod` itself is compiled --as a module, it might make more sense to use a module softdep for the same --purpose. -+ -+ **Note**: The usefulness of the preload list depends on the kernel configuration. -+ It's especially useful if `scsi_mod` is builtin but `scsi_dh_alua` and -+ other device handler modules are built as modules. If `scsi_mod` itself is compiled -+ as a module, it might make more sense to use a module softdep for the same -+ purpose. - - See `Makefile.inc` for additional variables to customize paths and compiler - flags. diff --git a/0025-README.md-document-options-for-paths-and-optimizatio.patch b/0025-README.md-document-options-for-paths-and-optimizatio.patch deleted file mode 100644 index ca00d85..0000000 --- a/0025-README.md-document-options-for-paths-and-optimizatio.patch +++ /dev/null @@ -1,47 +0,0 @@ -From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 -From: Martin Wilck -Date: Fri, 28 Oct 2022 16:01:17 +0200 -Subject: [PATCH] README.md: document options for paths and optimization - -Signed-off-by: Martin Wilck -Signed-off-by: Benjamin Marzinski ---- - README.md | 25 +++++++++++++++++++++++-- - 1 file changed, 23 insertions(+), 2 deletions(-) - -diff --git a/README.md b/README.md -index b1b78fbb..ab7dc3c9 100644 ---- a/README.md -+++ b/README.md -@@ -101,8 +101,29 @@ The following variables can be passed to the `make` command line: - as a module, it might make more sense to use a module softdep for the same - purpose. - --See `Makefile.inc` for additional variables to customize paths and compiler --flags. -+### Installation Paths -+ -+ * `prefix`: The directory prefix for (almost) all files to be installed. -+ Distributions may want to set this to `/usr`. -+ **Note**: for multipath-tools, unlike many other packages, `prefix` -+ defaults to the empty string, which resolves to the root directory (`/`). -+ * `usr_prefix`: where to install those parts of the code that aren't necessary -+ for booting. You may want to set this to `/usr` if `prefix` is empty. -+ * `systemd_prefix`: Prefix for systemd-related files. It defaults to `/usr`. -+ Some systemd installations use separate `prefix` and `rootprefix`. On such -+ a distribution, set `prefix`, and override `unitdir` to use systemd's -+ `rootprefix`. -+ * `LIB`: the subdirectory under `prefix` where shared libraries will be -+ installed. By default, the makefile uses `/lib64` if this directory is -+ found on the build system, and `/lib` otherwise. -+ -+See also `configdir` and `plugindir` above. See `Makefile.inc` for more -+fine-grained control. -+ -+### Compiler Options -+ -+Use `OPTFLAGS` to change optimization-related compiler options; -+e.g. `OPTFLAGS="-g -O0"` to disable all optimizations. - - Special Makefile targets - ------------------------ diff --git a/0026-README.md-document-how-to-customize-build.patch b/0026-README.md-document-how-to-customize-build.patch deleted file mode 100644 index c3dfedb..0000000 --- a/0026-README.md-document-how-to-customize-build.patch +++ /dev/null @@ -1,37 +0,0 @@ -From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 -From: Martin Wilck -Date: Fri, 28 Oct 2022 16:01:41 +0200 -Subject: [PATCH] README.md: document how to customize build - -Signed-off-by: Martin Wilck -Signed-off-by: Benjamin Marzinski ---- - README.md | 12 ++++++++++++ - 1 file changed, 12 insertions(+) - -diff --git a/README.md b/README.md -index ab7dc3c9..bbeb44fe 100644 ---- a/README.md -+++ b/README.md -@@ -66,9 +66,21 @@ To uninstall, type: - - make uninstall - -+By default, the build will run quietly, just printing one-line messages -+about the files being built. To enable more verbose output, run `make V=1`. -+ - Customizing the build - --------------------- - -+**Note**: With very few exceptions, the build process does not read -+configuration from the environment. So using syntax like -+ -+ SOME_VAR=some_value make -+ -+will **not** have the intended effect. Use the following instead: -+ -+ make SOME_VAR=some_value -+ - The following variables can be passed to the `make` command line: - - * `plugindir="/some/path"`: directory where libmultipath plugins (path diff --git a/0027-libmultipath-avoid-Warray-bounds-error-with-gcc-12-a.patch b/0027-libmultipath-avoid-Warray-bounds-error-with-gcc-12-a.patch deleted file mode 100644 index 1ae51d8..0000000 --- a/0027-libmultipath-avoid-Warray-bounds-error-with-gcc-12-a.patch +++ /dev/null @@ -1,63 +0,0 @@ -From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 -From: Martin Wilck -Date: Fri, 28 Oct 2022 21:10:41 +0200 -Subject: [PATCH] libmultipath: avoid -Warray-bounds error with gcc 12 and musl - libc -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - -The following error is observed with gcc 12, strangely only with -MUSL libc: - -In function ‘__uatomic_inc’, - inlined from ‘lock’ at ../libmultipath/lock.h:24:2, - inlined from ‘child’ at main.c:3523:3, - inlined from ‘main’ at main.c:3755:11: -/usr/include/urcu/uatomic/x86.h:439:17: error: array subscript ‘struct __uatomic_dummy[0]’ is partly outside array bounds of ‘unsigned char[72]’ [-Werror=array-bounds] - -The problem is that &(vecs->lock.waiters) is casted to a pointer to -struct { long[10]; } which goes beyond the "struct vectors". -We don't read or write from/to that memory, but the compiler complains either -way. - -latest liburcu has a patch for it: - -http://git.liburcu.org/?p=userspace-rcu.git;a=commitdiff;h=835b9ab3ca3777fe42e37e92096226ebd19ca75b - -For now, just disable the warning in lock.h, using a pragma. - -Signed-off-by: Martin Wilck -Reported-by: Xose Vasquez Perez -Signed-off-by: Benjamin Marzinski ---- - libmultipath/lock.h | 9 +++++++++ - 1 file changed, 9 insertions(+) - -diff --git a/libmultipath/lock.h b/libmultipath/lock.h -index 20ca77e6..9814be76 100644 ---- a/libmultipath/lock.h -+++ b/libmultipath/lock.h -@@ -13,6 +13,11 @@ struct mutex_lock { - int waiters; /* uatomic access only */ - }; - -+#if !defined(__GLIBC__) && defined(__GNUC__) && __GNUC__ == 12 -+#pragma GCC diagnostic push -+#pragma GCC diagnostic ignored "-Warray-bounds" -+#endif -+ - static inline void init_lock(struct mutex_lock *a) - { - pthread_mutex_init(&a->mutex, NULL); -@@ -46,6 +51,10 @@ static inline bool lock_has_waiters(struct mutex_lock *a) - return (uatomic_read(&a->waiters) > 0); - } - -+#if !defined(__GLIBC__) && defined(__GNUC__) && __GNUC__ == 12 -+#pragma GCC diagnostic pop -+#endif -+ - #define lock_cleanup_pop(a) pthread_cleanup_pop(1) - - void cleanup_lock (void * data); diff --git a/0028-multipath-avoid-NULL-string-in-released_to_systemd.patch b/0028-multipath-avoid-NULL-string-in-released_to_systemd.patch deleted file mode 100644 index 2be93fc..0000000 --- a/0028-multipath-avoid-NULL-string-in-released_to_systemd.patch +++ /dev/null @@ -1,26 +0,0 @@ -From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 -From: Martin Wilck -Date: Tue, 27 Sep 2022 12:14:09 +0200 -Subject: [PATCH] multipath: avoid NULL string in released_to_systemd() - -Fixes: b28c406 ("multipath -u: don't grab devices already passed to system") -Signed-off-by: Martin Wilck -Signed-off-by: Benjamin Marzinski ---- - multipath/main.c | 3 ++- - 1 file changed, 2 insertions(+), 1 deletion(-) - -diff --git a/multipath/main.c b/multipath/main.c -index 7b69a3ce..b9f360b4 100644 ---- a/multipath/main.c -+++ b/multipath/main.c -@@ -435,7 +435,8 @@ static bool released_to_systemd(void) - bool ret; - - ret = dm_mp_dev_path != NULL && !strcmp(dm_mp_dev_path, "0"); -- condlog(4, "%s: %s=%s -> %d", __func__, dmdp, dm_mp_dev_path, ret); -+ condlog(4, "%s: %s=%s -> %d", __func__, dmdp, -+ dm_mp_dev_path ? dm_mp_dev_path : "", ret); - return ret; - } - diff --git a/0029-libmultipath-avoid-NULL-string-in-is_udev_ready.patch b/0029-libmultipath-avoid-NULL-string-in-is_udev_ready.patch deleted file mode 100644 index e48d44c..0000000 --- a/0029-libmultipath-avoid-NULL-string-in-is_udev_ready.patch +++ /dev/null @@ -1,26 +0,0 @@ -From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 -From: Martin Wilck -Date: Tue, 27 Sep 2022 12:28:26 +0200 -Subject: [PATCH] libmultipath: avoid NULL string in is_udev_ready() - -Fixes: 2b25a9e ("libmultipath: select_action(): force udev reload for uninitialized maps") -Signed-off-by: Martin Wilck -Signed-off-by: Benjamin Marzinski ---- - libmultipath/configure.c | 3 ++- - 1 file changed, 2 insertions(+), 1 deletion(-) - -diff --git a/libmultipath/configure.c b/libmultipath/configure.c -index e5249fc1..e551047a 100644 ---- a/libmultipath/configure.c -+++ b/libmultipath/configure.c -@@ -662,7 +662,8 @@ static bool is_udev_ready(struct multipath *cmpp) - env = udev_device_get_property_value(mpp_ud, "MPATH_DEVICE_READY"); - rc = (env != NULL && !strcmp(env, "1")); - udev_device_unref(mpp_ud); -- condlog(4, "%s: %s: \"%s\" -> %d\n", __func__, cmpp->alias, env, rc); -+ condlog(4, "%s: %s: \"%s\" -> %d\n", __func__, cmpp->alias, -+ env ? env : "", rc); - return rc; - } - diff --git a/0030-libmultipath-impove-add_feature-variable-names.patch b/0030-libmultipath-impove-add_feature-variable-names.patch deleted file mode 100644 index 9cc841d..0000000 --- a/0030-libmultipath-impove-add_feature-variable-names.patch +++ /dev/null @@ -1,115 +0,0 @@ -From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 -From: Benjamin Marzinski -Date: Wed, 9 Nov 2022 15:49:41 -0600 -Subject: [PATCH] libmultipath: impove add_feature() variable names - -Use descriptive names, instead of single letters. No functional changes. - -Signed-off-by: Benjamin Marzinski -Reviewed-by: Martin Wilck ---- - libmultipath/structs.c | 63 +++++++++++++++++++++--------------------- - 1 file changed, 32 insertions(+), 31 deletions(-) - -diff --git a/libmultipath/structs.c b/libmultipath/structs.c -index 7a2ff589..f90bd0b6 100644 ---- a/libmultipath/structs.c -+++ b/libmultipath/structs.c -@@ -604,65 +604,66 @@ first_path (const struct multipath * mpp) - return pgp?VECTOR_SLOT(pgp->paths, 0):NULL; - } - --int add_feature(char **f, const char *n) -+int add_feature(char **features_p, const char *new_feat) - { -- int c = 0, d, l; -- char *e, *t; -- const char *p; -+ int count = 0, new_count, len; -+ char *tmp, *feats; -+ const char *ptr; - -- if (!f) -+ if (!features_p) - return 1; - - /* Nothing to do */ -- if (!n || *n == '\0') -+ if (!new_feat || *new_feat == '\0') - return 0; - -- l = strlen(n); -- if (isspace(*n) || isspace(*(n + l - 1))) { -- condlog(0, "internal error: feature \"%s\" has leading or trailing spaces", n); -+ len = strlen(new_feat); -+ if (isspace(*new_feat) || isspace(*(new_feat + len - 1))) { -+ condlog(0, "internal error: feature \"%s\" has leading or trailing spaces", -+ new_feat); - return 1; - } - -- p = n; -- d = 1; -- while (*p != '\0') { -- if (isspace(*p) && !isspace(*(p + 1)) && *(p + 1) != '\0') -- d++; -- p++; -+ ptr = new_feat; -+ new_count = 1; -+ while (*ptr != '\0') { -+ if (isspace(*ptr) && !isspace(*(ptr + 1)) && *(ptr + 1) != '\0') -+ new_count++; -+ ptr++; - } - - /* default feature is null */ -- if(!*f) -+ if(!*features_p) - { -- l = asprintf(&t, "%0d %s", d, n); -- if(l == -1) -+ len = asprintf(&feats, "%0d %s", new_count, new_feat); -+ if(len == -1) - return 1; - -- *f = t; -+ *features_p = feats; - return 0; - } - - /* Check if feature is already present */ -- e = *f; -- while ((e = strstr(e, n)) != NULL) { -- if (isspace(*(e - 1)) && -- (isspace(*(e + l)) || *(e + l) == '\0')) -+ tmp = *features_p; -+ while ((tmp = strstr(tmp, new_feat)) != NULL) { -+ if (isspace(*(tmp - 1)) && -+ (isspace(*(tmp + len)) || *(tmp + len) == '\0')) - return 0; -- e += l; -+ tmp += len; - } - - /* Get feature count */ -- c = strtoul(*f, &e, 10); -- if (*f == e || (!isspace(*e) && *e != '\0')) { -- condlog(0, "parse error in feature string \"%s\"", *f); -+ count = strtoul(*features_p, &tmp, 10); -+ if (*features_p == tmp || (!isspace(*tmp) && *tmp != '\0')) { -+ condlog(0, "parse error in feature string \"%s\"", *features_p); - return 1; - } -- c += d; -- if (asprintf(&t, "%0d%s %s", c, e, n) < 0) -+ count += new_count; -+ if (asprintf(&feats, "%0d%s %s", count, tmp, new_feat) < 0) - return 1; - -- free(*f); -- *f = t; -+ free(*features_p); -+ *features_p = feats; - - return 0; - } diff --git a/0031-multipathd-don-t-initialize-the-field-width-in-show_.patch b/0031-multipathd-don-t-initialize-the-field-width-in-show_.patch deleted file mode 100644 index 6dc8a0e..0000000 --- a/0031-multipathd-don-t-initialize-the-field-width-in-show_.patch +++ /dev/null @@ -1,31 +0,0 @@ -From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 -From: Benjamin Marzinski -Date: Wed, 9 Nov 2022 15:49:42 -0600 -Subject: [PATCH] multipathd: don't initialize the field width in show_path() - -It's not used, so don't set it up. - -Signed-off-by: Benjamin Marzinski -Reviewed-by: Martin Wilck ---- - multipathd/cli_handlers.c | 7 +------ - 1 file changed, 1 insertion(+), 6 deletions(-) - -diff --git a/multipathd/cli_handlers.c b/multipathd/cli_handlers.c -index 5f0dd04e..e65fb75c 100644 ---- a/multipathd/cli_handlers.c -+++ b/multipathd/cli_handlers.c -@@ -67,12 +67,7 @@ static int - show_path (struct strbuf *reply, struct vectors *vecs, struct path *pp, - char *style) - { -- fieldwidth_t *width __attribute__((cleanup(cleanup_ucharp))) = NULL; -- -- if ((width = alloc_path_layout()) == NULL) -- return 1; -- get_path_layout(vecs->pathvec, 1, width); -- if (snprint_path(reply, style, pp, 0) < 0) -+ if (snprint_path(reply, style, pp, NULL) < 0) - return 1; - return 0; - } diff --git a/0032-libmultipath-improve-remove_feature-variable-names.patch b/0032-libmultipath-improve-remove_feature-variable-names.patch deleted file mode 100644 index c1642d4..0000000 --- a/0032-libmultipath-improve-remove_feature-variable-names.patch +++ /dev/null @@ -1,144 +0,0 @@ -From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 -From: Benjamin Marzinski -Date: Wed, 9 Nov 2022 15:49:43 -0600 -Subject: [PATCH] libmultipath: improve remove_feature() variable names - -Use descriptive names, instead of single letters. No functional changes. - -Signed-off-by: Benjamin Marzinski -Reviewed-by: Martin Wilck ---- - libmultipath/structs.c | 80 +++++++++++++++++++++--------------------- - 1 file changed, 40 insertions(+), 40 deletions(-) - -diff --git a/libmultipath/structs.c b/libmultipath/structs.c -index f90bd0b6..87e84d5d 100644 ---- a/libmultipath/structs.c -+++ b/libmultipath/structs.c -@@ -668,86 +668,86 @@ int add_feature(char **features_p, const char *new_feat) - return 0; - } - --int remove_feature(char **f, const char *o) -+int remove_feature(char **features_p, const char *old_feat) - { -- int c = 0, d; -- char *e, *p, *n; -- const char *q; -+ int count = 0, len; -+ char *feats_start, *ptr, *new; - -- if (!f || !*f) -+ if (!features_p || !*features_p) - return 1; - - /* Nothing to do */ -- if (!o || *o == '\0') -+ if (!old_feat || *old_feat == '\0') - return 0; - -- d = strlen(o); -- if (isspace(*o) || isspace(*(o + d - 1))) { -- condlog(0, "internal error: feature \"%s\" has leading or trailing spaces", o); -+ len = strlen(old_feat); -+ if (isspace(*old_feat) || isspace(*(old_feat + len - 1))) { -+ condlog(0, "internal error: feature \"%s\" has leading or trailing spaces", -+ old_feat); - return 1; - } - - /* Check if present and not part of a larger feature token*/ -- p = *f + 1; /* the size must be at the start of the features string */ -- while ((p = strstr(p, o)) != NULL) { -- if (isspace(*(p - 1)) && -- (isspace(*(p + d)) || *(p + d) == '\0')) -+ ptr = *features_p + 1; -+ while ((ptr = strstr(ptr, old_feat)) != NULL) { -+ if (isspace(*(ptr - 1)) && -+ (isspace(*(ptr + len)) || *(ptr + len) == '\0')) - break; -- p += d; -+ ptr += len; - } -- if (!p) -+ if (!ptr) - return 0; - - /* Get feature count */ -- c = strtoul(*f, &e, 10); -- if (*f == e || !isspace(*e)) { -- condlog(0, "parse error in feature string \"%s\"", *f); -+ count = strtoul(*features_p, &feats_start, 10); -+ if (*features_p == feats_start || !isspace(*feats_start)) { -+ condlog(0, "parse error in feature string \"%s\"", *features_p); - return 1; - } - - /* Update feature count */ -- c--; -- q = o; -- while (*q != '\0') { -- if (isspace(*q) && !isspace(*(q + 1)) && *(q + 1) != '\0') -- c--; -- q++; -+ count--; -+ while (*old_feat != '\0') { -+ if (isspace(*old_feat) && !isspace(*(old_feat + 1)) && -+ *(old_feat + 1) != '\0') -+ count--; -+ old_feat++; - } - - /* Quick exit if all features have been removed */ -- if (c == 0) { -- n = malloc(2); -- if (!n) -+ if (count == 0) { -+ new = malloc(2); -+ if (!new) - return 1; -- strcpy(n, "0"); -+ strcpy(new, "0"); - goto out; - } - - /* Update feature count space */ -- n = malloc(strlen(*f) - d + 1); -- if (!n) -+ new = malloc(strlen(*features_p) - len + 1); -+ if (!new) - return 1; - - /* Copy the feature count */ -- sprintf(n, "%0d", c); -+ sprintf(new, "%0d", count); - /* - * Copy existing features up to the feature - * about to be removed - */ -- strncat(n, e, (size_t)(p - e)); -+ strncat(new, feats_start, (size_t)(ptr - feats_start)); - /* Skip feature to be removed */ -- p += d; -+ ptr += len; - /* Copy remaining features */ -- while (isspace(*p)) -- p++; -- if (*p != '\0') -- strcat(n, p); -+ while (isspace(*ptr)) -+ ptr++; -+ if (*ptr != '\0') -+ strcat(new, ptr); - else -- strchop(n); -+ strchop(new); - - out: -- free(*f); -- *f = n; -+ free(*features_p); -+ *features_p = new; - - return 0; - } diff --git a/device-mapper-multipath.spec b/device-mapper-multipath.spec index 847d6b9..2933cbd 100644 --- a/device-mapper-multipath.spec +++ b/device-mapper-multipath.spec @@ -1,59 +1,37 @@ Name: device-mapper-multipath -Version: 0.9.3 -Release: 2%{?dist} +Version: 0.9.4 +Release: 1%{?dist} Summary: Tools to manage multipath devices using device-mapper License: GPLv2 URL: http://christophe.varoqui.free.fr/ # The source for this package was pulled from upstream's git repo. Use the # following command to generate the tarball -# curl -L https://github.com/opensvc/multipath-tools/archive/0.9.3.tar.gz -o multipath-tools-0.9.3.tgz -Source0: multipath-tools-0.9.3.tgz +# curl -L https://github.com/opensvc/multipath-tools/archive/0.9.4.tar.gz -o multipath-tools-0.9.4.tgz +Source0: multipath-tools-0.9.4.tgz Source1: multipath.conf -Patch0001: 0001-libmultipath-fix-show-paths-format-failure.patch -Patch0002: 0002-fixup-Makefile.inc-fix-man-and-include-paths.patch -Patch0003: 0003-multipath-tools-Makefile.inc-Fix-paths-for-systemd.patch -Patch0004: 0004-multipath-tools-Makefile.inc-don-t-take-values-from-.patch -Patch0005: 0005-multipath-tools-Makefile.inc-get-rid-of-RUN.patch -Patch0006: 0006-multipath-tools-Makefile.inc-more-compact-code-for-L.patch -Patch0007: 0007-multipath-tools-Makefiles-simplify-code-for-include-.patch -Patch0008: 0008-multipath-tools-Makefiles-use-mandir.patch -Patch0009: 0009-multipath-tools-Makefile.inc-simplify-expression-for.patch -Patch0010: 0010-multipath-tools-Makefile.inc-untangle-paths-and-sour.patch -Patch0011: 0011-multipath-tools-Makefiles-replace-libdir-by-plugindi.patch -Patch0012: 0012-multipath-tools-Makefile.inc-use-simple-make-variabl.patch -Patch0013: 0013-multipath-tools-Makefile.inc-fix-a-log-message.patch -Patch0014: 0014-multipath-tools-Makefile.inc-set-systemd-specific-fl.patch -Patch0015: 0015-multipathd-Makefile-fix-compilation-flags-for-libedi.patch -Patch0016: 0016-multipath-tools-Makefiles-clean-up-executable-Makefi.patch -Patch0017: 0017-multipath-tools-Makefiles-use-common-code-for-librar.patch -Patch0018: 0018-multipath-tools-Makefiles-move-common-code-to-rules..patch -Patch0019: 0019-multipath-tools-Makefiles-create-config.mk.patch -Patch0020: 0020-multipath-tools-Makefiles-enable-quiet-build.patch -Patch0021: 0021-multipath-tools-quiet-build-support-for-top-level-Ma.patch -Patch0022: 0022-GitHub-workflows-use-make-j8-Orecurse.patch -Patch0023: 0023-README.md-Move-section-about-libedit-and-libreadline.patch -Patch0024: 0024-README.md-Fix-indentation-in-paragraph-about-device-.patch -Patch0025: 0025-README.md-document-options-for-paths-and-optimizatio.patch -Patch0026: 0026-README.md-document-how-to-customize-build.patch -Patch0027: 0027-libmultipath-avoid-Warray-bounds-error-with-gcc-12-a.patch -Patch0028: 0028-multipath-avoid-NULL-string-in-released_to_systemd.patch -Patch0029: 0029-libmultipath-avoid-NULL-string-in-is_udev_ready.patch -Patch0030: 0030-libmultipath-impove-add_feature-variable-names.patch -Patch0031: 0031-multipathd-don-t-initialize-the-field-width-in-show_.patch -Patch0032: 0032-libmultipath-improve-remove_feature-variable-names.patch -Patch0033: 0033-RH-fixup-udev-rules-for-redhat.patch -Patch0034: 0034-RH-Remove-the-property-blacklist-exception-builtin.patch -Patch0035: 0035-RH-don-t-start-without-a-config-file.patch -Patch0036: 0036-RH-Fix-nvme-function-missing-argument.patch -Patch0037: 0037-RH-use-rpm-optflags-if-present.patch -Patch0038: 0038-RH-add-mpathconf.patch -Patch0039: 0039-RH-add-wwids-from-kernel-cmdline-mpath.wwids-with-A.patch -Patch0040: 0040-RH-reset-default-find_mutipaths-value-to-off.patch -Patch0041: 0041-RH-attempt-to-get-ANA-info-via-sysfs-first.patch -Patch0042: 0042-RH-make-parse_vpd_pg83-match-scsi_id-output.patch -Patch0043: 0043-RH-add-scsi-device-handlers-to-modules-load.d.patch -Patch0044: 0044-RH-compile-with-libreadline-support.patch +Patch0001: 0001-multipathd-make-pr-registration-consistent.patch +Patch0002: 0002-libmultipath-make-prflag-an-enum.patch +Patch0003: 0003-multipathd-handle-no-active-paths-in-update_map_pr.patch +Patch0004: 0004-multipathd-add-missing-newline-to-cli_del_map-reply.patch +Patch0005: 0005-libmultipath-skip-extra-vector-work-in-remove_maps.patch +Patch0006: 0006-libmultipath-orphan-paths-if-coalesce_paths-frees-ne.patch +Patch0007: 0007-libmultipath-is_path_valid-check-if-device-is-in-use.patch +Patch0008: 0008-libmpathpersist-use-conf-timeout-for-updating-persis.patch +Patch0009: 0009-libmultipath-pathinfo-don-t-fail-for-devices-lacking.patch +Patch0010: 0010-libmultipath-bump-ABI-version-to-18.0.0.patch +Patch0011: 0011-RH-fixup-udev-rules-for-redhat.patch +Patch0012: 0012-RH-Remove-the-property-blacklist-exception-builtin.patch +Patch0013: 0013-RH-don-t-start-without-a-config-file.patch +Patch0014: 0014-RH-Fix-nvme-function-missing-argument.patch +Patch0015: 0015-RH-use-rpm-optflags-if-present.patch +Patch0016: 0016-RH-add-mpathconf.patch +Patch0017: 0017-RH-add-wwids-from-kernel-cmdline-mpath.wwids-with-A.patch +Patch0018: 0018-RH-reset-default-find_mutipaths-value-to-off.patch +Patch0019: 0019-RH-attempt-to-get-ANA-info-via-sysfs-first.patch +Patch0020: 0020-RH-make-parse_vpd_pg83-match-scsi_id-output.patch +Patch0021: 0021-RH-add-scsi-device-handlers-to-modules-load.d.patch +Patch0022: 0022-RH-compile-with-libreadline-support.patch # runtime Requires: %{name}-libs = %{version}-%{release} @@ -61,6 +39,7 @@ Requires: kpartx = %{version}-%{release} Requires: device-mapper >= 1.02.96 Requires: userspace-rcu Requires: readline +Requires: libmount Requires(post): systemd-units Requires(preun): systemd-units Requires(postun): systemd-units @@ -82,6 +61,7 @@ BuildRequires: readline-devel, ncurses-devel BuildRequires: systemd-units, systemd-devel BuildRequires: json-c-devel, perl-interpreter, pkgconfig, gcc BuildRequires: userspace-rcu-devel +BuildRequires: libmount-devel BuildRequires: make %description @@ -138,7 +118,7 @@ This package contains the files needed to develop applications that use device-mapper-multipath's libdmmp C API library %prep -%autosetup -n multipath-tools-0.9.3 -p1 +%autosetup -n multipath-tools-0.9.4 -p1 cp %{SOURCE1} . %build @@ -260,6 +240,14 @@ fi %{_pkgconfdir}/libdmmp.pc %changelog +* Thu Jan 26 2023 Benjamin Marzinski - 0.9.4-1 +- Update to the head of the upstream staging branch + * Previous patches 0001-0032 are intlcude in the source tarball + * Patches 0001-0010 are from the upstream staging branch +- Rename redhat patches + * Previous patches 0033-0044 are not patches 0011-0022 +- Add dependency on libmount + * Thu Jan 19 2023 Fedora Release Engineering - 0.9.3-2 - Rebuilt for https://fedoraproject.org/wiki/Fedora_38_Mass_Rebuild diff --git a/sources b/sources index 0394f4e..462cab6 100644 --- a/sources +++ b/sources @@ -1,2 +1,2 @@ -SHA512 (multipath-tools-0.9.3.tgz) = 4faa2ee5a96a9d5d752219931ebc885cb70ed6b022d45ede985ad7919c043a3aee166e6f126d32dffd187c5c32d5cbce91747d87d0b55557e2f7f68b279583da +SHA512 (multipath-tools-0.9.4.tgz) = 5e0dcea610fc215e345444c04453a38f39c73e493c2bc53f6b3a90cd701266aabdf7c4693dfc321099af836d0019bf27355e265ad5db5deff48f8bb94ed4719d SHA512 (multipath.conf) = 71953dce5a68adcf60a942305f5a66023e6f4c4baf53b1bfdb4edf65ed5b8e03db804363c36d1dcfd85591f4766f52b515269904c53b84d7b076da0b80b09942