diff --git a/.gitignore b/.gitignore index 7a13460..c9e44d7 100644 --- a/.gitignore +++ b/.gitignore @@ -25,3 +25,4 @@ multipath-tools-091027.tar.gz /multipath-tools-0.8.7.tgz /multipath-tools-0.8.9.tgz /multipath-tools-0.9.0.tgz +/multipath-tools-0.9.3.tgz diff --git a/0001-github-workflows-switch-to-fedora-36.patch b/0001-github-workflows-switch-to-fedora-36.patch deleted file mode 100644 index 1583fd8..0000000 --- a/0001-github-workflows-switch-to-fedora-36.patch +++ /dev/null @@ -1,29 +0,0 @@ -From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 -From: Martin Wilck -Date: Fri, 10 Jun 2022 22:44:11 +0200 -Subject: [PATCH] github workflows: switch to fedora 36 - -Signed-off-by: Benjamin Marzinski ---- - .github/workflows/native.yaml | 6 ++---- - 1 file changed, 2 insertions(+), 4 deletions(-) - -diff --git a/.github/workflows/native.yaml b/.github/workflows/native.yaml -index 19c9e297..ddfd4a09 100644 ---- a/.github/workflows/native.yaml -+++ b/.github/workflows/native.yaml -@@ -12,12 +12,10 @@ jobs: - runs-on: ubuntu-20.04 - strategy: - matrix: -- os: [buster, jessie, bullseye, fedora-35] -+ os: [buster, jessie, bullseye, fedora-36] - arch: ['', '-i386'] - exclude: -- - os: fedora-34 -- arch: '-i386' -- - os: fedora-35 -+ - os: fedora-36 - arch: '-i386' - container: mwilck/multipath-build-${{ matrix.os }}${{ matrix.arch }} - steps: diff --git a/0001-libmultipath-fix-show-paths-format-failure.patch b/0001-libmultipath-fix-show-paths-format-failure.patch new file mode 100644 index 0000000..4f56830 --- /dev/null +++ b/0001-libmultipath-fix-show-paths-format-failure.patch @@ -0,0 +1,35 @@ +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/0002-fixup-Makefile.inc-fix-man-and-include-paths.patch b/0002-fixup-Makefile.inc-fix-man-and-include-paths.patch new file mode 100644 index 0000000..4afae52 --- /dev/null +++ b/0002-fixup-Makefile.inc-fix-man-and-include-paths.patch @@ -0,0 +1,41 @@ +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-multipath-tools-fix-multipath-ll-bug-for-Native-NVME.patch b/0002-multipath-tools-fix-multipath-ll-bug-for-Native-NVME.patch deleted file mode 100644 index c54b4cd..0000000 --- a/0002-multipath-tools-fix-multipath-ll-bug-for-Native-NVME.patch +++ /dev/null @@ -1,103 +0,0 @@ -From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 -From: chengjike -Date: Fri, 8 Oct 2021 20:24:49 +0800 -Subject: [PATCH] multipath-tools: fix "multipath -ll" bug for Native NVME - Multipath devices - -After "Native NVME Multipath" is configured, -the content displayed is incorrect when you run "multipath -ll" command. -Each NVME devices have the same path name. For example: - -[root@localhost home]# multipath -ll -eui.710032e8fb22a86c24a52c1000000db8 [nvme]:nvme1n1 NVMe,Huawei-XSG1,1000001 -size=10485760 features='n/a' hwhandler='ANA' wp=rw -|-+- policy='n/a' prio=50 status=optimized -| `- 1:4:1 nvme1c4n1 0:0 n/a optimized live -`-+- policy='n/a' prio=50 status=optimized - `- 1:9:1 nvme1c9n1 0:0 n/a optimized live -eui.710032e8fb22a86b24a52c7c00000db7 [nvme]:nvme1n2 NVMe,Huawei-XSG1,1000001 -size=10485760 features='n/a' hwhandler='ANA' wp=rw -|-+- policy='n/a' prio=50 status=optimized -| `- 1:4:1 nvme1c4n1 0:0 n/a optimized live -`-+- policy='n/a' prio=50 status=optimized - `- 1:9:1 nvme1c9n1 0:0 n/a optimized live -[root@localhost home]# - -The logical paths of "nvme1n1" and "nvme1n2" are both "nvme1c4n1" and "nvme1c9n1". -So when multipath-tools aggregates disks, use "nvme_ns_head->instance" for matching. -such as ,Use "b" in "nvmeanb" string to match "z" in "nvmexcynz"(a,b,x,y,z can be any number), -and if "b" and "z" are the same, they are related. - -Signed-off-by: chengjike -Reviewed-by: Martin Wilck -Signed-off-by: Benjamin Marzinski ---- - libmultipath/foreign/nvme.c | 26 ++++++++++++++++++++------ - 1 file changed, 20 insertions(+), 6 deletions(-) - -diff --git a/libmultipath/foreign/nvme.c b/libmultipath/foreign/nvme.c -index 52ca56d8..9a05b333 100644 ---- a/libmultipath/foreign/nvme.c -+++ b/libmultipath/foreign/nvme.c -@@ -531,14 +531,18 @@ static int _dirent_controller(const struct dirent *di) - - /* Find the block device for a given nvme controller */ - struct udev_device *get_ctrl_blkdev(const struct context *ctx, -- struct udev_device *ctrl) -+ struct udev_device *ctrl, const char *ctrl_name) - { -+ int ctrl_num, ns_num; - struct udev_list_entry *item; - struct udev_device *blkdev = NULL; - struct udev_enumerate *enm = udev_enumerate_new(ctx->udev); - const char *devtype; - -- if (enm == NULL) -+ if (enm == NULL || ctrl_name == NULL) -+ return NULL; -+ -+ if (sscanf(ctrl_name, "nvme%dn%d", &ctrl_num, &ns_num) != 2) - return NULL; - - pthread_cleanup_push(_udev_enumerate_unref, enm); -@@ -556,6 +560,8 @@ struct udev_device *get_ctrl_blkdev(const struct context *ctx, - item != NULL; - item = udev_list_entry_get_next(item)) { - struct udev_device *tmp; -+ const char *name = NULL ; -+ int m, n, l; - - tmp = udev_device_new_from_syspath(ctx->udev, - udev_list_entry_get_name(item)); -@@ -563,11 +569,19 @@ struct udev_device *get_ctrl_blkdev(const struct context *ctx, - continue; - - devtype = udev_device_get_devtype(tmp); -- if (devtype && !strcmp(devtype, "disk")) { -+ if (devtype == NULL || strcmp(devtype, "disk")) { -+ udev_device_unref(tmp); -+ continue; -+ } -+ -+ name = udev_device_get_sysname(tmp); -+ if (name != NULL && -+ sscanf(name, "nvme%dc%dn%d", &m, &n, &l) == 3 && -+ l == ns_num) { - blkdev = tmp; - break; -- } else -- udev_device_unref(tmp); -+ } -+ udev_device_unref(tmp); - } - - if (blkdev == NULL) -@@ -680,7 +694,7 @@ static void _find_controllers(struct context *ctx, struct nvme_map *map) - } - - pthread_cleanup_push(_udev_device_unref, ctrl); -- udev = get_ctrl_blkdev(ctx, ctrl); -+ udev = get_ctrl_blkdev(ctx, ctrl, udev_device_get_sysname(map->udev)); - /* - * We give up the reference to the nvme device here and get - * it back from the child below. diff --git a/0003-multipath-tools-Makefile.inc-Fix-paths-for-systemd.patch b/0003-multipath-tools-Makefile.inc-Fix-paths-for-systemd.patch new file mode 100644 index 0000000..8a25fe0 --- /dev/null +++ b/0003-multipath-tools-Makefile.inc-Fix-paths-for-systemd.patch @@ -0,0 +1,65 @@ +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-multipath-tools-update-Huawei-OceanStor-NVMe-vendor-.patch b/0003-multipath-tools-update-Huawei-OceanStor-NVMe-vendor-.patch deleted file mode 100644 index 9643721..0000000 --- a/0003-multipath-tools-update-Huawei-OceanStor-NVMe-vendor-.patch +++ /dev/null @@ -1,40 +0,0 @@ -From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 -From: Xose Vazquez Perez -Date: Sun, 10 Jul 2022 01:07:08 +0200 -Subject: [PATCH] multipath-tools: update Huawei OceanStor NVMe vendor id - -"NVME" in the doc, but "NVMe" is the real output: -(page 61-62): https://drive.google.com/file/d/1c5RK4GXX7ofZBFxTtZ_IN1qHyIjw5eR1 -https://marc.info/?l=dm-devel&m=163393151312418 -Use both, just in case. - -Cc: -Cc: -Cc: -Cc: Zhouweigang (Jack) -Cc: Zou Ming -Cc: Martin Wilck -Cc: Benjamin Marzinski -Cc: Christophe Varoqui -Cc: DM-DEVEL ML -Signed-off-by: Xose Vazquez Perez -Reviewed-by: Martin Wilck -Reviewed-by: Benjamin Marzinski -Signed-off-by: Benjamin Marzinski ---- - libmultipath/hwtable.c | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/libmultipath/hwtable.c b/libmultipath/hwtable.c -index 513fa679..fc0252ba 100644 ---- a/libmultipath/hwtable.c -+++ b/libmultipath/hwtable.c -@@ -1116,7 +1116,7 @@ static struct hwentry default_hw[] = { - }, - { - /* OceanStor NVMe */ -- .vendor = "NVME", -+ .vendor = "NVM[eE]", - .product = "Huawei-XSG1", - .checker_name = DIRECTIO, - .no_path_retry = 12, 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 new file mode 100644 index 0000000..5c1b7b3 --- /dev/null +++ b/0004-multipath-tools-Makefile.inc-don-t-take-values-from-.patch @@ -0,0 +1,113 @@ +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-multipath-tools-update-Generic-NVMe-vendor-regex-in-.patch b/0004-multipath-tools-update-Generic-NVMe-vendor-regex-in-.patch deleted file mode 100644 index 4ef193d..0000000 --- a/0004-multipath-tools-update-Generic-NVMe-vendor-regex-in-.patch +++ /dev/null @@ -1,33 +0,0 @@ -From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 -From: Xose Vazquez Perez -Date: Sun, 10 Jul 2022 01:07:09 +0200 -Subject: [PATCH] multipath-tools: update "Generic NVMe" vendor regex in - hwtable - -to accept NVME and NVMe - -Cc: Martin Wilck -Cc: Benjamin Marzinski -Cc: Christophe Varoqui -Cc: DM-DEVEL ML -Signed-off-by: Xose Vazquez Perez -Reviewed-by: Martin Wilck -Reviewed-by: Benjamin Marzinski -Signed-off-by: Benjamin Marzinski ---- - libmultipath/hwtable.c | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/libmultipath/hwtable.c b/libmultipath/hwtable.c -index fc0252ba..c88fa09a 100644 ---- a/libmultipath/hwtable.c -+++ b/libmultipath/hwtable.c -@@ -86,7 +86,7 @@ static struct hwentry default_hw[] = { - */ - { - /* Generic NVMe */ -- .vendor = "NVME", -+ .vendor = "NVM[eE]", - .product = ".*", - .uid_attribute = DEFAULT_NVME_UID_ATTRIBUTE, - .checker_name = NONE, diff --git a/0005-libmultipath-fix-find_multipaths_timeout-for-unknown.patch b/0005-libmultipath-fix-find_multipaths_timeout-for-unknown.patch deleted file mode 100644 index c2abfaa..0000000 --- a/0005-libmultipath-fix-find_multipaths_timeout-for-unknown.patch +++ /dev/null @@ -1,29 +0,0 @@ -From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 -From: Benjamin Marzinski -Date: Tue, 12 Jul 2022 17:02:51 -0500 -Subject: [PATCH] libmultipath: fix find_multipaths_timeout for unknown - hardware - -pp->hwe is now a vector that will always be allocated for all path -devices. Instead of checking if it is NULL, check if it is empty. - -Fixes: f0462f0 ("libmultipath: use vector for for pp->hwe and mp->hwe") -Signed-off-by: Benjamin Marzinski -Reviewed-by: Martin Wilck ---- - libmultipath/propsel.c | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/libmultipath/propsel.c b/libmultipath/propsel.c -index 50d0b5c8..f782f251 100644 ---- a/libmultipath/propsel.c -+++ b/libmultipath/propsel.c -@@ -1293,7 +1293,7 @@ out: - */ - if (pp->find_multipaths_timeout < 0) { - pp->find_multipaths_timeout = -pp->find_multipaths_timeout; -- if (!pp->hwe) { -+ if (VECTOR_SIZE(pp->hwe) == 0) { - pp->find_multipaths_timeout = - DEFAULT_UNKNOWN_FIND_MULTIPATHS_TIMEOUT; - origin = "(default for unknown hardware)"; diff --git a/0005-multipath-tools-Makefile.inc-get-rid-of-RUN.patch b/0005-multipath-tools-Makefile.inc-get-rid-of-RUN.patch new file mode 100644 index 0000000..c0543f5 --- /dev/null +++ b/0005-multipath-tools-Makefile.inc-get-rid-of-RUN.patch @@ -0,0 +1,63 @@ +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-multipath-tools-Makefile.inc-more-compact-code-for-L.patch b/0006-multipath-tools-Makefile.inc-more-compact-code-for-L.patch new file mode 100644 index 0000000..2a0eda4 --- /dev/null +++ b/0006-multipath-tools-Makefile.inc-more-compact-code-for-L.patch @@ -0,0 +1,38 @@ +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/0006-multipath-tools-update-devel-repo-info-in-README.md.patch b/0006-multipath-tools-update-devel-repo-info-in-README.md.patch deleted file mode 100644 index 3eaf2c0..0000000 --- a/0006-multipath-tools-update-devel-repo-info-in-README.md.patch +++ /dev/null @@ -1,52 +0,0 @@ -From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 -From: Xose Vazquez Perez -Date: Thu, 14 Jul 2022 21:05:39 +0200 -Subject: [PATCH] multipath-tools: update devel repo info in README.md - -Cc: Martin Wilck -Cc: Benjamin Marzinski -Cc: Christophe Varoqui -Cc: DM-DEVEL ML -Signed-off-by: Xose Vazquez Perez - -Reviewed-by: Martin Wilck -Signed-off-by: Benjamin Marzinski ---- - README.md | 10 +++------- - 1 file changed, 3 insertions(+), 7 deletions(-) - -diff --git a/README.md b/README.md -index f06f8cea..dcf51f20 100644 ---- a/README.md -+++ b/README.md -@@ -3,7 +3,6 @@ - multipath-tools for Linux - ========================= - -- - https://github.com/opensvc/multipath-tools - - This package provides the following binaries to drive the Device Mapper multipathing driver: -@@ -42,14 +41,12 @@ Go to: https://github.com/opensvc/multipath-tools/tags - Select a release-tag and then click on "zip" or "tar.gz". - - --Source code --=========== -+Devel code -+========== - - To get latest devel code: - -- git clone https://github.com/opensvc/multipath-tools.git -- --Github page: https://github.com/opensvc/multipath-tools -+ git clone -b queue https://github.com/openSUSE/multipath-tools - - - Building multipath-tools -@@ -149,4 +146,3 @@ The multipath-tools source code is covered by several different licences. - Refer to the individual source files for details. - Source files which do not specify a licence are shipped under LGPL-2.0 - (see `LICENSES/LGPL-2.0`). -- diff --git a/0007-multipath-tools-Makefiles-simplify-code-for-include-.patch b/0007-multipath-tools-Makefiles-simplify-code-for-include-.patch new file mode 100644 index 0000000..c6be343 --- /dev/null +++ b/0007-multipath-tools-Makefiles-simplify-code-for-include-.patch @@ -0,0 +1,139 @@ +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/0007-multipath-tools-delete-README.alua.patch b/0007-multipath-tools-delete-README.alua.patch deleted file mode 100644 index 8682745..0000000 --- a/0007-multipath-tools-delete-README.alua.patch +++ /dev/null @@ -1,48 +0,0 @@ -From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 -From: Xose Vazquez Perez -Date: Thu, 14 Jul 2022 21:05:40 +0200 -Subject: [PATCH] multipath-tools: delete README.alua - -Cc: Martin Wilck -Cc: Benjamin Marzinski -Cc: Christophe Varoqui -Cc: DM-DEVEL ML -Signed-off-by: Xose Vazquez Perez - -Reviewed-by: Martin Wilck -Signed-off-by: Benjamin Marzinski ---- - README.alua | 24 ------------------------ - 1 file changed, 24 deletions(-) - delete mode 100644 README.alua - -diff --git a/README.alua b/README.alua -deleted file mode 100644 -index 5d2b1c64..00000000 ---- a/README.alua -+++ /dev/null -@@ -1,24 +0,0 @@ --This is a rough guide, consult your storage device manufacturer documentation. -- --ALUA is supported in some devices, but usually it's disabled by default. --To enable ALUA, the following options should be changed: -- --- EMC CLARiiON/VNX: -- "Failover Mode" should be changed to "4" or "Active-Active mode(ALUA)-failover mode 4" -- --- HPE 3PAR, Primera, and Alletra 9000: -- "Host:" should be changed to "Generic-ALUA Persona 2 (UARepLun, SESLun, ALUA)". -- --- Promise VTrak/Vess: -- "LUN Affinity" and "ALUA" should be changed to "Enable", "Redundancy Type" -- must be "Active-Active". -- --- LSI/Engenio/NetApp RDAC class, as NetApp SANtricity E/EF Series and OEM arrays: -- "Select operating system:" should be changed to "Linux DM-MP (Kernel 3.10 or later)". -- --- NetApp ONTAP: -- To check ALUA state: "igroup show -v ", and to enable ALUA: -- "igroup set alua yes". -- --- Huawei OceanStor: -- "Host Access Mode" should be changed to "Asymmetric". diff --git a/0008-multipath-tools-Makefiles-use-mandir.patch b/0008-multipath-tools-Makefiles-use-mandir.patch new file mode 100644 index 0000000..10e1ca8 --- /dev/null +++ b/0008-multipath-tools-Makefiles-use-mandir.patch @@ -0,0 +1,185 @@ +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/0008-multipath-tools-add-ALUA-info-to-README.md.patch b/0008-multipath-tools-add-ALUA-info-to-README.md.patch deleted file mode 100644 index 2a11fce..0000000 --- a/0008-multipath-tools-add-ALUA-info-to-README.md.patch +++ /dev/null @@ -1,53 +0,0 @@ -From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 -From: Xose Vazquez Perez -Date: Thu, 14 Jul 2022 23:14:31 +0200 -Subject: [PATCH] multipath-tools: add ALUA info to README.md - -Cc: Martin Wilck -Cc: Benjamin Marzinski -Cc: Christophe Varoqui -Cc: DM-DEVEL ML -Signed-off-by: Xose Vazquez Perez - -Reviewed-by: Martin Wilck -Signed-off-by: Benjamin Marzinski ---- - README.md | 28 ++++++++++++++++++++++++++++ - 1 file changed, 28 insertions(+) - -diff --git a/README.md b/README.md -index dcf51f20..2322082c 100644 ---- a/README.md -+++ b/README.md -@@ -146,3 +146,31 @@ The multipath-tools source code is covered by several different licences. - Refer to the individual source files for details. - Source files which do not specify a licence are shipped under LGPL-2.0 - (see `LICENSES/LGPL-2.0`). -+ -+ -+ALUA -+==== -+This is a rough guide, consult your storage device manufacturer documentation. -+ -+ALUA is supported in some devices, but usually it's disabled by default. -+To enable ALUA, the following options should be changed: -+ -+- EMC CLARiiON/VNX: -+ "Failover Mode" should be changed to "4" or "Active-Active mode(ALUA)-failover mode 4" -+ -+- HPE 3PAR, Primera, and Alletra 9000: -+ "Host:" should be changed to "Generic-ALUA Persona 2 (UARepLun, SESLun, ALUA)". -+ -+- Promise VTrak/Vess: -+ "LUN Affinity" and "ALUA" should be changed to "Enable", "Redundancy Type" -+ must be "Active-Active". -+ -+- LSI/Engenio/NetApp RDAC class, as NetApp SANtricity E/EF Series and OEM arrays: -+ "Select operating system:" should be changed to "Linux DM-MP (Kernel 3.10 or later)". -+ -+- NetApp ONTAP: -+ To check ALUA state: "igroup show -v ", and to enable ALUA: -+ "igroup set alua yes". -+ -+- Huawei OceanStor: -+ "Host Access Mode" should be changed to "Asymmetric". diff --git a/0009-libmultipath-alua-remove-get_sysfs_pg83.patch b/0009-libmultipath-alua-remove-get_sysfs_pg83.patch deleted file mode 100644 index 4aa92fc..0000000 --- a/0009-libmultipath-alua-remove-get_sysfs_pg83.patch +++ /dev/null @@ -1,95 +0,0 @@ -From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 -From: Martin Wilck -Date: Wed, 6 Jul 2022 15:57:21 +0200 -Subject: [PATCH] libmultipath: alua: remove get_sysfs_pg83() - -Since b72e753 ("libmultipath: alua: try to retrieve inquiry data from sysfs"), -we fetch inquiry and VPD data from sysfs anyway. No need to do this twice. - -Signed-off-by: Martin Wilck - -Reviewed-by: Benjamin Marzinski -Signed-off-by: Benjamin Marzinski ---- - libmultipath/prioritizers/alua_rtpg.c | 57 ++++++++------------------- - 1 file changed, 16 insertions(+), 41 deletions(-) - -diff --git a/libmultipath/prioritizers/alua_rtpg.c b/libmultipath/prioritizers/alua_rtpg.c -index 3f9c0e73..4db13c20 100644 ---- a/libmultipath/prioritizers/alua_rtpg.c -+++ b/libmultipath/prioritizers/alua_rtpg.c -@@ -228,25 +228,6 @@ get_target_port_group_support(const struct path *pp, unsigned int timeout) - return rc; - } - --static int --get_sysfs_pg83(const struct path *pp, unsigned char *buff, int buflen) --{ -- struct udev_device *parent = pp->udev; -- -- while (parent) { -- const char *subsys = udev_device_get_subsystem(parent); -- if (subsys && !strncmp(subsys, "scsi", 4)) -- break; -- parent = udev_device_get_parent(parent); -- } -- -- if (!parent || sysfs_get_vpd(parent, 0x83, buff, buflen) <= 0) { -- PRINT_DEBUG("failed to read sysfs vpd pg83"); -- return -1; -- } -- return 0; --} -- - int - get_target_port_group(const struct path * pp, unsigned int timeout) - { -@@ -265,32 +246,26 @@ get_target_port_group(const struct path * pp, unsigned int timeout) - } - - memset(buf, 0, buflen); -+ rc = do_inquiry(pp, 1, 0x83, buf, buflen, timeout); -+ if (rc < 0) -+ goto out; - -- rc = get_sysfs_pg83(pp, buf, buflen); -- -- if (rc < 0) { -+ scsi_buflen = get_unaligned_be16(&buf[2]) + 4; -+ if (scsi_buflen >= USHRT_MAX) -+ scsi_buflen = USHRT_MAX; -+ if (buflen < scsi_buflen) { -+ free(buf); -+ buf = (unsigned char *)malloc(scsi_buflen); -+ if (!buf) { -+ PRINT_DEBUG("malloc failed: could not allocate" -+ "%u bytes", scsi_buflen); -+ return -RTPG_RTPG_FAILED; -+ } -+ buflen = scsi_buflen; -+ memset(buf, 0, buflen); - rc = do_inquiry(pp, 1, 0x83, buf, buflen, timeout); - if (rc < 0) - goto out; -- -- scsi_buflen = get_unaligned_be16(&buf[2]) + 4; -- /* Paranoia */ -- if (scsi_buflen >= USHRT_MAX) -- scsi_buflen = USHRT_MAX; -- if (buflen < scsi_buflen) { -- free(buf); -- buf = (unsigned char *)malloc(scsi_buflen); -- if (!buf) { -- PRINT_DEBUG("malloc failed: could not allocate" -- "%u bytes", scsi_buflen); -- return -RTPG_RTPG_FAILED; -- } -- buflen = scsi_buflen; -- memset(buf, 0, buflen); -- rc = do_inquiry(pp, 1, 0x83, buf, buflen, timeout); -- if (rc < 0) -- goto out; -- } - } - - vpd83 = (struct vpd83_data *) buf; diff --git a/0009-multipath-tools-Makefile.inc-simplify-expression-for.patch b/0009-multipath-tools-Makefile.inc-simplify-expression-for.patch new file mode 100644 index 0000000..9b0dbc5 --- /dev/null +++ b/0009-multipath-tools-Makefile.inc-simplify-expression-for.patch @@ -0,0 +1,36 @@ +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-remove-sysfs_get_binary.patch b/0010-libmultipath-remove-sysfs_get_binary.patch deleted file mode 100644 index c2661ed..0000000 --- a/0010-libmultipath-remove-sysfs_get_binary.patch +++ /dev/null @@ -1,77 +0,0 @@ -From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 -From: Martin Wilck -Date: Tue, 5 Jul 2022 10:54:02 +0200 -Subject: [PATCH] libmultipath: remove sysfs_get_binary() - -This function adds no value on top of sysfs_bin_attr_get_value(). -Remove it. - -Signed-off-by: Martin Wilck - -Reviewed-by: Benjamin Marzinski -Signed-off-by: Benjamin Marzinski ---- - libmultipath/discovery.c | 26 ++------------------------ - tests/test-lib.c | 1 - - 2 files changed, 2 insertions(+), 25 deletions(-) - -diff --git a/libmultipath/discovery.c b/libmultipath/discovery.c -index 0d8a558c..7e09e4e2 100644 ---- a/libmultipath/discovery.c -+++ b/libmultipath/discovery.c -@@ -263,41 +263,19 @@ declare_sysfs_get_str(vendor); - declare_sysfs_get_str(model); - declare_sysfs_get_str(rev); - --static ssize_t --sysfs_get_binary (struct udev_device * udev, const char *attrname, -- unsigned char *buff, size_t len) --{ -- ssize_t attr_len; -- const char * devname; -- -- if (!udev) { -- condlog(3, "No udev device given\n"); -- return -ENOSYS; -- } -- -- devname = udev_device_get_sysname(udev); -- attr_len = sysfs_bin_attr_get_value(udev, attrname, buff, len); -- if (attr_len < 0) { -- condlog(3, "%s: attribute %s not found in sysfs", -- devname, attrname); -- return attr_len; -- } -- return attr_len; --} -- - ssize_t sysfs_get_vpd(struct udev_device * udev, unsigned char pg, - unsigned char *buff, size_t len) - { - char attrname[9]; - - snprintf(attrname, sizeof(attrname), "vpd_pg%02x", pg); -- return sysfs_get_binary(udev, attrname, buff, len); -+ return sysfs_bin_attr_get_value(udev, attrname, buff, len); - } - - ssize_t sysfs_get_inquiry(struct udev_device * udev, - unsigned char *buff, size_t len) - { -- return sysfs_get_binary(udev, "inquiry", buff, len); -+ return sysfs_bin_attr_get_value(udev, "inquiry", buff, len); - } - - int -diff --git a/tests/test-lib.c b/tests/test-lib.c -index 6dd3ee88..0bc49d53 100644 ---- a/tests/test-lib.c -+++ b/tests/test-lib.c -@@ -334,7 +334,6 @@ void mock_pathinfo(int mask, const struct mocked_path *mp) - if (mask & DI_SERIAL) { - will_return(__wrap_udev_device_get_subsystem, "scsi"); - will_return(__wrap_udev_device_get_sysname, hbtl); -- will_return(__wrap_udev_device_get_sysname, hbtl); - } - - if (mask & DI_WWID) { diff --git a/0010-multipath-tools-Makefile.inc-untangle-paths-and-sour.patch b/0010-multipath-tools-Makefile.inc-untangle-paths-and-sour.patch new file mode 100644 index 0000000..8591ac4 --- /dev/null +++ b/0010-multipath-tools-Makefile.inc-untangle-paths-and-sour.patch @@ -0,0 +1,68 @@ +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/0011-libmultipath-sysfs_bin_attr_get_value-no-error-if-bu.patch b/0011-libmultipath-sysfs_bin_attr_get_value-no-error-if-bu.patch deleted file mode 100644 index 787d230..0000000 --- a/0011-libmultipath-sysfs_bin_attr_get_value-no-error-if-bu.patch +++ /dev/null @@ -1,65 +0,0 @@ -From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 -From: Martin Wilck -Date: Tue, 5 Jul 2022 10:47:51 +0200 -Subject: [PATCH] libmultipath: sysfs_bin_attr_get_value(): no error if buffer - is filled - -sysfs_bin_attr_get_value() sets the length of bytes read to 0 -when the provided buffer was too small, truncating potentially -useful data. This is harmful e.g. in do_inquiry(), if the "inquiry" -sysfs attribute contains more than 96 bytes (which is possible). - -Actually, binary attributes don't need to be 0-terminated. Thus, -unlike for string attributes, it's not an error if the requested number of -bytes is exactly equal to the number of bytes read. We expect that -the caller knows how many bytes it needs to read. - -Signed-off-by: Martin Wilck - -Reviewed-by: Benjamin Marzinski -Signed-off-by: Benjamin Marzinski ---- - libmultipath/discovery.c | 10 ++++++---- - libmultipath/sysfs.c | 5 +---- - 2 files changed, 7 insertions(+), 8 deletions(-) - -diff --git a/libmultipath/discovery.c b/libmultipath/discovery.c -index 7e09e4e2..f5b8401c 100644 ---- a/libmultipath/discovery.c -+++ b/libmultipath/discovery.c -@@ -1341,13 +1341,15 @@ static int - get_vpd_sysfs (struct udev_device *parent, int pg, char * str, int maxlen) - { - int len; -- size_t buff_len; -+ ssize_t buff_len; - unsigned char buff[VPD_BUFLEN]; - - memset(buff, 0x0, VPD_BUFLEN); -- if (!parent || sysfs_get_vpd(parent, pg, buff, VPD_BUFLEN) <= 0) { -- condlog(3, "failed to read sysfs vpd pg%02x", pg); -- return -EINVAL; -+ buff_len = sysfs_get_vpd(parent, pg, buff, VPD_BUFLEN); -+ if (buff_len < 0) { -+ condlog(3, "failed to read sysfs vpd pg%02x: %s", -+ pg, strerror(-buff_len)); -+ return buff_len; - } - - if (buff[1] != pg) { -diff --git a/libmultipath/sysfs.c b/libmultipath/sysfs.c -index f45dbee1..3ec92512 100644 ---- a/libmultipath/sysfs.c -+++ b/libmultipath/sysfs.c -@@ -146,10 +146,7 @@ ssize_t sysfs_bin_attr_get_value(struct udev_device *dev, const char *attr_name, - if (size < 0) { - condlog(4, "read from %s failed: %s", devpath, strerror(errno)); - size = -errno; -- } else if (size == (ssize_t)value_len) { -- condlog(4, "overflow while reading from %s", devpath); -- size = 0; -- } -+ }; - - close(fd); - return size; diff --git a/0011-multipath-tools-Makefiles-replace-libdir-by-plugindi.patch b/0011-multipath-tools-Makefiles-replace-libdir-by-plugindi.patch new file mode 100644 index 0000000..82c63d1 --- /dev/null +++ b/0011-multipath-tools-Makefiles-replace-libdir-by-plugindi.patch @@ -0,0 +1,110 @@ +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/0012-libmultipath-common-code-path-for-sysfs_attr_get_val.patch b/0012-libmultipath-common-code-path-for-sysfs_attr_get_val.patch deleted file mode 100644 index d09cd8a..0000000 --- a/0012-libmultipath-common-code-path-for-sysfs_attr_get_val.patch +++ /dev/null @@ -1,115 +0,0 @@ -From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 -From: Martin Wilck -Date: Tue, 5 Jul 2022 11:14:30 +0200 -Subject: [PATCH] libmultipath: common code path for sysfs_attr_get_value() - -The code for sysfs_attr_get_value and sysfs_bin_attr_get_value() was -almost identical. Use a common code path. - -Signed-off-by: Martin Wilck - -Reviewed-by: Benjamin Marzinski -Signed-off-by: Benjamin Marzinski ---- - libmultipath/sysfs.c | 70 +++++++++++--------------------------------- - 1 file changed, 17 insertions(+), 53 deletions(-) - -diff --git a/libmultipath/sysfs.c b/libmultipath/sysfs.c -index 3ec92512..4db911cc 100644 ---- a/libmultipath/sysfs.c -+++ b/libmultipath/sysfs.c -@@ -44,8 +44,8 @@ - * as libudev lacks the capability to update an attribute value. - * So for modified attributes we need to implement our own function. - */ --ssize_t sysfs_attr_get_value(struct udev_device *dev, const char *attr_name, -- char * value, size_t value_len) -+static ssize_t __sysfs_attr_get_value(struct udev_device *dev, const char *attr_name, -+ char *value, size_t value_len, bool binary) - { - char devpath[PATH_SIZE]; - struct stat statbuf; -@@ -87,12 +87,14 @@ ssize_t sysfs_attr_get_value(struct udev_device *dev, const char *attr_name, - if (size < 0) { - condlog(4, "read from %s failed: %s", devpath, strerror(errno)); - size = -errno; -- value[0] = '\0'; -- } else if (size == (ssize_t)value_len) { -+ if (!binary) -+ value[0] = '\0'; -+ } else if (!binary && size == (ssize_t)value_len) { -+ condlog(3, "%s: overflow reading from %s (required len: %zu)", -+ __func__, devpath, size); - value[size - 1] = '\0'; -- condlog(4, "overflow while reading from %s", devpath); - size = 0; -- } else { -+ } else if (!binary) { - value[size] = '\0'; - size = strchop(value); - } -@@ -101,55 +103,17 @@ ssize_t sysfs_attr_get_value(struct udev_device *dev, const char *attr_name, - return size; - } - --ssize_t sysfs_bin_attr_get_value(struct udev_device *dev, const char *attr_name, -- unsigned char * value, size_t value_len) -+ssize_t sysfs_attr_get_value(struct udev_device *dev, const char *attr_name, -+ char *value, size_t value_len) - { -- char devpath[PATH_SIZE]; -- struct stat statbuf; -- int fd; -- ssize_t size = -1; -- -- if (!dev || !attr_name || !value) -- return 0; -- -- snprintf(devpath, PATH_SIZE, "%s/%s", udev_device_get_syspath(dev), -- attr_name); -- condlog(4, "open '%s'", devpath); -- /* read attribute value */ -- fd = open(devpath, O_RDONLY); -- if (fd < 0) { -- condlog(4, "attribute '%s' can not be opened: %s", -- devpath, strerror(errno)); -- return -errno; -- } -- if (fstat(fd, &statbuf) != 0) { -- condlog(4, "stat '%s' failed: %s", devpath, strerror(errno)); -- close(fd); -- return -ENXIO; -- } -- -- /* skip directories */ -- if (S_ISDIR(statbuf.st_mode)) { -- condlog(4, "%s is a directory", devpath); -- close(fd); -- return -EISDIR; -- } -- -- /* skip non-writeable files */ -- if ((statbuf.st_mode & S_IRUSR) == 0) { -- condlog(4, "%s is not readable", devpath); -- close(fd); -- return -EPERM; -- } -- -- size = read(fd, value, value_len); -- if (size < 0) { -- condlog(4, "read from %s failed: %s", devpath, strerror(errno)); -- size = -errno; -- }; -+ return __sysfs_attr_get_value(dev, attr_name, value, value_len, false); -+} - -- close(fd); -- return size; -+ssize_t sysfs_bin_attr_get_value(struct udev_device *dev, const char *attr_name, -+ unsigned char *value, size_t value_len) -+{ -+ return __sysfs_attr_get_value(dev, attr_name, (char *)value, -+ value_len, true); - } - - ssize_t sysfs_attr_set_value(struct udev_device *dev, const char *attr_name, diff --git a/0012-multipath-tools-Makefile.inc-use-simple-make-variabl.patch b/0012-multipath-tools-Makefile.inc-use-simple-make-variabl.patch new file mode 100644 index 0000000..16cca1e --- /dev/null +++ b/0012-multipath-tools-Makefile.inc-use-simple-make-variabl.patch @@ -0,0 +1,112 @@ +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/0013-libmultipath-sanitize-error-checking-in-sysfs-access.patch b/0013-libmultipath-sanitize-error-checking-in-sysfs-access.patch deleted file mode 100644 index 9dc3dc5..0000000 --- a/0013-libmultipath-sanitize-error-checking-in-sysfs-access.patch +++ /dev/null @@ -1,165 +0,0 @@ -From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 -From: Martin Wilck -Date: Tue, 5 Jul 2022 11:41:40 +0200 -Subject: [PATCH] libmultipath: sanitize error checking in sysfs accessors - -udev_device_get_syspath() may return NULL; check for it, and check -for pathname overflow. Disallow a zero buffer length. The fstat() -calls were superfluous, as a read() or write() on the fd would -return the respective error codes depending on file type or permissions, -the extra system call and code complexity adds no value. - -Log levels should be moderate in sysfs.c, because it depends -on the caller whether errors getting/setting certain attributes are -fatal. - -Signed-off-by: Martin Wilck - -Reviewed-by: Benjamin Marzinski -Signed-off-by: Benjamin Marzinski ---- - libmultipath/sysfs.c | 94 ++++++++++++++++++-------------------------- - 1 file changed, 39 insertions(+), 55 deletions(-) - -diff --git a/libmultipath/sysfs.c b/libmultipath/sysfs.c -index 4db911cc..1f0f2074 100644 ---- a/libmultipath/sysfs.c -+++ b/libmultipath/sysfs.c -@@ -47,46 +47,38 @@ - static ssize_t __sysfs_attr_get_value(struct udev_device *dev, const char *attr_name, - char *value, size_t value_len, bool binary) - { -+ const char *syspath; - char devpath[PATH_SIZE]; -- struct stat statbuf; - int fd; - ssize_t size = -1; - -- if (!dev || !attr_name || !value) -- return 0; -+ if (!dev || !attr_name || !value || !value_len) { -+ condlog(1, "%s: invalid parameters", __func__); -+ return -EINVAL; -+ } - -- snprintf(devpath, PATH_SIZE, "%s/%s", udev_device_get_syspath(dev), -- attr_name); -+ syspath = udev_device_get_syspath(dev); -+ if (!syspath) { -+ condlog(3, "%s: invalid udevice", __func__); -+ return -EINVAL; -+ } -+ if (safe_sprintf(devpath, "%s/%s", syspath, attr_name)) { -+ condlog(3, "%s: devpath overflow", __func__); -+ return -EOVERFLOW; -+ } - condlog(4, "open '%s'", devpath); - /* read attribute value */ - fd = open(devpath, O_RDONLY); - if (fd < 0) { -- condlog(4, "attribute '%s' can not be opened: %s", -- devpath, strerror(errno)); -+ condlog(3, "%s: attribute '%s' can not be opened: %s", -+ __func__, devpath, strerror(errno)); - return -errno; - } -- if (fstat(fd, &statbuf) < 0) { -- condlog(4, "stat '%s' failed: %s", devpath, strerror(errno)); -- close(fd); -- return -ENXIO; -- } -- /* skip directories */ -- if (S_ISDIR(statbuf.st_mode)) { -- condlog(4, "%s is a directory", devpath); -- close(fd); -- return -EISDIR; -- } -- /* skip non-writeable files */ -- if ((statbuf.st_mode & S_IRUSR) == 0) { -- condlog(4, "%s is not readable", devpath); -- close(fd); -- return -EPERM; -- } -- - size = read(fd, value, value_len); - if (size < 0) { -- condlog(4, "read from %s failed: %s", devpath, strerror(errno)); - size = -errno; -+ condlog(3, "%s: read from %s failed: %s", __func__, devpath, -+ strerror(errno)); - if (!binary) - value[0] = '\0'; - } else if (!binary && size == (ssize_t)value_len) { -@@ -119,51 +111,43 @@ ssize_t sysfs_bin_attr_get_value(struct udev_device *dev, const char *attr_name, - ssize_t sysfs_attr_set_value(struct udev_device *dev, const char *attr_name, - const char * value, size_t value_len) - { -+ const char *syspath; - char devpath[PATH_SIZE]; -- struct stat statbuf; - int fd; - ssize_t size = -1; - -- if (!dev || !attr_name || !value || !value_len) -- return 0; -+ if (!dev || !attr_name || !value || !value_len) { -+ condlog(1, "%s: invalid parameters", __func__); -+ return -EINVAL; -+ } -+ -+ syspath = udev_device_get_syspath(dev); -+ if (!syspath) { -+ condlog(3, "%s: invalid udevice", __func__); -+ return -EINVAL; -+ } -+ if (safe_sprintf(devpath, "%s/%s", syspath, attr_name)) { -+ condlog(3, "%s: devpath overflow", __func__); -+ return -EOVERFLOW; -+ } - -- snprintf(devpath, PATH_SIZE, "%s/%s", udev_device_get_syspath(dev), -- attr_name); - condlog(4, "open '%s'", devpath); - /* write attribute value */ - fd = open(devpath, O_WRONLY); - if (fd < 0) { -- condlog(4, "attribute '%s' can not be opened: %s", -- devpath, strerror(errno)); -- return -errno; -- } -- if (fstat(fd, &statbuf) != 0) { -- condlog(4, "stat '%s' failed: %s", devpath, strerror(errno)); -- close(fd); -+ condlog(2, "%s: attribute '%s' can not be opened: %s", -+ __func__, devpath, strerror(errno)); - return -errno; - } - -- /* skip directories */ -- if (S_ISDIR(statbuf.st_mode)) { -- condlog(4, "%s is a directory", devpath); -- close(fd); -- return -EISDIR; -- } -- -- /* skip non-writeable files */ -- if ((statbuf.st_mode & S_IWUSR) == 0) { -- condlog(4, "%s is not writeable", devpath); -- close(fd); -- return -EPERM; -- } -- - size = write(fd, value, value_len); - if (size < 0) { -- condlog(4, "write to %s failed: %s", devpath, strerror(errno)); - size = -errno; -+ condlog(3, "%s: write to %s failed: %s", __func__, -+ devpath, strerror(errno)); - } else if (size < (ssize_t)value_len) { -- condlog(4, "tried to write %ld to %s. Wrote %ld", -- (long)value_len, devpath, (long)size); -+ condlog(3, "%s: underflow writing %zu bytes to %s. Wrote %zd bytes", -+ __func__, value_len, devpath, size); - size = 0; - } - diff --git a/0013-multipath-tools-Makefile.inc-fix-a-log-message.patch b/0013-multipath-tools-Makefile.inc-fix-a-log-message.patch new file mode 100644 index 0000000..3e424dc --- /dev/null +++ b/0013-multipath-tools-Makefile.inc-fix-a-log-message.patch @@ -0,0 +1,24 @@ +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/0014-libmultipath-get-rid-of-PATH_SIZE.patch b/0014-libmultipath-get-rid-of-PATH_SIZE.patch deleted file mode 100644 index a080792..0000000 --- a/0014-libmultipath-get-rid-of-PATH_SIZE.patch +++ /dev/null @@ -1,115 +0,0 @@ -From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 -From: Martin Wilck -Date: Tue, 5 Jul 2022 11:52:42 +0200 -Subject: [PATCH] libmultipath: get rid of PATH_SIZE - -replace PATH_SIZE with the system limit PATH_MAX. In some places, -PATH_SIZE was used for file names. Use FILE_NAME_SIZE in these cases. -Also, use a constant for "multipathd.service" in systemd_service_enabled_in(). - -Signed-off-by: Martin Wilck - -Reviewed-by: Benjamin Marzinski -Signed-off-by: Benjamin Marzinski ---- - libmultipath/structs.h | 3 --- - libmultipath/sysfs.c | 8 ++++---- - libmultipath/util.c | 8 +++++--- - multipathd/cli_handlers.c | 2 +- - 4 files changed, 10 insertions(+), 11 deletions(-) - -diff --git a/libmultipath/structs.h b/libmultipath/structs.h -index a6a09441..dfa12ff9 100644 ---- a/libmultipath/structs.h -+++ b/libmultipath/structs.h -@@ -17,7 +17,6 @@ - #define FILE_NAME_SIZE 256 - #define CALLOUT_MAX_SIZE 256 - #define BLK_DEV_SIZE 33 --#define PATH_SIZE 512 - #define NAME_SIZE 512 - #define HOST_NAME_LEN 16 - #define SLOT_NAME_SIZE 40 -@@ -519,6 +518,4 @@ int pathcmp (const struct pathgroup *, const struct pathgroup *); - int add_feature (char **, const char *); - int remove_feature (char **, const char *); - --extern char sysfs_path[PATH_SIZE]; -- - #endif /* _STRUCTS_H */ -diff --git a/libmultipath/sysfs.c b/libmultipath/sysfs.c -index 1f0f2074..e48b05ec 100644 ---- a/libmultipath/sysfs.c -+++ b/libmultipath/sysfs.c -@@ -48,7 +48,7 @@ static ssize_t __sysfs_attr_get_value(struct udev_device *dev, const char *attr_ - char *value, size_t value_len, bool binary) - { - const char *syspath; -- char devpath[PATH_SIZE]; -+ char devpath[PATH_MAX]; - int fd; - ssize_t size = -1; - -@@ -112,7 +112,7 @@ ssize_t sysfs_attr_set_value(struct udev_device *dev, const char *attr_name, - const char * value, size_t value_len) - { - const char *syspath; -- char devpath[PATH_SIZE]; -+ char devpath[PATH_MAX]; - int fd; - ssize_t size = -1; - -@@ -184,7 +184,7 @@ sysfs_get_size (struct path *pp, unsigned long long * size) - int sysfs_check_holders(char * check_devt, char * new_devt) - { - unsigned int major, new_minor, table_minor; -- char path[PATH_MAX], check_dev[PATH_SIZE]; -+ char path[PATH_MAX], check_dev[FILE_NAME_SIZE]; - char * table_name; - DIR *dirfd; - struct dirent *holder; -@@ -194,7 +194,7 @@ int sysfs_check_holders(char * check_devt, char * new_devt) - return 0; - } - -- if (devt2devname(check_dev, PATH_SIZE, check_devt)) { -+ if (devt2devname(check_dev, sizeof(check_dev), check_devt)) { - condlog(1, "can't get devname for %s", check_devt); - return 0; - } -diff --git a/libmultipath/util.c b/libmultipath/util.c -index ce5ea73e..e7e7d4c1 100644 ---- a/libmultipath/util.c -+++ b/libmultipath/util.c -@@ -242,13 +242,15 @@ setup_thread_attr(pthread_attr_t *attr, size_t stacksize, int detached) - - int systemd_service_enabled_in(const char *dev, const char *prefix) - { -- char path[PATH_SIZE], file[PATH_MAX], service[PATH_SIZE]; -+ static const char service[] = "multipathd.service"; -+ char path[PATH_MAX], file[PATH_MAX]; - DIR *dirfd; - struct dirent *d; - int found = 0; - -- snprintf(service, PATH_SIZE, "multipathd.service"); -- snprintf(path, PATH_SIZE, "%s/systemd/system", prefix); -+ if (safe_sprintf(path, "%s/systemd/system", prefix)) -+ return 0; -+ - condlog(3, "%s: checking for %s in %s", dev, service, path); - - dirfd = opendir(path); -diff --git a/multipathd/cli_handlers.c b/multipathd/cli_handlers.c -index d79cdd7c..db4d4412 100644 ---- a/multipathd/cli_handlers.c -+++ b/multipathd/cli_handlers.c -@@ -688,7 +688,7 @@ cli_add_map (void * v, struct strbuf *reply, void * data) - struct vectors * vecs = (struct vectors *)data; - char * param = get_keyparam(v, MAP); - int major = -1, minor = -1; -- char dev_path[PATH_SIZE]; -+ char dev_path[FILE_NAME_SIZE]; - char *refwwid, *alias = NULL; - int rc, count = 0; - struct config *conf; diff --git a/0014-multipath-tools-Makefile.inc-set-systemd-specific-fl.patch b/0014-multipath-tools-Makefile.inc-set-systemd-specific-fl.patch new file mode 100644 index 0000000..fa37b7c --- /dev/null +++ b/0014-multipath-tools-Makefile.inc-set-systemd-specific-fl.patch @@ -0,0 +1,129 @@ +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/0015-libmultipath-sysfs_attr_get_value-don-t-return-0-if-.patch b/0015-libmultipath-sysfs_attr_get_value-don-t-return-0-if-.patch deleted file mode 100644 index d58b785..0000000 --- a/0015-libmultipath-sysfs_attr_get_value-don-t-return-0-if-.patch +++ /dev/null @@ -1,172 +0,0 @@ -From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 -From: Martin Wilck -Date: Tue, 5 Jul 2022 13:33:51 +0200 -Subject: [PATCH] libmultipath: sysfs_attr_get_value(): don't return 0 if - buffer too small - -If the passed read buffer is too small to hold the value read plus -terminating 0 byte, return the given size value rather than 0. - -This way we get similar semantics as for sysfs_bin_attr_get_get_value(), -except that sysfs_attr_get_value() must always 0-terminate the value; -thus a return value equal to the length parameter is an error for -the non-binary case. - -Provide a helper macro to test this "overflow" condition. - -Signed-off-by: Martin Wilck - -Reviewed-by: Benjamin Marzinski -Signed-off-by: Benjamin Marzinski ---- - libmultipath/configure.c | 2 +- - libmultipath/discovery.c | 14 +++++++------- - libmultipath/propsel.c | 6 +++++- - libmultipath/sysfs.c | 3 +-- - libmultipath/sysfs.h | 13 +++++++++++++ - multipathd/main.c | 2 +- - 6 files changed, 28 insertions(+), 12 deletions(-) - -diff --git a/libmultipath/configure.c b/libmultipath/configure.c -index 09ae708d..467bbaa6 100644 ---- a/libmultipath/configure.c -+++ b/libmultipath/configure.c -@@ -589,7 +589,7 @@ sysfs_set_max_sectors_kb(struct multipath *mpp, int is_reload) - ret = sysfs_attr_get_value(udd, "queue/max_sectors_kb", buff, - sizeof(buff)); - udev_device_unref(udd); -- if (ret <= 0) { -+ if (!sysfs_attr_value_ok(ret, sizeof(buff))) { - condlog(1, "failed to get current max_sectors_kb from %s", mpp->alias); - return 1; - } -diff --git a/libmultipath/discovery.c b/libmultipath/discovery.c -index f5b8401c..54b1caf0 100644 ---- a/libmultipath/discovery.c -+++ b/libmultipath/discovery.c -@@ -560,10 +560,10 @@ sysfs_get_asymmetric_access_state(struct path *pp, char *buff, int buflen) - if (!parent) - return -1; - -- if (sysfs_attr_get_value(parent, "access_state", buff, buflen) <= 0) -+ if (!sysfs_attr_get_value_ok(parent, "access_state", buff, buflen)) - return -1; - -- if (sysfs_attr_get_value(parent, "preferred_path", value, 16) <= 0) -+ if (!sysfs_attr_get_value_ok(parent, "preferred_path", value, sizeof(value))) - return 0; - - preferred = strtoul(value, &eptr, 0); -@@ -638,8 +638,8 @@ sysfs_set_rport_tmo(struct multipath *mpp, struct path *pp) - /* - * read the current dev_loss_tmo value from sysfs - */ -- ret = sysfs_attr_get_value(rport_dev, "dev_loss_tmo", value, 16); -- if (ret <= 0) { -+ ret = sysfs_attr_get_value(rport_dev, "dev_loss_tmo", value, sizeof(value)); -+ if (!sysfs_attr_value_ok(ret, sizeof(value))) { - condlog(0, "%s: failed to read dev_loss_tmo value, " - "error %d", rport_id, -ret); - goto out; -@@ -1737,8 +1737,8 @@ path_offline (struct path * pp) - } - - memset(buff, 0x0, SCSI_STATE_SIZE); -- err = sysfs_attr_get_value(parent, "state", buff, SCSI_STATE_SIZE); -- if (err <= 0) { -+ err = sysfs_attr_get_value(parent, "state", buff, sizeof(buff)); -+ if (!sysfs_attr_value_ok(err, sizeof(buff))) { - if (err == -ENXIO) - return PATH_REMOVED; - else -@@ -2142,7 +2142,7 @@ static ssize_t uid_fallback(struct path *pp, int path_state, - return -1; - len = sysfs_attr_get_value(pp->udev, "wwid", value, - sizeof(value)); -- if (len <= 0) -+ if (!sysfs_attr_value_ok(len, sizeof(value))) - return -1; - len = strlcpy(pp->wwid, value, WWID_SIZE); - if (len >= WWID_SIZE) { -diff --git a/libmultipath/propsel.c b/libmultipath/propsel.c -index f782f251..98e3aad1 100644 ---- a/libmultipath/propsel.c -+++ b/libmultipath/propsel.c -@@ -435,6 +435,7 @@ out: - static int get_dh_state(struct path *pp, char *value, size_t value_len) - { - struct udev_device *ud; -+ ssize_t rc; - - if (pp->udev == NULL) - return -1; -@@ -444,7 +445,10 @@ static int get_dh_state(struct path *pp, char *value, size_t value_len) - if (ud == NULL) - return -1; - -- return sysfs_attr_get_value(ud, "dh_state", value, value_len); -+ rc = sysfs_attr_get_value(ud, "dh_state", value, value_len); -+ if (!sysfs_attr_value_ok(rc, value_len)) -+ return -1; -+ return rc; - } - - int select_hwhandler(struct config *conf, struct multipath *mp) -diff --git a/libmultipath/sysfs.c b/libmultipath/sysfs.c -index e48b05ec..125f1c2b 100644 ---- a/libmultipath/sysfs.c -+++ b/libmultipath/sysfs.c -@@ -85,7 +85,6 @@ static ssize_t __sysfs_attr_get_value(struct udev_device *dev, const char *attr_ - condlog(3, "%s: overflow reading from %s (required len: %zu)", - __func__, devpath, size); - value[size - 1] = '\0'; -- size = 0; - } else if (!binary) { - value[size] = '\0'; - size = strchop(value); -@@ -165,7 +164,7 @@ sysfs_get_size (struct path *pp, unsigned long long * size) - return 1; - - attr[0] = '\0'; -- if (sysfs_attr_get_value(pp->udev, "size", attr, 255) <= 0) { -+ if (!sysfs_attr_get_value_ok(pp->udev, "size", attr, sizeof(attr))) { - condlog(3, "%s: No size attribute in sysfs", pp->dev); - return 1; - } -diff --git a/libmultipath/sysfs.h b/libmultipath/sysfs.h -index 72b39ab2..cdc84e40 100644 ---- a/libmultipath/sysfs.h -+++ b/libmultipath/sysfs.h -@@ -12,6 +12,19 @@ ssize_t sysfs_attr_get_value(struct udev_device *dev, const char *attr_name, - char * value, size_t value_len); - ssize_t sysfs_bin_attr_get_value(struct udev_device *dev, const char *attr_name, - unsigned char * value, size_t value_len); -+#define sysfs_attr_value_ok(rc, value_len) \ -+ ({ \ -+ ssize_t __r = rc; \ -+ __r >= 0 && (size_t)__r < (size_t)value_len; \ -+ }) -+ -+#define sysfs_attr_get_value_ok(dev, attr, val, len) \ -+ ({ \ -+ size_t __l = (len); \ -+ ssize_t __rc = sysfs_attr_get_value(dev, attr, val, __l); \ -+ sysfs_attr_value_ok(__rc, __l); \ -+ }) -+ - int sysfs_get_size (struct path *pp, unsigned long long * size); - int sysfs_check_holders(char * check_devt, char * new_devt); - bool sysfs_is_multipathed(struct path *pp, bool set_wwid); -diff --git a/multipathd/main.c b/multipathd/main.c -index 2f2b9d4c..68eca925 100644 ---- a/multipathd/main.c -+++ b/multipathd/main.c -@@ -1126,7 +1126,7 @@ sysfs_get_ro (struct path *pp) - if (!pp->udev) - return -1; - -- if (sysfs_attr_get_value(pp->udev, "ro", buff, sizeof(buff)) <= 0) { -+ if (!sysfs_attr_get_value_ok(pp->udev, "ro", buff, sizeof(buff))) { - condlog(3, "%s: Cannot read ro attribute in sysfs", pp->dev); - return -1; - } diff --git a/0015-multipathd-Makefile-fix-compilation-flags-for-libedi.patch b/0015-multipathd-Makefile-fix-compilation-flags-for-libedi.patch new file mode 100644 index 0000000..0013036 --- /dev/null +++ b/0015-multipathd-Makefile-fix-compilation-flags-for-libedi.patch @@ -0,0 +1,54 @@ +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: Tue, 5 Jul 2022 17:51:41 +0200 -Subject: [PATCH] libmultipath: sysfs_attr_set_value(): don't return 0 on - partial write - -sysfs_attr_set_value() returned 0 if not all requested bytes were written. -Change this to return the number of bytes written. Error checking is now -somewhat more involved; provide a helper macro for it. - -Signed-off-by: Martin Wilck -Reviewed-by: Benjamin Marzinski -Signed-off-by: Benjamin Marzinski ---- - libmultipath/configure.c | 10 ++++-- - libmultipath/discovery.c | 74 +++++++++++++++++++++++++--------------- - libmultipath/sysfs.c | 6 ++-- - libmultipath/sysfs.h | 10 ++++++ - 4 files changed, 66 insertions(+), 34 deletions(-) - -diff --git a/libmultipath/configure.c b/libmultipath/configure.c -index 467bbaa6..0607dbac 100644 ---- a/libmultipath/configure.c -+++ b/libmultipath/configure.c -@@ -568,6 +568,7 @@ sysfs_set_max_sectors_kb(struct multipath *mpp, int is_reload) - struct pathgroup * pgp; - struct path *pp; - char buff[11]; -+ ssize_t len; - int i, j, ret, err = 0; - struct udev_device *udd; - int max_sectors_kb; -@@ -600,14 +601,17 @@ sysfs_set_max_sectors_kb(struct multipath *mpp, int is_reload) - } - } - snprintf(buff, 11, "%d", max_sectors_kb); -+ len = strlen(buff); - - vector_foreach_slot (mpp->pg, pgp, i) { - vector_foreach_slot(pgp->paths, pp, j) { - ret = sysfs_attr_set_value(pp->udev, - "queue/max_sectors_kb", -- buff, strlen(buff)); -- if (ret < 0) { -- condlog(1, "failed setting max_sectors_kb on %s : %s", pp->dev, strerror(-ret)); -+ buff, len); -+ if (ret != len) { -+ log_sysfs_attr_set_value(1, ret, -+ "failed setting max_sectors_kb on %s", -+ pp->dev); - err = 1; - } - } -diff --git a/libmultipath/discovery.c b/libmultipath/discovery.c -index 54b1caf0..ee290093 100644 ---- a/libmultipath/discovery.c -+++ b/libmultipath/discovery.c -@@ -598,13 +598,15 @@ sysfs_set_eh_deadline(struct path *pp) - len = sprintf(value, "%d", pp->eh_deadline); - - ret = sysfs_attr_set_value(hostdev, "eh_deadline", -- value, len + 1); -+ value, len); - /* - * not all scsi drivers support setting eh_deadline, so failing - * is totally reasonable - */ -- if (ret <= 0) -- condlog(3, "%s: failed to set eh_deadline to %s, error %d", udev_device_get_sysname(hostdev), value, -ret); -+ if (ret != len) -+ log_sysfs_attr_set_value(3, ret, -+ "%s: failed to set eh_deadline to %s", -+ udev_device_get_sysname(hostdev), value); - - udev_device_unref(hostdev); - return (ret <= 0); -@@ -667,19 +669,22 @@ sysfs_set_rport_tmo(struct multipath *mpp, struct path *pp) - pp->fast_io_fail != MP_FAST_IO_FAIL_OFF) { - /* Check if we need to temporarily increase dev_loss_tmo */ - if ((unsigned int)pp->fast_io_fail >= tmo) { -+ ssize_t len; -+ - /* Increase dev_loss_tmo temporarily */ - snprintf(value, sizeof(value), "%u", - (unsigned int)pp->fast_io_fail + 1); -+ len = strlen(value); - ret = sysfs_attr_set_value(rport_dev, "dev_loss_tmo", -- value, strlen(value)); -- if (ret <= 0) { -+ value, len); -+ if (ret != len) { - if (ret == -EBUSY) - condlog(3, "%s: rport blocked", - rport_id); - else -- condlog(0, "%s: failed to set " -- "dev_loss_tmo to %s, error %d", -- rport_id, value, -ret); -+ log_sysfs_attr_set_value(0, ret, -+ "%s: failed to set dev_loss_tmo to %s", -+ rport_id, value); - goto out; - } - } -@@ -691,32 +696,39 @@ sysfs_set_rport_tmo(struct multipath *mpp, struct path *pp) - pp->dev_loss = DEFAULT_DEV_LOSS_TMO; - } - if (pp->fast_io_fail != MP_FAST_IO_FAIL_UNSET) { -+ ssize_t len; -+ - if (pp->fast_io_fail == MP_FAST_IO_FAIL_OFF) - sprintf(value, "off"); - else if (pp->fast_io_fail == MP_FAST_IO_FAIL_ZERO) - sprintf(value, "0"); - else - snprintf(value, 16, "%u", pp->fast_io_fail); -+ len = strlen(value); - ret = sysfs_attr_set_value(rport_dev, "fast_io_fail_tmo", -- value, strlen(value)); -- if (ret <= 0) { -+ value, len); -+ if (ret != len) { - if (ret == -EBUSY) - condlog(3, "%s: rport blocked", rport_id); - else -- condlog(0, "%s: failed to set fast_io_fail_tmo to %s, error %d", -- rport_id, value, -ret); -+ log_sysfs_attr_set_value(0, ret, -+ "%s: failed to set fast_io_fail_tmo to %s", -+ rport_id, value); - } - } - if (pp->dev_loss != DEV_LOSS_TMO_UNSET) { -+ ssize_t len; -+ - snprintf(value, 16, "%u", pp->dev_loss); -- ret = sysfs_attr_set_value(rport_dev, "dev_loss_tmo", -- value, strlen(value)); -- if (ret <= 0) { -+ len = strlen(value); -+ ret = sysfs_attr_set_value(rport_dev, "dev_loss_tmo", value, len); -+ if (ret != len) { - if (ret == -EBUSY) - condlog(3, "%s: rport blocked", rport_id); - else -- condlog(0, "%s: failed to set dev_loss_tmo to %s, error %d", -- rport_id, value, -ret); -+ log_sysfs_attr_set_value(0, ret, -+ "%s: failed to set dev_loss_tmo to %s", -+ rport_id, value); - } - } - out: -@@ -754,12 +766,16 @@ sysfs_set_session_tmo(struct path *pp) - condlog(3, "%s: can't set fast_io_fail_tmo to '0'" - "on iSCSI", pp->dev); - } else { -+ ssize_t len, ret; -+ - snprintf(value, 11, "%u", pp->fast_io_fail); -- if (sysfs_attr_set_value(session_dev, "recovery_tmo", -- value, strlen(value)) <= 0) { -- condlog(3, "%s: Failed to set recovery_tmo, " -- " error %d", pp->dev, errno); -- } -+ len = strlen(value); -+ ret = sysfs_attr_set_value(session_dev, "recovery_tmo", -+ value, len); -+ if (ret != len) -+ log_sysfs_attr_set_value(3, ret, -+ "%s: Failed to set recovery_tmo to %s", -+ pp->dev, value); - } - } - udev_device_unref(session_dev); -@@ -802,12 +818,16 @@ sysfs_set_nexus_loss_tmo(struct path *pp) - pp->sg_id.channel, pp->sg_id.scsi_id, end_dev_id); - - if (pp->dev_loss != DEV_LOSS_TMO_UNSET) { -+ ssize_t len, ret; -+ - snprintf(value, 11, "%u", pp->dev_loss); -- if (sysfs_attr_set_value(sas_dev, "I_T_nexus_loss_timeout", -- value, strlen(value)) <= 0) -- condlog(3, "%s: failed to update " -- "I_T Nexus loss timeout, error %d", -- pp->dev, errno); -+ len = strlen(value); -+ ret = sysfs_attr_set_value(sas_dev, "I_T_nexus_loss_timeout", -+ value, len); -+ if (ret != len) -+ log_sysfs_attr_set_value(3, ret, -+ "%s: failed to update I_T Nexus loss timeout", -+ pp->dev); - } - udev_device_unref(sas_dev); - return; -diff --git a/libmultipath/sysfs.c b/libmultipath/sysfs.c -index 125f1c2b..9c84af70 100644 ---- a/libmultipath/sysfs.c -+++ b/libmultipath/sysfs.c -@@ -134,7 +134,7 @@ ssize_t sysfs_attr_set_value(struct udev_device *dev, const char *attr_name, - /* write attribute value */ - fd = open(devpath, O_WRONLY); - if (fd < 0) { -- condlog(2, "%s: attribute '%s' can not be opened: %s", -+ condlog(3, "%s: attribute '%s' can not be opened: %s", - __func__, devpath, strerror(errno)); - return -errno; - } -@@ -144,11 +144,9 @@ ssize_t sysfs_attr_set_value(struct udev_device *dev, const char *attr_name, - size = -errno; - condlog(3, "%s: write to %s failed: %s", __func__, - devpath, strerror(errno)); -- } else if (size < (ssize_t)value_len) { -+ } else if (size < (ssize_t)value_len) - condlog(3, "%s: underflow writing %zu bytes to %s. Wrote %zd bytes", - __func__, value_len, devpath, size); -- size = 0; -- } - - close(fd); - return size; -diff --git a/libmultipath/sysfs.h b/libmultipath/sysfs.h -index cdc84e40..799f68e9 100644 ---- a/libmultipath/sysfs.h -+++ b/libmultipath/sysfs.h -@@ -5,6 +5,7 @@ - #ifndef _LIBMULTIPATH_SYSFS_H - #define _LIBMULTIPATH_SYSFS_H - #include -+#include "strbuf.h" - - ssize_t sysfs_attr_set_value(struct udev_device *dev, const char *attr_name, - const char * value, size_t value_len); -@@ -25,6 +26,15 @@ ssize_t sysfs_bin_attr_get_value(struct udev_device *dev, const char *attr_name, - sysfs_attr_value_ok(__rc, __l); \ - }) - -+#define log_sysfs_attr_set_value(prio, rc, fmt, __args...) \ -+do { \ -+ STRBUF_ON_STACK(__buf); \ -+ if (print_strbuf(&__buf, fmt, ##__args) >= 0 && \ -+ print_strbuf(&__buf, ": %s", rc < 0 ? strerror(-rc) : \ -+ "write underflow") >= 0) \ -+ condlog(prio, "%s", get_strbuf_str(&__buf)); \ -+} while(0) -+ - int sysfs_get_size (struct path *pp, unsigned long long * size); - int sysfs_check_holders(char * check_devt, char * new_devt); - bool sysfs_is_multipathed(struct path *pp, bool set_wwid); diff --git a/0016-multipath-tools-Makefiles-clean-up-executable-Makefi.patch b/0016-multipath-tools-Makefiles-clean-up-executable-Makefi.patch new file mode 100644 index 0000000..3dd4a8a --- /dev/null +++ b/0016-multipath-tools-Makefiles-clean-up-executable-Makefi.patch @@ -0,0 +1,136 @@ +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 +From: Martin Wilck +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/0017-libmultipath-sysfs-cleanup-file-descriptors-on-pthre.patch b/0017-libmultipath-sysfs-cleanup-file-descriptors-on-pthre.patch deleted file mode 100644 index 90fbfdf..0000000 --- a/0017-libmultipath-sysfs-cleanup-file-descriptors-on-pthre.patch +++ /dev/null @@ -1,71 +0,0 @@ -From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 -From: Martin Wilck -Date: Tue, 5 Jul 2022 18:07:57 +0200 -Subject: [PATCH] libmultipath: sysfs: cleanup file descriptors on - pthread_cancel() - -Signed-off-by: Martin Wilck - -Reviewed-by: Benjamin Marzinski -Signed-off-by: Benjamin Marzinski ---- - libmultipath/sysfs.c | 11 +++++++---- - 1 file changed, 7 insertions(+), 4 deletions(-) - -diff --git a/libmultipath/sysfs.c b/libmultipath/sysfs.c -index 9c84af70..64946385 100644 ---- a/libmultipath/sysfs.c -+++ b/libmultipath/sysfs.c -@@ -49,7 +49,7 @@ static ssize_t __sysfs_attr_get_value(struct udev_device *dev, const char *attr_ - { - const char *syspath; - char devpath[PATH_MAX]; -- int fd; -+ long fd; - ssize_t size = -1; - - if (!dev || !attr_name || !value || !value_len) { -@@ -74,6 +74,8 @@ static ssize_t __sysfs_attr_get_value(struct udev_device *dev, const char *attr_ - __func__, devpath, strerror(errno)); - return -errno; - } -+ pthread_cleanup_push(close_fd, (void *)fd); -+ - size = read(fd, value, value_len); - if (size < 0) { - size = -errno; -@@ -90,7 +92,7 @@ static ssize_t __sysfs_attr_get_value(struct udev_device *dev, const char *attr_ - size = strchop(value); - } - -- close(fd); -+ pthread_cleanup_pop(1); - return size; - } - -@@ -112,7 +114,7 @@ ssize_t sysfs_attr_set_value(struct udev_device *dev, const char *attr_name, - { - const char *syspath; - char devpath[PATH_MAX]; -- int fd; -+ long fd; - ssize_t size = -1; - - if (!dev || !attr_name || !value || !value_len) { -@@ -138,6 +140,7 @@ ssize_t sysfs_attr_set_value(struct udev_device *dev, const char *attr_name, - __func__, devpath, strerror(errno)); - return -errno; - } -+ pthread_cleanup_push(close_fd, (void *)fd); - - size = write(fd, value, value_len); - if (size < 0) { -@@ -148,7 +151,7 @@ ssize_t sysfs_attr_set_value(struct udev_device *dev, const char *attr_name, - condlog(3, "%s: underflow writing %zu bytes to %s. Wrote %zd bytes", - __func__, value_len, devpath, size); - -- close(fd); -+ pthread_cleanup_pop(1); - return size; - } - diff --git a/0017-multipath-tools-Makefiles-use-common-code-for-librar.patch b/0017-multipath-tools-Makefiles-use-common-code-for-librar.patch new file mode 100644 index 0000000..0b45e62 --- /dev/null +++ b/0017-multipath-tools-Makefiles-use-common-code-for-librar.patch @@ -0,0 +1,261 @@ +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/0018-libmultipath-multipathd-log-failure-setting-sysfs-at.patch b/0018-libmultipath-multipathd-log-failure-setting-sysfs-at.patch deleted file mode 100644 index 710f633..0000000 --- a/0018-libmultipath-multipathd-log-failure-setting-sysfs-at.patch +++ /dev/null @@ -1,168 +0,0 @@ -From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 -From: Martin Wilck -Date: Tue, 5 Jul 2022 18:45:11 +0200 -Subject: [PATCH] libmultipath, multipathd: log failure setting sysfs - attributes - -Failure to set a sysfs attribute is worth noting, normally. - -Signed-off-by: Martin Wilck - -Reviewed-by: Benjamin Marzinski -Signed-off-by: Benjamin Marzinski ---- - libmultipath/configure.c | 18 ++++++++++++++--- - multipathd/fpin_handlers.c | 11 +++++++++-- - multipathd/main.c | 40 ++++++++++++++++++++++++++++++-------- - 3 files changed, 56 insertions(+), 13 deletions(-) - -diff --git a/libmultipath/configure.c b/libmultipath/configure.c -index 0607dbac..4427f910 100644 ---- a/libmultipath/configure.c -+++ b/libmultipath/configure.c -@@ -489,9 +489,15 @@ void trigger_partitions_udev_change(struct udev_device *dev, - - devtype = udev_device_get_devtype(part); - if (devtype && !strcmp("partition", devtype)) { -+ ssize_t ret; -+ - condlog(4, "%s: triggering %s event for %s", __func__, - action, syspath); -- sysfs_attr_set_value(part, "uevent", action, len); -+ ret = sysfs_attr_set_value(part, "uevent", action, len); -+ if (ret != len) -+ log_sysfs_attr_set_value(2, ret, -+ "%s: failed to trigger %s uevent", -+ syspath, action); - } - udev_device_unref(part); - } -@@ -510,6 +516,7 @@ trigger_path_udev_change(struct path *pp, bool is_mpath) - */ - const char *action = is_mpath ? "change" : "add"; - const char *env; -+ ssize_t len, ret; - - if (!pp->udev) - return; -@@ -536,8 +543,13 @@ trigger_path_udev_change(struct path *pp, bool is_mpath) - - condlog(3, "triggering %s uevent for %s (is %smultipath member)", - action, pp->dev, is_mpath ? "" : "no "); -- sysfs_attr_set_value(pp->udev, "uevent", -- action, strlen(action)); -+ -+ len = strlen(action); -+ ret = sysfs_attr_set_value(pp->udev, "uevent", action, len); -+ if (ret != len) -+ log_sysfs_attr_set_value(2, ret, -+ "%s: failed to trigger %s uevent", -+ pp->dev, action); - trigger_partitions_udev_change(pp->udev, action, - strlen(action)); - } -diff --git a/multipathd/fpin_handlers.c b/multipathd/fpin_handlers.c -index 384ae318..00195721 100644 ---- a/multipathd/fpin_handlers.c -+++ b/multipathd/fpin_handlers.c -@@ -172,8 +172,15 @@ fpin_els_add_li_frame(struct fc_nl_event *fc_event) - /*Sets the rport port_state to marginal*/ - static void fpin_set_rport_marginal(struct udev_device *rport_dev) - { -- sysfs_attr_set_value(rport_dev, "port_state", -- "Marginal", strlen("Marginal")); -+ static const char marginal[] = "Marginal"; -+ ssize_t ret; -+ -+ ret = sysfs_attr_set_value(rport_dev, "port_state", -+ marginal, sizeof(marginal) - 1); -+ if (ret != sizeof(marginal) - 1) -+ log_sysfs_attr_set_value(2, ret, -+ "%s: failed to set port_state to marginal", -+ udev_device_get_syspath(rport_dev)); - } - - /*Add the marginal devices info into the list*/ -diff --git a/multipathd/main.c b/multipathd/main.c -index 68eca925..a160c824 100644 ---- a/multipathd/main.c -+++ b/multipathd/main.c -@@ -911,14 +911,22 @@ rescan_path(struct udev_device *ud) - { - ud = udev_device_get_parent_with_subsystem_devtype(ud, "scsi", - "scsi_device"); -- if (ud) -- sysfs_attr_set_value(ud, "rescan", "1", strlen("1")); -+ if (ud) { -+ ssize_t ret = -+ sysfs_attr_set_value(ud, "rescan", "1", strlen("1")); -+ if (ret != strlen("1")) -+ log_sysfs_attr_set_value(1, ret, -+ "%s: failed to trigger rescan", -+ udev_device_get_syspath(ud)); -+ } - } - - void - handle_path_wwid_change(struct path *pp, struct vectors *vecs) - { - struct udev_device *udd; -+ static const char add[] = "add"; -+ ssize_t ret; - - if (!pp || !pp->udev) - return; -@@ -929,8 +937,12 @@ handle_path_wwid_change(struct path *pp, struct vectors *vecs) - dm_fail_path(pp->mpp->alias, pp->dev_t); - } - rescan_path(udd); -- sysfs_attr_set_value(udd, "uevent", "add", strlen("add")); -+ ret = sysfs_attr_set_value(udd, "uevent", add, sizeof(add) - 1); - udev_device_unref(udd); -+ if (ret != sizeof(add) - 1) -+ log_sysfs_attr_set_value(1, ret, -+ "%s: failed to trigger add event", -+ pp->dev); - } - - bool -@@ -2003,9 +2015,14 @@ partial_retrigger_tick(vector pathvec) - --pp->partial_retrigger_delay == 0) { - const char *msg = udev_device_get_is_initialized(pp->udev) ? - "change" : "add"; -- -- sysfs_attr_set_value(pp->udev, "uevent", msg, -- strlen(msg)); -+ ssize_t len = strlen(msg); -+ ssize_t ret = sysfs_attr_set_value(pp->udev, "uevent", msg, -+ len); -+ -+ if (len != ret) -+ log_sysfs_attr_set_value(2, ret, -+ "%s: failed to trigger %s event", -+ pp->dev, msg); - } - } - } -@@ -2245,12 +2262,19 @@ check_path (struct vectors * vecs, struct path * pp, unsigned int ticks) - - if (!pp->mpp && pp->initialized == INIT_MISSING_UDEV) { - if (pp->retriggers < retrigger_tries) { -+ static const char change[] = "change"; -+ ssize_t ret; -+ - condlog(2, "%s: triggering change event to reinitialize", - pp->dev); - pp->initialized = INIT_REQUESTED_UDEV; - pp->retriggers++; -- sysfs_attr_set_value(pp->udev, "uevent", "change", -- strlen("change")); -+ ret = sysfs_attr_set_value(pp->udev, "uevent", change, -+ sizeof(change) - 1); -+ if (ret != sizeof(change) - 1) -+ log_sysfs_attr_set_value(1, ret, -+ "%s: failed to trigger change event", -+ pp->dev); - return 0; - } else { - condlog(1, "%s: not initialized after %d udev retriggers", diff --git a/0018-multipath-tools-Makefiles-move-common-code-to-rules..patch b/0018-multipath-tools-Makefiles-move-common-code-to-rules..patch new file mode 100644 index 0000000..1a2069f --- /dev/null +++ b/0018-multipath-tools-Makefiles-move-common-code-to-rules..patch @@ -0,0 +1,172 @@ +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/0019-multipath-tests-expect_condlog-skip-depending-on-ver.patch b/0019-multipath-tests-expect_condlog-skip-depending-on-ver.patch deleted file mode 100644 index 6b7c06b..0000000 --- a/0019-multipath-tests-expect_condlog-skip-depending-on-ver.patch +++ /dev/null @@ -1,37 +0,0 @@ -From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 -From: Martin Wilck -Date: Tue, 5 Jul 2022 23:18:07 +0200 -Subject: [PATCH] multipath tests: expect_condlog: skip depending on verbosity - -otherwise we'll get failures if verbosity level is low. - -Signed-off-by: Martin Wilck - -Reviewed-by: Benjamin Marzinski -Signed-off-by: Benjamin Marzinski ---- - tests/test-log.c | 4 ++++ - 1 file changed, 4 insertions(+) - -diff --git a/tests/test-log.c b/tests/test-log.c -index 14f25b9b..0c17cd96 100644 ---- a/tests/test-log.c -+++ b/tests/test-log.c -@@ -6,6 +6,8 @@ - #include - #include "log.h" - #include "test-log.h" -+#include "debug.h" -+ - - __attribute__((format(printf, 2, 0))) - void __wrap_dlog (int prio, const char * fmt, ...) -@@ -24,6 +26,8 @@ void __wrap_dlog (int prio, const char * fmt, ...) - - void expect_condlog(int prio, char *string) - { -+ if (prio > MAX_VERBOSITY || prio > libmp_verbosity) -+ return; - expect_value(__wrap_dlog, prio, prio); - will_return(__wrap_dlog, string); - } diff --git a/0019-multipath-tools-Makefiles-create-config.mk.patch b/0019-multipath-tools-Makefiles-create-config.mk.patch new file mode 100644 index 0000000..4d403d0 --- /dev/null +++ b/0019-multipath-tools-Makefiles-create-config.mk.patch @@ -0,0 +1,603 @@ +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/0020-multipath-tests-__wrap_dlog-print-log-message.patch b/0020-multipath-tests-__wrap_dlog-print-log-message.patch deleted file mode 100644 index 216e5a2..0000000 --- a/0020-multipath-tests-__wrap_dlog-print-log-message.patch +++ /dev/null @@ -1,27 +0,0 @@ -From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 -From: Martin Wilck -Date: Wed, 6 Jul 2022 11:15:27 +0200 -Subject: [PATCH] multipath tests: __wrap_dlog: print log message - -This makes it easier to analyze errors from __wrap_dlog(). - -Signed-off-by: Martin Wilck - -Reviewed-by: Benjamin Marzinski -Signed-off-by: Benjamin Marzinski ---- - tests/test-log.c | 1 + - 1 file changed, 1 insertion(+) - -diff --git a/tests/test-log.c b/tests/test-log.c -index 0c17cd96..c1745872 100644 ---- a/tests/test-log.c -+++ b/tests/test-log.c -@@ -20,6 +20,7 @@ void __wrap_dlog (int prio, const char * fmt, ...) - va_start(ap, fmt); - vsnprintf(buff, MAX_MSG_SIZE, fmt, ap); - va_end(ap); -+ fprintf(stderr, "%s(%d): %s", __func__, prio, buff); - expected = mock_ptr_type(char *); - assert_memory_equal(buff, expected, strlen(expected)); - } diff --git a/0020-multipath-tools-Makefiles-enable-quiet-build.patch b/0020-multipath-tools-Makefiles-enable-quiet-build.patch new file mode 100644 index 0000000..dbe1129 --- /dev/null +++ b/0020-multipath-tools-Makefiles-enable-quiet-build.patch @@ -0,0 +1,879 @@ +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/0021-multipath-tests-add-sysfs-test.patch b/0021-multipath-tests-add-sysfs-test.patch deleted file mode 100644 index b02a055..0000000 --- a/0021-multipath-tests-add-sysfs-test.patch +++ /dev/null @@ -1,538 +0,0 @@ -From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 -From: Martin Wilck -Date: Tue, 5 Jul 2022 23:19:30 +0200 -Subject: [PATCH] multipath tests: add sysfs test - -Signed-off-by: Martin Wilck - -Reviewed-by: Benjamin Marzinski -Signed-off-by: Benjamin Marzinski ---- - tests/Makefile | 5 +- - tests/sysfs.c | 494 +++++++++++++++++++++++++++++++++++++++++++++++++ - 2 files changed, 498 insertions(+), 1 deletion(-) - create mode 100644 tests/sysfs.c - -diff --git a/tests/Makefile b/tests/Makefile -index d20ef236..95a99908 100644 ---- a/tests/Makefile -+++ b/tests/Makefile -@@ -16,7 +16,7 @@ CFLAGS += $(BIN_CFLAGS) -Wno-unused-parameter $(W_MISSING_INITIALIZERS) - LIBDEPS += -L. -L$(mpathcmddir) -lmultipath -lmpathcmd -lcmocka - - TESTS := uevent parser util dmevents hwtable blacklist unaligned vpd pgpolicy \ -- alias directio valid devt mpathvalid strbuf -+ alias directio valid devt mpathvalid strbuf sysfs - HELPERS := test-lib.o test-log.o - - .SILENT: $(TESTS:%=%.o) -@@ -70,6 +70,9 @@ ifneq ($(DIO_TEST_DEV),) - directio-test_LIBDEPS := -laio - endif - strbuf-test_OBJDEPS := ../libmultipath/strbuf.o -+sysfs-test_TESTDEPS := test-log.o -+sysfs-test_OBJDEPS := ../libmultipath/sysfs.o ../libmultipath/util.o -+sysfs-test_LIBDEPS := -ludev -lpthread -ldl - - %.o: %.c - $(CC) $(CPPFLAGS) $(CFLAGS) $($*-test_FLAGS) -c -o $@ $< -diff --git a/tests/sysfs.c b/tests/sysfs.c -new file mode 100644 -index 00000000..0ec135bf ---- /dev/null -+++ b/tests/sysfs.c -@@ -0,0 +1,494 @@ -+/* -+ * Copyright (c) 2021 SUSE LLC -+ * SPDX-License-Identifier: GPL-2.0-only -+ */ -+ -+#define _GNU_SOURCE -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include "debug.h" -+#include "globals.c" -+#include "test-log.h" -+#include "sysfs.h" -+#include "util.h" -+ -+#define TEST_FD 123 -+ -+char *__wrap_udev_device_get_syspath(struct udev_device *ud) -+{ -+ char *val = mock_ptr_type(char *); -+ -+ return val; -+} -+ -+int __wrap_open(const char *pathname, int flags) -+{ -+ int ret; -+ -+ check_expected(pathname); -+ check_expected(flags); -+ ret = mock_type(int); -+ return ret; -+} -+ -+ssize_t __wrap_read(int fd, void *buf, size_t count) -+{ -+ ssize_t ret; -+ char *val; -+ -+ check_expected(fd); -+ check_expected(count); -+ ret = mock_type(int); -+ val = mock_ptr_type(char *); -+ if (ret >= (ssize_t)count) -+ ret = count; -+ if (ret >= 0 && val) { -+ fprintf(stderr, "%s: '%s' -> %zd\n", __func__, val, ret); -+ memcpy(buf, val, ret); -+ } -+ return ret; -+} -+ -+ssize_t __wrap_write(int fd, void *buf, size_t count) -+{ -+ ssize_t ret; -+ -+ check_expected(fd); -+ check_expected(count); -+ ret = mock_type(int); -+ if (ret >= (ssize_t)count) -+ ret = count; -+ return ret; -+} -+ -+int __real_close(int fd); -+int __wrap_close(int fd) { -+ if (fd != TEST_FD) -+ return __real_close(fd); -+ return mock_type(int); -+} -+ -+static int setup(void **state) -+{ -+ udev = udev_new(); -+ return 0; -+} -+ -+static int teardown(void **state) -+{ -+ udev_unref(udev); -+ return 0; -+} -+ -+static void expect_sagv_invalid(void) -+{ -+ expect_condlog(1, "__sysfs_attr_get_value: invalid parameters"); -+} -+ -+static void test_sagv_invalid(void **state) -+{ -+ expect_sagv_invalid(); -+ assert_int_equal(sysfs_attr_get_value(NULL, NULL, NULL, 0), -EINVAL); -+ expect_sagv_invalid(); -+ assert_int_equal(sysfs_bin_attr_get_value(NULL, NULL, NULL, 0), -EINVAL); -+ -+ expect_sagv_invalid(); -+ assert_int_equal(sysfs_attr_get_value(NULL, (void *)state, (void *)state, 1), -+ -EINVAL); -+ expect_sagv_invalid(); -+ assert_int_equal(sysfs_bin_attr_get_value(NULL, (void *)state, (void *)state, 1), -+ -EINVAL); -+ -+ expect_sagv_invalid(); -+ assert_int_equal(sysfs_attr_get_value((void *)state, NULL, (void *)state, 1), -+ -EINVAL); -+ expect_sagv_invalid(); -+ assert_int_equal(sysfs_bin_attr_get_value((void *)state, NULL, (void *)state, 1), -+ -EINVAL); -+ -+ expect_sagv_invalid(); -+ assert_int_equal(sysfs_attr_get_value((void *)state, (void *)state, NULL, 1), -+ -EINVAL); -+ expect_sagv_invalid(); -+ assert_int_equal(sysfs_bin_attr_get_value((void *)state, (void *)state, NULL, 1), -+ -EINVAL); -+ -+ expect_sagv_invalid(); -+ assert_int_equal(sysfs_attr_get_value((void *)state, (void *)state, -+ (void *)state, 0), -EINVAL); -+ expect_sagv_invalid(); -+ assert_int_equal(sysfs_bin_attr_get_value((void *)state, (void *)state, -+ (void *)state, 0), -EINVAL); -+} -+ -+static void test_sagv_bad_udev(void **state) -+{ -+ will_return(__wrap_udev_device_get_syspath, NULL); -+ expect_condlog(3, "__sysfs_attr_get_value: invalid udevice"); -+ assert_int_equal(sysfs_attr_get_value((void *)state, (void *)state, -+ (void *)state, 1), -EINVAL); -+ -+ will_return(__wrap_udev_device_get_syspath, NULL); -+ expect_condlog(3, "__sysfs_attr_get_value: invalid udevice"); -+ assert_int_equal(sysfs_bin_attr_get_value((void *)state, (void *)state, -+ (void *)state, 1), -EINVAL); -+} -+ -+static void test_sagv_bad_snprintf(void **state) -+{ -+ char longstr[PATH_MAX + 1]; -+ char buf[1]; -+ -+ memset(longstr, 'a', sizeof(longstr) - 1); -+ longstr[sizeof(longstr) - 1] = '\0'; -+ -+ will_return(__wrap_udev_device_get_syspath, "/foo"); -+ expect_condlog(3, "__sysfs_attr_get_value: devpath overflow"); -+ assert_int_equal(sysfs_attr_get_value((void *)state, longstr, -+ buf, sizeof(buf)), -EOVERFLOW); -+ will_return(__wrap_udev_device_get_syspath, "/foo"); -+ expect_condlog(3, "__sysfs_attr_get_value: devpath overflow"); -+ assert_int_equal(sysfs_bin_attr_get_value((void *)state, longstr, -+ (unsigned char *)buf, sizeof(buf)), -+ -EOVERFLOW); -+} -+ -+static void test_sagv_open_fail(void **state) -+{ -+ char buf[1]; -+ -+ will_return(__wrap_udev_device_get_syspath, "/foo"); -+ expect_condlog(4, "open '/foo/bar'"); -+ expect_string(__wrap_open, pathname, "/foo/bar"); -+ expect_value(__wrap_open, flags, O_RDONLY); -+ errno = ENOENT; -+ will_return(__wrap_open, -1); -+ expect_condlog(3, "__sysfs_attr_get_value: attribute '/foo/bar' can not be opened"); -+ assert_int_equal(sysfs_attr_get_value((void *)state, "bar", -+ buf, sizeof(buf)), -ENOENT); -+} -+ -+static void test_sagv_read_fail(void **state) -+{ -+ char buf[1]; -+ -+ will_return(__wrap_udev_device_get_syspath, "/foo"); -+ expect_condlog(4, "open '/foo/bar'"); -+ expect_string(__wrap_open, pathname, "/foo/bar"); -+ expect_value(__wrap_open, flags, O_RDONLY); -+ will_return(__wrap_open, TEST_FD); -+ expect_value(__wrap_read, fd, TEST_FD); -+ expect_value(__wrap_read, count, sizeof(buf)); -+ errno = EISDIR; -+ will_return(__wrap_read, -1); -+ will_return(__wrap_read, NULL); -+ expect_condlog(3, "__sysfs_attr_get_value: read from /foo/bar failed:"); -+ will_return(__wrap_close, 0); -+ assert_int_equal(sysfs_attr_get_value((void *)state, "bar", -+ buf, sizeof(buf)), -EISDIR); -+ -+ will_return(__wrap_udev_device_get_syspath, "/foo"); -+ expect_condlog(4, "open '/foo/baz'"); -+ expect_string(__wrap_open, pathname, "/foo/baz"); -+ expect_value(__wrap_open, flags, O_RDONLY); -+ will_return(__wrap_open, TEST_FD); -+ expect_value(__wrap_read, fd, TEST_FD); -+ expect_value(__wrap_read, count, sizeof(buf)); -+ errno = EPERM; -+ will_return(__wrap_read, -1); -+ will_return(__wrap_read, NULL); -+ expect_condlog(3, "__sysfs_attr_get_value: read from /foo/baz failed:"); -+ will_return(__wrap_close, 0); -+ assert_int_equal(sysfs_bin_attr_get_value((void *)state, "baz", -+ (unsigned char *)buf, sizeof(buf)), -+ -EPERM); -+ -+} -+ -+static void _test_sagv_read(void **state, unsigned int bufsz) -+{ -+ char buf[16]; -+ char input[] = "01234567"; -+ unsigned int n, trunc; -+ -+ assert_in_range(bufsz, 1, sizeof(buf)); -+ memset(buf, '.', sizeof(buf)); -+ will_return(__wrap_udev_device_get_syspath, "/foo"); -+ expect_condlog(4, "open '/foo/bar'"); -+ expect_string(__wrap_open, pathname, "/foo/bar"); -+ expect_value(__wrap_open, flags, O_RDONLY); -+ will_return(__wrap_open, TEST_FD); -+ expect_value(__wrap_read, fd, TEST_FD); -+ expect_value(__wrap_read, count, bufsz); -+ will_return(__wrap_read, sizeof(input) - 1); -+ will_return(__wrap_read, input); -+ -+ /* If the buffer is too small, input will be truncated by a 0 byte */ -+ if (bufsz <= sizeof(input) - 1) { -+ n = bufsz; -+ trunc = 1; -+ expect_condlog(3, "__sysfs_attr_get_value: overflow reading from /foo/bar"); -+ } else { -+ n = sizeof(input) - 1; -+ trunc = 0; -+ } -+ will_return(__wrap_close, 0); -+ assert_int_equal(sysfs_attr_get_value((void *)state, "bar", -+ buf, bufsz), n); -+ assert_memory_equal(buf, input, n - trunc); -+ assert_int_equal(buf[n - trunc], '\0'); -+ -+ /* Binary input is not truncated */ -+ memset(buf, '.', sizeof(buf)); -+ will_return(__wrap_udev_device_get_syspath, "/foo"); -+ expect_condlog(4, "open '/foo/baz'"); -+ expect_string(__wrap_open, pathname, "/foo/baz"); -+ expect_value(__wrap_open, flags, O_RDONLY); -+ will_return(__wrap_open, TEST_FD); -+ expect_value(__wrap_read, fd, TEST_FD); -+ expect_value(__wrap_read, count, bufsz); -+ will_return(__wrap_read, sizeof(input) - 1); -+ will_return(__wrap_read, input); -+ will_return(__wrap_close, 0); -+ n = bufsz < sizeof(input) - 1 ? bufsz : sizeof(input) - 1; -+ assert_int_equal(sysfs_bin_attr_get_value((void *)state, "baz", -+ (unsigned char *)buf, -+ bufsz), -+ n); -+ assert_memory_equal(buf, input, n); -+} -+ -+static void test_sagv_read_overflow_8(void **state) -+{ -+ _test_sagv_read(state, 8); -+} -+ -+static void test_sagv_read_overflow_4(void **state) -+{ -+ _test_sagv_read(state, 4); -+} -+ -+static void test_sagv_read_overflow_1(void **state) -+{ -+ _test_sagv_read(state, 1); -+} -+ -+static void test_sagv_read_good_9(void **state) -+{ -+ _test_sagv_read(state, 9); -+} -+ -+static void test_sagv_read_good_15(void **state) -+{ -+ _test_sagv_read(state, 15); -+} -+ -+static void _test_sagv_read_zeroes(void **state, unsigned int bufsz) -+{ -+ char buf[16]; -+ char input[] = { '\0','\0','\0','\0','\0','\0','\0','\0' }; -+ unsigned int n; -+ -+ assert_in_range(bufsz, 1, sizeof(buf)); -+ memset(buf, '.', sizeof(buf)); -+ will_return(__wrap_udev_device_get_syspath, "/foo"); -+ expect_condlog(4, "open '/foo/bar'"); -+ expect_string(__wrap_open, pathname, "/foo/bar"); -+ expect_value(__wrap_open, flags, O_RDONLY); -+ will_return(__wrap_open, TEST_FD); -+ expect_value(__wrap_read, fd, TEST_FD); -+ expect_value(__wrap_read, count, bufsz); -+ will_return(__wrap_read, sizeof(input) - 1); -+ will_return(__wrap_read, input); -+ -+ if (bufsz <= sizeof(input) - 1) { -+ n = bufsz; -+ expect_condlog(3, "__sysfs_attr_get_value: overflow reading from /foo/bar"); -+ } else -+ n = 0; -+ -+ will_return(__wrap_close, 0); -+ assert_int_equal(sysfs_attr_get_value((void *)state, "bar", -+ buf, bufsz), n); -+ -+ /* -+ * The return value of sysfs_attr_get_value ignores zero bytes, -+ * but the read data should have been copied to the buffer -+ */ -+ assert_memory_equal(buf, input, n == 0 ? bufsz : n); -+} -+ -+static void test_sagv_read_zeroes_4(void **state) -+{ -+ _test_sagv_read_zeroes(state, 4); -+} -+ -+static void expect_sasv_invalid(void) -+{ -+ expect_condlog(1, "sysfs_attr_set_value: invalid parameters"); -+} -+ -+static void test_sasv_invalid(void **state) -+{ -+ expect_sasv_invalid(); -+ assert_int_equal(sysfs_attr_set_value(NULL, NULL, NULL, 0), -EINVAL); -+ -+ expect_sasv_invalid(); -+ assert_int_equal(sysfs_attr_set_value(NULL, (void *)state, (void *)state, 1), -+ -EINVAL); -+ -+ expect_sasv_invalid(); -+ assert_int_equal(sysfs_attr_set_value((void *)state, NULL, (void *)state, 1), -+ -EINVAL); -+ -+ expect_sasv_invalid(); -+ assert_int_equal(sysfs_attr_set_value((void *)state, (void *)state, NULL, 1), -+ -EINVAL); -+ -+ expect_sasv_invalid(); -+ assert_int_equal(sysfs_attr_set_value((void *)state, (void *)state, -+ (void *)state, 0), -EINVAL); -+} -+ -+static void test_sasv_bad_udev(void **state) -+{ -+ will_return(__wrap_udev_device_get_syspath, NULL); -+ expect_condlog(3, "sysfs_attr_set_value: invalid udevice"); -+ assert_int_equal(sysfs_attr_set_value((void *)state, (void *)state, -+ (void *)state, 1), -EINVAL); -+} -+ -+static void test_sasv_bad_snprintf(void **state) -+{ -+ char longstr[PATH_MAX + 1]; -+ char buf[1]; -+ -+ memset(longstr, 'a', sizeof(longstr) - 1); -+ longstr[sizeof(longstr) - 1] = '\0'; -+ -+ will_return(__wrap_udev_device_get_syspath, "/foo"); -+ expect_condlog(3, "sysfs_attr_set_value: devpath overflow"); -+ assert_int_equal(sysfs_attr_set_value((void *)state, longstr, -+ buf, sizeof(buf)), -EOVERFLOW); -+} -+ -+static void test_sasv_open_fail(void **state) -+{ -+ char buf[1]; -+ -+ will_return(__wrap_udev_device_get_syspath, "/foo"); -+ expect_condlog(4, "open '/foo/bar'"); -+ expect_string(__wrap_open, pathname, "/foo/bar"); -+ expect_value(__wrap_open, flags, O_WRONLY); -+ errno = EPERM; -+ will_return(__wrap_open, -1); -+ expect_condlog(3, "sysfs_attr_set_value: attribute '/foo/bar' can not be opened"); -+ assert_int_equal(sysfs_attr_set_value((void *)state, "bar", -+ buf, sizeof(buf)), -EPERM); -+} -+ -+static void test_sasv_write_fail(void **state) -+{ -+ char buf[1]; -+ -+ will_return(__wrap_udev_device_get_syspath, "/foo"); -+ expect_condlog(4, "open '/foo/bar'"); -+ expect_string(__wrap_open, pathname, "/foo/bar"); -+ expect_value(__wrap_open, flags, O_WRONLY); -+ will_return(__wrap_open, TEST_FD); -+ expect_value(__wrap_write, fd, TEST_FD); -+ expect_value(__wrap_write, count, sizeof(buf)); -+ errno = EISDIR; -+ will_return(__wrap_write, -1); -+ expect_condlog(3, "sysfs_attr_set_value: write to /foo/bar failed:"); -+ will_return(__wrap_close, 0); -+ assert_int_equal(sysfs_attr_set_value((void *)state, "bar", -+ buf, sizeof(buf)), -EISDIR); -+ -+} -+ -+static void _test_sasv_write(void **state, unsigned int n_written) -+{ -+ char buf[8]; -+ -+ assert_in_range(n_written, 0, sizeof(buf)); -+ will_return(__wrap_udev_device_get_syspath, "/foo"); -+ expect_condlog(4, "open '/foo/bar'"); -+ expect_string(__wrap_open, pathname, "/foo/bar"); -+ expect_value(__wrap_open, flags, O_WRONLY); -+ will_return(__wrap_open, TEST_FD); -+ expect_value(__wrap_write, fd, TEST_FD); -+ expect_value(__wrap_write, count, sizeof(buf)); -+ will_return(__wrap_write, n_written); -+ -+ if (n_written < sizeof(buf)) -+ expect_condlog(3, "sysfs_attr_set_value: underflow writing"); -+ will_return(__wrap_close, 0); -+ assert_int_equal(sysfs_attr_set_value((void *)state, "bar", -+ buf, sizeof(buf)), -+ n_written); -+} -+ -+static void test_sasv_write_0(void **state) -+{ -+ _test_sasv_write(state, 0); -+} -+ -+static void test_sasv_write_4(void **state) -+{ -+ _test_sasv_write(state, 4); -+} -+ -+static void test_sasv_write_7(void **state) -+{ -+ _test_sasv_write(state, 7); -+} -+ -+static void test_sasv_write_8(void **state) -+{ -+ _test_sasv_write(state, 8); -+} -+ -+static int test_sysfs(void) -+{ -+ const struct CMUnitTest tests[] = { -+ cmocka_unit_test(test_sagv_invalid), -+ cmocka_unit_test(test_sagv_bad_udev), -+ cmocka_unit_test(test_sagv_bad_snprintf), -+ cmocka_unit_test(test_sagv_open_fail), -+ cmocka_unit_test(test_sagv_read_fail), -+ cmocka_unit_test(test_sagv_read_overflow_1), -+ cmocka_unit_test(test_sagv_read_overflow_4), -+ cmocka_unit_test(test_sagv_read_overflow_8), -+ cmocka_unit_test(test_sagv_read_good_9), -+ cmocka_unit_test(test_sagv_read_good_15), -+ cmocka_unit_test(test_sagv_read_zeroes_4), -+ cmocka_unit_test(test_sasv_invalid), -+ cmocka_unit_test(test_sasv_bad_udev), -+ cmocka_unit_test(test_sasv_bad_snprintf), -+ cmocka_unit_test(test_sasv_open_fail), -+ cmocka_unit_test(test_sasv_write_fail), -+ cmocka_unit_test(test_sasv_write_0), -+ cmocka_unit_test(test_sasv_write_4), -+ cmocka_unit_test(test_sasv_write_7), -+ cmocka_unit_test(test_sasv_write_8), -+ }; -+ -+ return cmocka_run_group_tests(tests, setup, teardown); -+} -+ -+int main(void) -+{ -+ int ret = 0; -+ -+ init_test_verbosity(4); -+ ret += test_sysfs(); -+ return ret; -+} 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 new file mode 100644 index 0000000..d45f99f --- /dev/null +++ b/0021-multipath-tools-quiet-build-support-for-top-level-Ma.patch @@ -0,0 +1,183 @@ +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 new file mode 100644 index 0000000..33b7dcd --- /dev/null +++ b/0022-GitHub-workflows-use-make-j8-Orecurse.patch @@ -0,0 +1,132 @@ +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/0022-libmultipath.version-bump-version-for-sysfs-accessor.patch b/0022-libmultipath.version-bump-version-for-sysfs-accessor.patch deleted file mode 100644 index fdbb113..0000000 --- a/0022-libmultipath.version-bump-version-for-sysfs-accessor.patch +++ /dev/null @@ -1,43 +0,0 @@ -From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 -From: Martin Wilck -Date: Wed, 6 Jul 2022 12:45:33 +0200 -Subject: [PATCH] libmultipath.version: bump version for sysfs accessors - -Formally, the ABI is still the same, but the semantics of the -return value have changed. - -Signed-off-by: Martin Wilck - -Reviewed-by: Benjamin Marzinski -Signed-off-by: Benjamin Marzinski ---- - libmultipath/libmultipath.version | 8 ++++++-- - 1 file changed, 6 insertions(+), 2 deletions(-) - -diff --git a/libmultipath/libmultipath.version b/libmultipath/libmultipath.version -index b3690ac0..c1d9b156 100644 ---- a/libmultipath/libmultipath.version -+++ b/libmultipath/libmultipath.version -@@ -207,7 +207,6 @@ global: - strchop; - strlcpy; - sync_map_state; -- sysfs_attr_set_value; - sysfs_get_size; - sysfs_is_multipathed; - timespeccmp; -@@ -264,8 +263,13 @@ global: - - /* foreign */ - free_scandir_result; -- sysfs_attr_get_value; - - local: - *; - }; -+ -+LIBMULTIPATH_16.0.0 { -+global: -+ sysfs_attr_set_value; -+ sysfs_attr_get_value; -+}; diff --git a/0023-README.md-Move-section-about-libedit-and-libreadline.patch b/0023-README.md-Move-section-about-libedit-and-libreadline.patch new file mode 100644 index 0000000..b860971 --- /dev/null +++ b/0023-README.md-Move-section-about-libedit-and-libreadline.patch @@ -0,0 +1,48 @@ +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/0023-libmultipath-unset-detect_checker-for-clariion-Unity.patch b/0023-libmultipath-unset-detect_checker-for-clariion-Unity.patch deleted file mode 100644 index b69f395..0000000 --- a/0023-libmultipath-unset-detect_checker-for-clariion-Unity.patch +++ /dev/null @@ -1,31 +0,0 @@ -From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 -From: Benjamin Marzinski -Date: Tue, 7 Jun 2022 17:45:01 -0500 -Subject: [PATCH] libmultipath: unset detect_checker for clariion / Unity - arrays - -Dell EMC would like to always use the emc_clariion checker. Currently -detect_checker will switch the checker to TUR for Unity arrays. -This can cause problems on some setups with replicated Unity LUNs, -which are handled correctly the the emc_checker, but not the TUR -checker. - -Cc: vincent.chen1@dell.com -Signed-off-by: Benjamin Marzinski -Reviewed-by: Martin Wilck ---- - libmultipath/hwtable.c | 1 + - 1 file changed, 1 insertion(+) - -diff --git a/libmultipath/hwtable.c b/libmultipath/hwtable.c -index c88fa09a..2085aba5 100644 ---- a/libmultipath/hwtable.c -+++ b/libmultipath/hwtable.c -@@ -350,6 +350,7 @@ static struct hwentry default_hw[] = { - .no_path_retry = (300 / DEFAULT_CHECKINT), - .checker_name = EMC_CLARIION, - .prio_name = PRIO_EMC, -+ .detect_checker = DETECT_CHECKER_OFF, - }, - { - /* Invista / VPLEX */ diff --git a/0024-README.md-Fix-indentation-in-paragraph-about-device-.patch b/0024-README.md-Fix-indentation-in-paragraph-about-device-.patch new file mode 100644 index 0000000..63b6c2f --- /dev/null +++ b/0024-README.md-Fix-indentation-in-paragraph-about-device-.patch @@ -0,0 +1,34 @@ +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/0024-libmultipath-spelling-cplusplus.patch b/0024-libmultipath-spelling-cplusplus.patch deleted file mode 100644 index bf21a11..0000000 --- a/0024-libmultipath-spelling-cplusplus.patch +++ /dev/null @@ -1,26 +0,0 @@ -From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 -From: Josh Soref <2119212+jsoref@users.noreply.github.com> -Date: Sun, 31 Jul 2022 13:11:15 -0400 -Subject: [PATCH] libmultipath: spelling: cplusplus - -Signed-off-by: Josh Soref <2119212+jsoref@users.noreply.github.com> -Reviewed-by: Xose Vazquez Perez -Reviewed-by: Martin Wilck -Signed-off-by: Benjamin Marzinski ---- - libmpathvalid/mpath_valid.h | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/libmpathvalid/mpath_valid.h b/libmpathvalid/mpath_valid.h -index ed06196e..ec2f9392 100644 ---- a/libmpathvalid/mpath_valid.h -+++ b/libmpathvalid/mpath_valid.h -@@ -20,7 +20,7 @@ - #ifndef LIB_MPATH_VALID_H - #define LIB_MPATH_VALID_H - --#ifdef __cpluscplus -+#ifdef __cplusplus - extern "C" { - #endif - diff --git a/0025-README.md-document-options-for-paths-and-optimizatio.patch b/0025-README.md-document-options-for-paths-and-optimizatio.patch new file mode 100644 index 0000000..ca00d85 --- /dev/null +++ b/0025-README.md-document-options-for-paths-and-optimizatio.patch @@ -0,0 +1,47 @@ +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/0025-libmultipath-spelling-ascii.patch b/0025-libmultipath-spelling-ascii.patch deleted file mode 100644 index 01e22e4..0000000 --- a/0025-libmultipath-spelling-ascii.patch +++ /dev/null @@ -1,25 +0,0 @@ -From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 -From: Josh Soref <2119212+jsoref@users.noreply.github.com> -Date: Sun, 31 Jul 2022 13:11:12 -0400 -Subject: [PATCH] libmultipath: spelling: ascii - -Signed-off-by: Josh Soref <2119212+jsoref@users.noreply.github.com> -Reviewed-by: Martin Wilck -Signed-off-by: Benjamin Marzinski ---- - libmultipath/prioritizers/alua_spc3.h | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/libmultipath/prioritizers/alua_spc3.h b/libmultipath/prioritizers/alua_spc3.h -index 08e992bd..e1a6c071 100644 ---- a/libmultipath/prioritizers/alua_spc3.h -+++ b/libmultipath/prioritizers/alua_spc3.h -@@ -143,7 +143,7 @@ inquiry_data_get_tpgs(struct inquiry_data *id) - *----------------------------------------------------------------------------- - */ - #define CODESET_BINARY 0x1 --#define CODESET_ACSII 0x2 -+#define CODESET_ASCII 0x2 - #define CODESET_UTF8 0x3 - - #define ASSOCIATION_UNIT 0x0 diff --git a/0026-README.md-document-how-to-customize-build.patch b/0026-README.md-document-how-to-customize-build.patch new file mode 100644 index 0000000..c3dfedb --- /dev/null +++ b/0026-README.md-document-how-to-customize-build.patch @@ -0,0 +1,37 @@ +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/0026-libmultipath-spelling-progress.patch b/0026-libmultipath-spelling-progress.patch deleted file mode 100644 index 2984f31..0000000 --- a/0026-libmultipath-spelling-progress.patch +++ /dev/null @@ -1,25 +0,0 @@ -From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 -From: Josh Soref <2119212+jsoref@users.noreply.github.com> -Date: Sun, 31 Jul 2022 13:11:22 -0400 -Subject: [PATCH] libmultipath: spelling: progress - -Signed-off-by: Josh Soref <2119212+jsoref@users.noreply.github.com> -Reviewed-by: Martin Wilck -Signed-off-by: Benjamin Marzinski ---- - libmultipath/nvme/linux/nvme.h | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/libmultipath/nvme/linux/nvme.h b/libmultipath/nvme/linux/nvme.h -index a6975549..9fc2ae7f 100644 ---- a/libmultipath/nvme/linux/nvme.h -+++ b/libmultipath/nvme/linux/nvme.h -@@ -1035,7 +1035,7 @@ enum { - NVME_SANITIZE_LOG_STATUS_MASK = 0x0007, - NVME_SANITIZE_LOG_NEVER_SANITIZED = 0x0000, - NVME_SANITIZE_LOG_COMPLETED_SUCCESS = 0x0001, -- NVME_SANITIZE_LOG_IN_PROGESS = 0x0002, -+ NVME_SANITIZE_LOG_IN_PROGRESS = 0x0002, - NVME_SANITIZE_LOG_COMPLETED_FAILED = 0x0003, - NVME_SANITIZE_LOG_ND_COMPLETED_SUCCESS = 0x0004, - }; 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 new file mode 100644 index 0000000..1ae51d8 --- /dev/null +++ b/0027-libmultipath-avoid-Warray-bounds-error-with-gcc-12-a.patch @@ -0,0 +1,63 @@ +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/0027-multipath-tools-spelling-fixes.patch b/0027-multipath-tools-spelling-fixes.patch deleted file mode 100644 index c1e9468..0000000 --- a/0027-multipath-tools-spelling-fixes.patch +++ /dev/null @@ -1,599 +0,0 @@ -From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 -From: Josh Soref <2119212+jsoref@users.noreply.github.com> -Date: Sun, 31 Jul 2022 13:17:53 -0400 -Subject: [PATCH] multipath-tools: spelling fixes - -Spelling errors detected by the GitHub check-spelling action: -https://github.com/marketplace/actions/check-spelling - -Signed-off-by: Josh Soref <2119212+jsoref@users.noreply.github.com> -Reviewed-by: Martin Wilck -Signed-off-by: Benjamin Marzinski ---- - .github/workflows/foreign.yaml | 2 +- - kpartx/crc32.c | 2 +- - kpartx/gpt.c | 2 +- - libdmmp/libdmmp_path.c | 2 +- - libmpathcmd/mpath_cmd.h | 2 +- - libmpathpersist/mpath_persist_int.c | 2 +- - libmpathvalid/mpath_valid.h | 4 ++-- - libmultipath/checkers/directio.c | 2 +- - libmultipath/config.h | 2 +- - libmultipath/configure.c | 2 +- - libmultipath/discovery.c | 2 +- - libmultipath/nvme/nvme.h | 2 +- - libmultipath/prioritizers/datacore.c | 4 ++-- - libmultipath/prioritizers/hds.c | 2 +- - libmultipath/prioritizers/path_latency.c | 4 ++-- - libmultipath/strbuf.h | 4 ++-- - libmultipath/structs_vec.c | 2 +- - libmultipath/uevent.c | 2 +- - libmultipath/valid.h | 2 +- - mpathpersist/main.c | 2 +- - multipath/multipath.conf.5 | 14 +++++++------- - multipathd/main.c | 10 +++++----- - tests/directio.c | 2 +- - tests/hwtable.c | 10 +++++----- - tests/mpathvalid.c | 2 +- - tests/pgpolicy.c | 2 +- - tests/valid.c | 4 ++-- - third-party/valgrind/valgrind.h | 8 ++++---- - 28 files changed, 50 insertions(+), 50 deletions(-) - -diff --git a/.github/workflows/foreign.yaml b/.github/workflows/foreign.yaml -index e9ffd3d8..32915186 100644 ---- a/.github/workflows/foreign.yaml -+++ b/.github/workflows/foreign.yaml -@@ -56,7 +56,7 @@ jobs: - - name: enable foreign arch - run: sudo docker run --rm --privileged multiarch/qemu-user-static:register --reset - - name: run tests -- # Github actions doesn't support referencing docker images with -+ # GitHub actions doesn't support referencing docker images with - # context variables. Workaround: use mosteo-actions/docker-run action - # See https://github.community/t/expressions-in-docker-uri/16271 - uses: mosteo-actions/docker-run@v1 -diff --git a/kpartx/crc32.c b/kpartx/crc32.c -index e688f8e9..df6c6878 100644 ---- a/kpartx/crc32.c -+++ b/kpartx/crc32.c -@@ -290,7 +290,7 @@ uint32_t attribute((pure)) crc32_be(uint32_t crc, unsigned char const *p, size_t - * the end, so we have to add 32 extra cycles shifting in zeros at the - * end of every message, - * -- * So the standard trick is to rearrage merging in the next_input_bit() -+ * So the standard trick is to rearrange merging in the next_input_bit() - * until the moment it's needed. Then the first 32 cycles can be precomputed, - * and merging in the final 32 zero bits to make room for the CRC can be - * skipped entirely. -diff --git a/kpartx/gpt.c b/kpartx/gpt.c -index 34a910cf..47d8743e 100644 ---- a/kpartx/gpt.c -+++ b/kpartx/gpt.c -@@ -357,7 +357,7 @@ is_gpt_valid(int fd, uint64_t lba, - __le32_to_cpu((*gpt)->num_partition_entries) * - __le32_to_cpu((*gpt)->sizeof_partition_entry)); - if (crc != __le32_to_cpu((*gpt)->partition_entry_array_crc32)) { -- // printf("GUID Partitition Entry Array CRC check failed.\n"); -+ // printf("GUID Partition Entry Array CRC check failed.\n"); - free(*gpt); - *gpt = NULL; - free(*ptes); -diff --git a/libdmmp/libdmmp_path.c b/libdmmp/libdmmp_path.c -index 47a2162c..21714b15 100644 ---- a/libdmmp/libdmmp_path.c -+++ b/libdmmp/libdmmp_path.c -@@ -28,7 +28,7 @@ - #include "libdmmp_private.h" - - #define _DMMP_SHOW_PS_INDEX_BLK_NAME 0 --#define _DMMP_SHOW_PS_INDEX_SATAUS 1 -+#define _DMMP_SHOW_PS_INDEX_STATUS 1 - #define _DMMP_SHOW_PS_INDEX_WWID 2 - #define _DMMP_SHOW_PS_INDEX_PGID 3 - -diff --git a/libmpathcmd/mpath_cmd.h b/libmpathcmd/mpath_cmd.h -index 30838b02..0c293c71 100644 ---- a/libmpathcmd/mpath_cmd.h -+++ b/libmpathcmd/mpath_cmd.h -@@ -65,7 +65,7 @@ int mpath_connect(void); - /* - * DESCRIPTION: - * Disconnect from the multipathd daemon. This function must be -- * run after after processing all the multipath commands. -+ * run after processing all the multipath commands. - * - * RETURNS: - * 0 on success. -1 on failure (with errno set). -diff --git a/libmpathpersist/mpath_persist_int.c b/libmpathpersist/mpath_persist_int.c -index e34fc32d..6924b379 100644 ---- a/libmpathpersist/mpath_persist_int.c -+++ b/libmpathpersist/mpath_persist_int.c -@@ -601,7 +601,7 @@ static int mpath_prout_rel(struct multipath *mpp,int rq_servact, int rq_scope, - if (get_be64(mpp->reservation_key) && - memcmp(pr_buff->prin_descriptor.prin_readfd.descriptors[i]->key, - &mpp->reservation_key, 8)){ -- /*register with tarnsport id*/ -+ /*register with transport id*/ - memset(pamp, 0, length); - pamp->trnptid_list[0] = pptr; - memset (pamp->trnptid_list[0], 0, sizeof (struct transportid)); -diff --git a/libmpathvalid/mpath_valid.h b/libmpathvalid/mpath_valid.h -index ec2f9392..3e34b1fd 100644 ---- a/libmpathvalid/mpath_valid.h -+++ b/libmpathvalid/mpath_valid.h -@@ -112,7 +112,7 @@ int mpathvalid_exit(void); - * RETURNS: - * MPATH_STRICT, MPATH_SMART, MPATH_GREEDY, or MPATH_MODE_ERROR - * -- * MPATH_STRICT = find_multiapths (yes|on|no|off) -+ * MPATH_STRICT = find_multipaths (yes|on|no|off) - * MPATH_SMART = find_multipaths smart - * MPATH_GREEDY = find_multipaths greedy - * MPATH_MODE_ERROR = multipath configuration not initialized -@@ -126,7 +126,7 @@ unsigned int mpathvalid_get_mode(void); - * potentially claimed (MPATH_IS_VALID, MPATH_IS_VALID_NO_CHECK, - * or MPATH_IS_MAYBE_VALID) and wwid is not NULL, then *wiid will - * be set to point to the wwid of device. If set, *wwid must be -- * freed by the caller. path_wwids is an obptional parameter that -+ * freed by the caller. path_wwids is an optional parameter that - * points to an array of wwids, that were returned from previous - * calls to mpathvalid_is_path(). These are wwids of existing - * devices that are or potentially are claimed by device-mapper -diff --git a/libmultipath/checkers/directio.c b/libmultipath/checkers/directio.c -index bc7b7be5..a326e37b 100644 ---- a/libmultipath/checkers/directio.c -+++ b/libmultipath/checkers/directio.c -@@ -124,7 +124,7 @@ remove_aio_group(struct aio_group *aio_grp) - - /* If an aio_group is completely full of orphans, then no checkers can - * use it, which means that no checkers can clear out the orphans. To -- * avoid keeping the useless group around, simply remove remove the -+ * avoid keeping the useless group around, simply remove the - * group */ - static void - check_orphaned_group(struct aio_group *aio_grp) -diff --git a/libmultipath/config.h b/libmultipath/config.h -index 36d40157..fdcdff0a 100644 ---- a/libmultipath/config.h -+++ b/libmultipath/config.h -@@ -248,7 +248,7 @@ struct config { - * libmultipath calls. If an application wants to keep using the - * udev variable after calling libmultipath_exit(), it should have taken - * an additional reference on it beforehand. This is the case e.g. -- * after initiazing udev with udev_new(). -+ * after initializing udev with udev_new(). - */ - extern struct udev *udev; - -diff --git a/libmultipath/configure.c b/libmultipath/configure.c -index 4427f910..8af7cd79 100644 ---- a/libmultipath/configure.c -+++ b/libmultipath/configure.c -@@ -397,7 +397,7 @@ int setup_map(struct multipath *mpp, char **params, struct vectors *vecs) - * into a mp->params strings to feed the device-mapper - */ - if (assemble_map(mpp, params)) { -- condlog(0, "%s: problem assembing map", mpp->alias); -+ condlog(0, "%s: problem assembling map", mpp->alias); - return 1; - } - return 0; -diff --git a/libmultipath/discovery.c b/libmultipath/discovery.c -index ee290093..15560f8c 100644 ---- a/libmultipath/discovery.c -+++ b/libmultipath/discovery.c -@@ -1344,7 +1344,7 @@ parse_vpd_c0_hp3par(const unsigned char *in, size_t in_len, - condlog(3, "HP/3PAR vendor specific VPD page length too short: %zu", in_len); - return -EINVAL; - } -- if (in[4] <= 3) /* revision must be > 3 to have Vomlume Name */ -+ if (in[4] <= 3) /* revision must be > 3 to have Volume Name */ - return -ENODATA; - len = get_unaligned_be32(&in[40]); - if (len > out_len || len + 44 > in_len) { -diff --git a/libmultipath/nvme/nvme.h b/libmultipath/nvme/nvme.h -index 7e0278b5..57f82a31 100644 ---- a/libmultipath/nvme/nvme.h -+++ b/libmultipath/nvme/nvme.h -@@ -224,7 +224,7 @@ char *nvme_char_from_block(char *block); - * Notes: This function does not care about transport so that the offset is - * not going to be checked inside of this function for the unsupported fields - * in a specific transport. For example, BPMBL(Boot Partition Memory Buffer -- * Location) register is not supported by fabrics, but it can be chcked here. -+ * Location) register is not supported by fabrics, but it can be checked here. - */ - static inline bool is_64bit_reg(__u32 offset) - { -diff --git a/libmultipath/prioritizers/datacore.c b/libmultipath/prioritizers/datacore.c -index 02dc2e27..d1d473d4 100644 ---- a/libmultipath/prioritizers/datacore.c -+++ b/libmultipath/prioritizers/datacore.c -@@ -1,6 +1,6 @@ - /* - * (C) 2010 Christophe Varoqui -- * (C) 2009 Dembach Goo Infromatik GmbH & Co KG -+ * (C) 2009 Dembach Goo Informatik GmbH & Co KG - * Manon Goo - * - * datacore.c -@@ -10,7 +10,7 @@ - * Matthias Rudolph - * - * This work is made available on the basis of the -- * GPLv2 for detials see . -+ * GPLv2 for details see . - * - * Manon Goo 2009 - * -diff --git a/libmultipath/prioritizers/hds.c b/libmultipath/prioritizers/hds.c -index 88cac5f0..d569f2d7 100644 ---- a/libmultipath/prioritizers/hds.c -+++ b/libmultipath/prioritizers/hds.c -@@ -32,7 +32,7 @@ - * Half of the LUNs are accessed via one HBA/storage controller and the other - * half via the other HBA/storage controller. - * -- * In cluster environmemnts (RAC) it also guarantees that all cluster nodes have -+ * In cluster environments (RAC) it also guarantees that all cluster nodes have - * access to the LDEVs via the same controller. - * - * You can run the prioritizer manually in verbose mode: -diff --git a/libmultipath/prioritizers/path_latency.c b/libmultipath/prioritizers/path_latency.c -index e155f6dc..2f5be9b9 100644 ---- a/libmultipath/prioritizers/path_latency.c -+++ b/libmultipath/prioritizers/path_latency.c -@@ -64,7 +64,7 @@ static int prepare_directio_read(int fd, int *blksz, char **pbuf, - long flags; - - if (ioctl(fd, BLKBSZGET, blksz) < 0) { -- pp_pl_log(3,"catnnot get blocksize, set default"); -+ pp_pl_log(3,"cannot get blocksize, set default"); - *blksz = DEF_BLK_SIZE; - } - if (posix_memalign((void **)pbuf, pgsize, *blksz)) -@@ -193,7 +193,7 @@ out: - } - - /* -- * Do not scale the prioriy in a certain range such as [0, 1024] -+ * Do not scale the priority in a certain range such as [0, 1024] - * because scaling will eliminate the effect of base_num. - */ - int calcPrio(double lg_avglatency, double lg_maxavglatency, -diff --git a/libmultipath/strbuf.h b/libmultipath/strbuf.h -index 41d7d54f..31ab519a 100644 ---- a/libmultipath/strbuf.h -+++ b/libmultipath/strbuf.h -@@ -159,7 +159,7 @@ int fill_strbuf(struct strbuf *buf, char c, int slen); - * - * Appends the given string to @strbuf, with leading and trailing double - * quotes (") added, expanding @strbuf's size as necessary. Any double quote -- * characters (") in the string are transformed to double double quotes (""). -+ * characters (") in the string are transformed to a pair of double quotes (""). - * If the function returns an error, @strbuf is unchanged. - */ - int append_strbuf_quoted(struct strbuf *buf, const char *str); -@@ -171,7 +171,7 @@ int append_strbuf_quoted(struct strbuf *buf, const char *str); - * @returns: number of appended characters if successful, (excluding - * terminating '\0'); negative error code otherwise - * -- * Appends the the arguments following @fmt, formatted as in printf(), to -+ * Appends the arguments following @fmt, formatted as in printf(), to - * @strbuf, expanding @strbuf's size as necessary. The function makes sure that - * the output @strbuf is always 0-terminated. - * If the function returns an error, @strbuf is unchanged. -diff --git a/libmultipath/structs_vec.c b/libmultipath/structs_vec.c -index a69f0643..645896c6 100644 ---- a/libmultipath/structs_vec.c -+++ b/libmultipath/structs_vec.c -@@ -205,7 +205,7 @@ static bool update_pathvec_from_dm(vector pathvec, struct multipath *mpp, - continue; - - /* -- * At this point, pp->udev is valid and and pp->wwid -+ * At this point, pp->udev is valid and pp->wwid - * is the best we could get - */ - if (*pp->wwid && strcmp(mpp->wwid, pp->wwid)) { -diff --git a/libmultipath/uevent.c b/libmultipath/uevent.c -index 5793af94..57447ca0 100644 ---- a/libmultipath/uevent.c -+++ b/libmultipath/uevent.c -@@ -373,7 +373,7 @@ uevent_filter(struct uevent *later, struct uevent_filter_state *st) - - list_for_some_entry_reverse_safe(earlier, tmp, &later->node, &st->uevq, node) { - /* -- * filter unnessary earlier uevents -+ * filter unnecessary earlier uevents - * by the later uevent - */ - if (!list_empty(&earlier->merge_node)) { -diff --git a/libmultipath/valid.h b/libmultipath/valid.h -index ce1c7cbf..731e6eff 100644 ---- a/libmultipath/valid.h -+++ b/libmultipath/valid.h -@@ -23,7 +23,7 @@ - * already. - * PATH_IS_VALID is returned by is_path_valid, when the path is - * valid only if it hasn't been released to systemd already. -- * PATH_IS_MAYBE_VALID is returned when the the path would be valid -+ * PATH_IS_MAYBE_VALID is returned when the path would be valid - * if other paths with the same wwid existed. It is up to the caller - * to check for these other paths. - */ -diff --git a/mpathpersist/main.c b/mpathpersist/main.c -index 4bdd55c2..894e8c94 100644 ---- a/mpathpersist/main.c -+++ b/mpathpersist/main.c -@@ -480,7 +480,7 @@ static int handle_args(int argc, char * argv[], int nline) - } - if ((verbose > 2) && num_transportids) - { -- fprintf (stderr, "number of tranport-ids decoded from " -+ fprintf (stderr, "number of transport-ids decoded from " - "command line : %d\n", num_transportids); - } - -diff --git a/multipath/multipath.conf.5 b/multipath/multipath.conf.5 -index c2d34f18..853e0feb 100644 ---- a/multipath/multipath.conf.5 -+++ b/multipath/multipath.conf.5 -@@ -455,7 +455,7 @@ precedence. See KNOWN ISSUES. - (Since kernel 2.6.38) Number of msecs before pg_init retry, it must be between 0 and 60000. - .TP - .I queue_mode --(Since kernel 4.8) Select the the queueing mode per multipath device. -+(Since kernel 4.8) Select the queueing mode per multipath device. - can be \fIbio\fR, \fIrq\fR or \fImq\fR, which corresponds to - bio-based, request-based, and block-multiqueue (blk-mq) request-based, - respectively. -@@ -935,7 +935,7 @@ This option is not supported any more. The value is ignored. - .B san_path_err_threshold - If set to a value greater than 0, multipathd will watch paths and check how many - times a path has been failed due to errors.If the number of failures on a particular --path is greater then the san_path_err_threshold, then the path will not reinstate -+path is greater than the san_path_err_threshold, then the path will not reinstate - till san_path_err_recovery_time. These path failures should occur within a - san_path_err_forget_rate checks, if not we will consider the path is good enough - to reinstantate. See "Shaky paths detection" below. -@@ -949,7 +949,7 @@ The default is: \fBno\fR - .B san_path_err_forget_rate - If set to a value greater than 0, multipathd will check whether the path failures - has exceeded the san_path_err_threshold within this many checks i.e --san_path_err_forget_rate . If so we will not reinstante the path till -+san_path_err_forget_rate . If so we will not reinstate the path till - san_path_err_recovery_time. See "Shaky paths detection" below. - .RS - .TP -@@ -962,7 +962,7 @@ The default is: \fBno\fR - If set to a value greater than 0, multipathd will make sure that when path failures - has exceeded the san_path_err_threshold within san_path_err_forget_rate then the path - will be placed in failed state for san_path_err_recovery_time duration.Once san_path_err_recovery_time --has timeout we will reinstante the failed path . -+has timeout we will reinstate the failed path . - san_path_err_recovery_time value should be in secs. - See "Shaky paths detection" below. - .RS -@@ -1000,7 +1000,7 @@ If the rate of IO error on a particular path is greater than the - \fImarginal_path_err_rate_threshold\fR, then the path will not reinstate for - \fImarginal_path_err_recheck_gap_time\fR seconds unless there is only one - active path. After \fImarginal_path_err_recheck_gap_time\fR expires, the path --will be requeueed for rechecking. If checking result is good enough, the -+will be requeued for rechecking. If checking result is good enough, the - path will be reinstated. See "Shaky paths detection" below. - .RS - .TP -@@ -1031,7 +1031,7 @@ value, the failed path of which the IO error rate is larger than - \fImarginal_path_err_rate_threshold\fR will be kept in failed state for - \fImarginal_path_err_recheck_gap_time\fR seconds. When - \fImarginal_path_err_recheck_gap_time\fR seconds expires, the path will be --requeueed for checking. If checking result is good enough, the path will be -+requeued for checking. If checking result is good enough, the path will be - reinstated, or else it will keep failed. See "Shaky paths detection" below. - .RS - .TP -@@ -1379,7 +1379,7 @@ The protocol that a path is using can be viewed by running - \fBmultipathd show paths format "%d %P"\fR - .RE - .LP --For every device, these 5 blacklist criteria are evaluated in the the order -+For every device, these 5 blacklist criteria are evaluated in the order - "property, dev\%node, device, protocol, wwid". If a device turns out to be - blacklisted by any criterion, it's excluded from handling by multipathd, and - the later criteria aren't evaluated any more. For each -diff --git a/multipathd/main.c b/multipathd/main.c -index a160c824..defee10a 100644 ---- a/multipathd/main.c -+++ b/multipathd/main.c -@@ -583,7 +583,7 @@ retry: - if (mpp->prflag) { - vector_foreach_slot(mpp->paths, pp, i) { - if ((pp->state == PATH_UP) || (pp->state == PATH_GHOST)) { -- /* persistent reseravtion check*/ -+ /* persistent reservation check*/ - mpath_pr_event_handle(pp); - } - } -@@ -1515,7 +1515,7 @@ uev_update_path (struct uevent *uev, struct vectors * vecs) - condlog(3, "%s: error in change_foreign", __func__); - break; - default: -- condlog(1, "%s: return code %d of change_forein is unsupported", -+ condlog(1, "%s: return code %d of change_foreign is unsupported", - __func__, rc); - break; - } -@@ -1966,7 +1966,7 @@ ghost_delay_tick(struct vectors *vecs) - } - - static void --defered_failback_tick (vector mpvec) -+deferred_failback_tick (vector mpvec) - { - struct multipath * mpp; - unsigned int i; -@@ -2186,7 +2186,7 @@ static int check_path_reinstate_state(struct path * pp) { - get_monotonic_time(&curr_time); - /* when path failures has exceeded the san_path_err_threshold - * place the path in delayed state till san_path_err_recovery_time -- * so that the cutomer can rectify the issue within this time. After -+ * so that the customer can rectify the issue within this time. After - * the completion of san_path_err_recovery_time it should - * automatically reinstate the path - * (note: we know that san_path_err_threshold > 0 here). -@@ -2647,7 +2647,7 @@ checkerloop (void *ap) - pthread_cleanup_push(cleanup_lock, &vecs->lock); - lock(&vecs->lock); - pthread_testcancel(); -- defered_failback_tick(vecs->mpvec); -+ deferred_failback_tick(vecs->mpvec); - retry_count_tick(vecs->mpvec); - missing_uev_wait_tick(vecs); - ghost_delay_tick(vecs); -diff --git a/tests/directio.c b/tests/directio.c -index 20ccc47a..01fdef28 100644 ---- a/tests/directio.c -+++ b/tests/directio.c -@@ -497,7 +497,7 @@ static void test_free_with_pending(void **state) - do_libcheck_reset(1); - } - --/* test removing orpahed aio_group on free */ -+/* test removing orphaned aio_group on free */ - static void test_orphaned_aio_group(void **state) - { - struct checker c[AIO_GROUP_SIZE] = {{.cls = NULL}}; -diff --git a/tests/hwtable.c b/tests/hwtable.c -index bfaf613f..334b75e8 100644 ---- a/tests/hwtable.c -+++ b/tests/hwtable.c -@@ -29,7 +29,7 @@ - - #define N_CONF_FILES 2 - --static const char tmplate[] = "/tmp/hwtable-XXXXXX"; -+static const char template[] = "/tmp/hwtable-XXXXXX"; - - struct key_value { - const char *key; -@@ -136,7 +136,7 @@ static int setup(void **state) - if (hwt == NULL) - return -1; - -- snprintf(buf, sizeof(buf), "%s", tmplate); -+ snprintf(buf, sizeof(buf), "%s", template); - if (mkdtemp(buf) == NULL) { - condlog(0, "mkdtemp: %s", strerror(errno)); - goto err; -@@ -255,7 +255,7 @@ static void write_defaults(const struct hwt_state *hwt) - { "detect_prio", "no" }, - { "detect_checker", "no" }, - }; -- char buf[sizeof(tmplate) + sizeof(bindings_name)]; -+ char buf[sizeof(template) + sizeof(bindings_name)]; - char dirbuf[PATH_MAX]; - - snprintf(buf, sizeof(buf), "%s/%s", hwt->tmpname, bindings_name); -@@ -308,7 +308,7 @@ static void write_device(FILE *ff, int nkv, const struct key_value *kv) - } - - /* -- * Some macros to avoid boilerplace code -+ * Some macros to avoid boilerplate code - */ - - #define CHECK_STATE(state) ({ \ -@@ -448,7 +448,7 @@ static const struct key_value npr_queue = { _no_path_retry, "queue" }; - /***** BEGIN TESTS SECTION *****/ - - /* -- * Dump the configuration, subistitute the dumped configuration -+ * Dump the configuration, substitute the dumped configuration - * for the current one, and verify that the result is identical. - */ - static void replicate_config(const struct hwt_state *hwt, bool local) -diff --git a/tests/mpathvalid.c b/tests/mpathvalid.c -index 0230a88f..df66ed6a 100644 ---- a/tests/mpathvalid.c -+++ b/tests/mpathvalid.c -@@ -399,7 +399,7 @@ static void test_mpathvalid_is_path_good3(void **state) - free(wwid); - } - --/* mabybe valid with no matching paths */ -+/* maybe valid with no matching paths */ - static void test_mpathvalid_is_path_good4(void **state) - { - const char *wwids[] = { "WWID_A", "WWID_B", "WWID_C", "WWID_D" }; -diff --git a/tests/pgpolicy.c b/tests/pgpolicy.c -index f116d12c..43be831f 100644 ---- a/tests/pgpolicy.c -+++ b/tests/pgpolicy.c -@@ -191,7 +191,7 @@ verify_pathgroups(struct multipath *mp, struct path *pp, int **groups, - /* Test names instead of pointers to get a more - * useful error message */ - assert_string_equal(pgp_path->dev, pp_path->dev); -- /* This test is just a backkup in case the -+ /* This test is just a backup in case the - * something wenth wrong naming the paths */ - assert_ptr_equal(pgp_path, pp_path); - } -diff --git a/tests/valid.c b/tests/valid.c -index e7393a1c..398b771e 100644 ---- a/tests/valid.c -+++ b/tests/valid.c -@@ -293,7 +293,7 @@ static void test_sysfs_is_multipathed(void **state) - - memset(&pp, 0, sizeof(pp)); - conf.find_multipaths = FIND_MULTIPATHS_STRICT; -- /* test for already existing multiapthed device */ -+ /* test for already existing multipathed device */ - will_return(__wrap_sysfs_is_multipathed, true); - will_return(__wrap_sysfs_is_multipathed, wwid); - assert_int_equal(is_path_valid(name, &conf, &pp, true), -@@ -452,7 +452,7 @@ static void test_greedy(void **state) - assert_string_equal(pp.dev, name); - assert_ptr_equal(pp.udev, &test_udev); - assert_string_equal(pp.wwid, wwid); -- /* test greedy success without checking multiapthd */ -+ /* test greedy success without checking multipathd */ - memset(&pp, 0, sizeof(pp)); - setup_passing(name, wwid, CHECK_MPATHD_SKIP, STAGE_IS_FAILED); - assert_int_equal(is_path_valid(name, &conf, &pp, false), -diff --git a/third-party/valgrind/valgrind.h b/third-party/valgrind/valgrind.h -index 577c8f05..1633b318 100644 ---- a/third-party/valgrind/valgrind.h -+++ b/third-party/valgrind/valgrind.h -@@ -1075,7 +1075,7 @@ typedef - - /* Use these to write the name of your wrapper. NOTE: duplicates - VG_WRAP_FUNCTION_Z{U,Z} in pub_tool_redir.h. NOTE also: inserts -- the default behaviour equivalance class tag "0000" into the name. -+ the default behaviour equivalence class tag "0000" into the name. - See pub_tool_redir.h for details -- normally you don't need to - think about this, though. */ - -@@ -1620,11 +1620,11 @@ typedef - and say that %r15 is trashed instead. gcc seems happy to go with - that. - -- Oh .. and this all needs to be conditionalised so that it is -+ Oh .. and this all needs to be conditionalized so that it is - unchanged from before this commit, when compiled with older gccs - that don't support __builtin_dwarf_cfa. Furthermore, since - this header file is freestanding, it has to be independent of -- config.h, and so the following conditionalisation cannot depend on -+ config.h, and so the following conditionalization cannot depend on - configure time checks. - - Although it's not clear from -@@ -1673,7 +1673,7 @@ typedef - /* NB 9 Sept 07. There is a nasty kludge here in all these CALL_FN_ - macros. In order not to trash the stack redzone, we need to drop - %rsp by 128 before the hidden call, and restore afterwards. The -- nastyness is that it is only by luck that the stack still appears -+ nastiness is that it is only by luck that the stack still appears - to be unwindable during the hidden call - since then the behaviour - of any routine using this macro does not match what the CFI data - says. Sigh. diff --git a/0028-multipath-avoid-NULL-string-in-released_to_systemd.patch b/0028-multipath-avoid-NULL-string-in-released_to_systemd.patch new file mode 100644 index 0000000..2be93fc --- /dev/null +++ b/0028-multipath-avoid-NULL-string-in-released_to_systemd.patch @@ -0,0 +1,26 @@ +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/0028-multipath-tools-remove-list-of-rebranded-arrays-vend.patch b/0028-multipath-tools-remove-list-of-rebranded-arrays-vend.patch deleted file mode 100644 index f2dbfce..0000000 --- a/0028-multipath-tools-remove-list-of-rebranded-arrays-vend.patch +++ /dev/null @@ -1,57 +0,0 @@ -From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 -From: Xose Vazquez Perez -Date: Thu, 21 Jul 2022 19:22:04 +0200 -Subject: [PATCH] multipath-tools: remove list of rebranded arrays vendors from - man page - -It does not provide useful info, and it is incomplete. - -Cc: Martin Wilck -Cc: Benjamin Marzinski -Cc: Christophe Varoqui -Cc: DM-DEVEL ML -Signed-off-by: Xose Vazquez Perez -Reviewed-by: Benjamin Marzinski -Reviewed-by: Martin Wilck -Signed-off-by: Benjamin Marzinski ---- - multipath/multipath.conf.5 | 8 ++++---- - 1 file changed, 4 insertions(+), 4 deletions(-) - -diff --git a/multipath/multipath.conf.5 b/multipath/multipath.conf.5 -index 853e0feb..8b7dc511 100644 ---- a/multipath/multipath.conf.5 -+++ b/multipath/multipath.conf.5 -@@ -315,12 +315,12 @@ accepts the optional prio_arg \fIexclusive_pref_bit\fR. - .TP - .I ontap - (Hardware-dependent) --Generate the path priority for NetApp ONTAP class and OEM arrays as IBM NSeries. -+Generate the path priority for NetApp ONTAP class, and rebranded arrays. - .TP - .I rdac - (Hardware-dependent) - Generate the path priority for LSI/Engenio/NetApp RDAC class as NetApp SANtricity --E/EF Series, and OEM arrays from IBM DELL SGI STK and SUN. -+E/EF Series, and rebranded arrays. - .TP - .I hp_sw - (Hardware-dependent) -@@ -496,7 +496,7 @@ Active/Standby mode exclusively. - .I rdac - (Hardware-dependent) - Check the path state for LSI/Engenio/NetApp RDAC class as NetApp SANtricity E/EF --Series, and OEM arrays from IBM DELL SGI STK and SUN. -+Series, and rebranded arrays. - .TP - .I directio - Read the first sector with direct I/O. This checker could cause spurious path -@@ -1568,7 +1568,7 @@ families. - .I 1 rdac - (Hardware-dependent) - Hardware handler for LSI/Engenio/NetApp RDAC class as NetApp SANtricity E/EF --Series, and OEM arrays from IBM DELL SGI STK and SUN. -+Series, and rebranded arrays. - .TP - .I 1 hp_sw - (Hardware-dependent) diff --git a/0029-libmultipath-avoid-NULL-string-in-is_udev_ready.patch b/0029-libmultipath-avoid-NULL-string-in-is_udev_ready.patch new file mode 100644 index 0000000..e48d44c --- /dev/null +++ b/0029-libmultipath-avoid-NULL-string-in-is_udev_ready.patch @@ -0,0 +1,26 @@ +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/0029-multipath-tools-correct-CLARiiON-info-from-multipath.patch b/0029-multipath-tools-correct-CLARiiON-info-from-multipath.patch deleted file mode 100644 index 8777ea1..0000000 --- a/0029-multipath-tools-correct-CLARiiON-info-from-multipath.patch +++ /dev/null @@ -1,47 +0,0 @@ -From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 -From: Xose Vazquez Perez -Date: Sat, 23 Jul 2022 00:01:13 +0200 -Subject: [PATCH] multipath-tools: correct CLARiiON info from multipath.conf - man page - -Remove "Unity" from emc prio and hardware_handler, because -Unity does not support PNR mode, just ALUA (page 113 and 153): -https://www.delltechnologies.com/asset/en-us/products/storage/technical-support/docu5128.pdf -And add PNR info. - -Cc: Yanfei Chen -Cc: Martin Wilck -Cc: Benjamin Marzinski -Cc: Christophe Varoqui -Cc: DM-DEVEL ML -Signed-off-by: Xose Vazquez Perez -Reviewed-by: Martin Wilck -Signed-off-by: Benjamin Marzinski ---- - multipath/multipath.conf.5 | 6 +++--- - 1 file changed, 3 insertions(+), 3 deletions(-) - -diff --git a/multipath/multipath.conf.5 b/multipath/multipath.conf.5 -index 8b7dc511..acdd1ae6 100644 ---- a/multipath/multipath.conf.5 -+++ b/multipath/multipath.conf.5 -@@ -306,7 +306,7 @@ generate the path priority. This prioritizer accepts the optional prio_arg - .I emc - (Hardware-dependent) - Generate the path priority for DGC class arrays as CLARiiON CX/AX and --EMC VNX and Unity families. -+EMC VNX families with Failover Mode 1 (Passive Not Ready(PNR)). - .TP - .I alua - (Hardware-dependent) -@@ -1562,8 +1562,8 @@ The following hardware handler are implemented: - .TP 12 - .I 1 emc - (Hardware-dependent) --Hardware handler for DGC class arrays as CLARiiON CX/AX and EMC VNX and Unity --families. -+Hardware handler for DGC class arrays as CLARiiON CX/AX and EMC VNX families -+with Failover Mode 1 (Passive Not Ready(PNR)). - .TP - .I 1 rdac - (Hardware-dependent) diff --git a/0030-libmultipath-impove-add_feature-variable-names.patch b/0030-libmultipath-impove-add_feature-variable-names.patch new file mode 100644 index 0000000..9cc841d --- /dev/null +++ b/0030-libmultipath-impove-add_feature-variable-names.patch @@ -0,0 +1,115 @@ +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/0030-multipath-tools-add-basic-info-on-how-to-use-multipa.patch b/0030-multipath-tools-add-basic-info-on-how-to-use-multipa.patch deleted file mode 100644 index 592be10..0000000 --- a/0030-multipath-tools-add-basic-info-on-how-to-use-multipa.patch +++ /dev/null @@ -1,41 +0,0 @@ -From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 -From: Xose Vazquez Perez -Date: Sat, 23 Jul 2022 15:12:04 +0200 -Subject: [PATCH] multipath-tools: add basic info on how to use multipath-tools - with NVMe devices - -Cc: Martin Wilck -Cc: Benjamin Marzinski -Cc: Christophe Varoqui -Cc: DM-DEVEL ML -Signed-off-by: Xose Vazquez Perez -Reviewed-by: Martin Wilck -Signed-off-by: Benjamin Marzinski ---- - README.md | 16 ++++++++++++++++ - 1 file changed, 16 insertions(+) - -diff --git a/README.md b/README.md -index 2322082c..b05b1332 100644 ---- a/README.md -+++ b/README.md -@@ -174,3 +174,19 @@ To enable ALUA, the following options should be changed: - - - Huawei OceanStor: - "Host Access Mode" should be changed to "Asymmetric". -+ -+ -+NVMe -+==== -+To use Device Mapper/multipath-tools with NVMe devices, -+if the Native NVMe Multipath subsystem is enabled -+( "Y" in `/sys/module/nvme_core/parameters/multipath` ), -+it has to be disabled: -+ -+`echo "options nvme_core multipath=N" > /etc/modprobe.d/01-nvme_core-mp.conf`, -+regenerate the initramfs (`dracut -f` or `update-initramfs`) and reboot. -+ -+Check that it is disabled(N) with: -+`cat /sys/module/nvme_core/parameters/multipath` -+or -+`systool -m nvme_core -A multipath` 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 new file mode 100644 index 0000000..6dc8a0e --- /dev/null +++ b/0031-multipathd-don-t-initialize-the-field-width-in-show_.patch @@ -0,0 +1,31 @@ +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/0031-multipathd-factor-out-the-code-to-flush-a-map-with-n.patch b/0031-multipathd-factor-out-the-code-to-flush-a-map-with-n.patch deleted file mode 100644 index bb8aa05..0000000 --- a/0031-multipathd-factor-out-the-code-to-flush-a-map-with-n.patch +++ /dev/null @@ -1,90 +0,0 @@ -From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 -From: Benjamin Marzinski -Date: Tue, 9 Aug 2022 16:46:26 -0500 -Subject: [PATCH] multipathd: factor out the code to flush a map with no paths - -The code to flush a multipath device because all of its paths have -been removed will be used by another caller, so factor it out of -ev_remove_path(). - -Signed-off-by: Benjamin Marzinski -Reviewed-by: Martin Wilck ---- - multipathd/main.c | 56 ++++++++++++++++++++++++----------------------- - 1 file changed, 29 insertions(+), 27 deletions(-) - -diff --git a/multipathd/main.c b/multipathd/main.c -index defee10a..53cbdb61 100644 ---- a/multipathd/main.c -+++ b/multipathd/main.c -@@ -561,6 +561,30 @@ int update_multipath (struct vectors *vecs, char *mapname, int reset) - return 0; - } - -+static bool -+flush_map_nopaths(struct multipath *mpp, struct vectors *vecs) { -+ char alias[WWID_SIZE]; -+ -+ /* -+ * flush_map will fail if the device is open -+ */ -+ strlcpy(alias, mpp->alias, WWID_SIZE); -+ if (mpp->flush_on_last_del == FLUSH_ENABLED) { -+ condlog(2, "%s Last path deleted, disabling queueing", -+ mpp->alias); -+ mpp->retry_tick = 0; -+ mpp->no_path_retry = NO_PATH_RETRY_FAIL; -+ mpp->disable_queueing = 1; -+ mpp->stat_map_failures++; -+ dm_queue_if_no_path(mpp->alias, 0); -+ } -+ if (!flush_map(mpp, vecs, 1)) { -+ condlog(2, "%s: removed map after removing all paths", alias); -+ return true; -+ } -+ return false; -+} -+ - static int - update_map (struct multipath *mpp, struct vectors *vecs, int new_map) - { -@@ -1363,34 +1387,12 @@ ev_remove_path (struct path *pp, struct vectors * vecs, int need_do_map) - vector_del_slot(mpp->paths, i); - - /* -- * remove the map IF removing the last path -+ * remove the map IF removing the last path. If -+ * flush_map_nopaths succeeds, the path has been removed. - */ -- if (VECTOR_SIZE(mpp->paths) == 0) { -- char alias[WWID_SIZE]; -- -- /* -- * flush_map will fail if the device is open -- */ -- strlcpy(alias, mpp->alias, WWID_SIZE); -- if (mpp->flush_on_last_del == FLUSH_ENABLED) { -- condlog(2, "%s Last path deleted, disabling queueing", mpp->alias); -- mpp->retry_tick = 0; -- mpp->no_path_retry = NO_PATH_RETRY_FAIL; -- mpp->disable_queueing = 1; -- mpp->stat_map_failures++; -- dm_queue_if_no_path(mpp->alias, 0); -- } -- if (!flush_map(mpp, vecs, 1)) { -- condlog(2, "%s: removed map after" -- " removing all paths", -- alias); -- /* flush_map() has freed the path */ -- goto out; -- } -- /* -- * Not an error, continue -- */ -- } -+ if (VECTOR_SIZE(mpp->paths) == 0 && -+ flush_map_nopaths(mpp, vecs)) -+ goto out; - - if (setup_map(mpp, ¶ms, vecs)) { - condlog(0, "%s: failed to setup map for" diff --git a/0032-libmultipath-improve-remove_feature-variable-names.patch b/0032-libmultipath-improve-remove_feature-variable-names.patch new file mode 100644 index 0000000..c1642d4 --- /dev/null +++ b/0032-libmultipath-improve-remove_feature-variable-names.patch @@ -0,0 +1,144 @@ +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/0032-libmultipath-return-success-if-we-raced-to-remove-a-.patch b/0032-libmultipath-return-success-if-we-raced-to-remove-a-.patch deleted file mode 100644 index ab04fd9..0000000 --- a/0032-libmultipath-return-success-if-we-raced-to-remove-a-.patch +++ /dev/null @@ -1,47 +0,0 @@ -From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 -From: Benjamin Marzinski -Date: Tue, 9 Aug 2022 16:46:27 -0500 -Subject: [PATCH] libmultipath: return success if we raced to remove a map and - lost - -_dm_flush_map() was returning failure if it failed to remove a map, -even if that was because the map had already been removed. Return -success in this case. - -Signed-off-by: Benjamin Marzinski -Reviewed-by: Martin Wilck ---- - libmultipath/devmapper.c | 4 ++++ - multipathd/main.c | 4 ---- - 2 files changed, 4 insertions(+), 4 deletions(-) - -diff --git a/libmultipath/devmapper.c b/libmultipath/devmapper.c -index 1748d258..a49db3b0 100644 ---- a/libmultipath/devmapper.c -+++ b/libmultipath/devmapper.c -@@ -1111,6 +1111,10 @@ int _dm_flush_map (const char * mapname, int need_sync, int deferred_remove, - } - condlog(4, "multipath map %s removed", mapname); - return 0; -+ } else if (dm_is_mpath(mapname) != 1) { -+ condlog(4, "multipath map %s removed externally", -+ mapname); -+ return 0; /*we raced with someone else removing it */ - } else { - condlog(2, "failed to remove multipath map %s", - mapname); -diff --git a/multipathd/main.c b/multipathd/main.c -index 53cbdb61..3fcd6bdb 100644 ---- a/multipathd/main.c -+++ b/multipathd/main.c -@@ -758,10 +758,6 @@ flush_map(struct multipath * mpp, struct vectors * vecs, int nopaths) - * the spurious uevent we may generate with the dm_flush_map call below - */ - if (r) { -- /* -- * May not really be an error -- if the map was already flushed -- * from the device mapper by dmsetup(8) for instance. -- */ - if (r == 1) - condlog(0, "%s: can't flush", mpp->alias); - else { diff --git a/0033-RH-fixup-udev-rules-for-redhat.patch b/0033-RH-fixup-udev-rules-for-redhat.patch new file mode 100644 index 0000000..f0fc0d2 --- /dev/null +++ b/0033-RH-fixup-udev-rules-for-redhat.patch @@ -0,0 +1,66 @@ +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 +From: Benjamin Marzinski +Date: Thu, 13 Apr 2017 07:22:23 -0500 +Subject: [PATCH] RH: fixup udev rules for redhat + +The multipath rules need to run after scsi_id is run. This means moving +them after 60-persistent-storage.rules for redhat. Redhat also uses a +different naming scheme for partitions than SuSE. + +Signed-off-by: Benjamin Marzinski +--- + Makefile.inc | 4 ++-- + kpartx/kpartx.rules | 2 +- + multipath/Makefile | 4 ++-- + 3 files changed, 5 insertions(+), 5 deletions(-) + +diff --git a/Makefile.inc b/Makefile.inc +index 866ab274..8c5a08a2 100644 +--- a/Makefile.inc ++++ b/Makefile.inc +@@ -34,9 +34,9 @@ endif + # Paths. All these can be overridden on the "make" command line. + prefix := + # Prefix for binaries +-exec_prefix := $(prefix) ++exec_prefix := $(prefix)/usr + # Prefix for non-essential libraries (libdmmp) +-usr_prefix := $(prefix) ++usr_prefix := $(prefix)/usr + # 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) +diff --git a/kpartx/kpartx.rules b/kpartx/kpartx.rules +index 1969dee0..d2b28233 100644 +--- a/kpartx/kpartx.rules ++++ b/kpartx/kpartx.rules +@@ -39,6 +39,6 @@ LABEL="mpath_kpartx_end" + GOTO="kpartx_end" + + LABEL="run_kpartx" +-RUN+="/sbin/kpartx -un -p -part /dev/$name" ++RUN+="/sbin/kpartx -un /dev/$name" + + LABEL="kpartx_end" +diff --git a/multipath/Makefile b/multipath/Makefile +index 73db991a..b3c2cc81 100644 +--- a/multipath/Makefile ++++ b/multipath/Makefile +@@ -24,7 +24,7 @@ install: + $(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) -m 644 multipath.rules $(DESTDIR)$(udevrulesdir)/62-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) +@@ -44,7 +44,7 @@ uninstall: + $(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)$(libudevdir)/rules.d/62-multipath.rules + $(Q)$(RM) $(DESTDIR)$(mandir)/man8/$(EXEC).8 + $(Q)$(RM) $(DESTDIR)$(mandir)/man5/$(EXEC).conf.5 + diff --git a/0033-multipathd-Handle-losing-all-path-in-update_map.patch b/0033-multipathd-Handle-losing-all-path-in-update_map.patch deleted file mode 100644 index 43358d3..0000000 --- a/0033-multipathd-Handle-losing-all-path-in-update_map.patch +++ /dev/null @@ -1,36 +0,0 @@ -From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 -From: Benjamin Marzinski -Date: Tue, 9 Aug 2022 16:46:28 -0500 -Subject: [PATCH] multipathd: Handle losing all path in update_map - -Its possible that when a multipath device is being updated, it will end -up that all the paths for it are gone. This can happen if paths are -added and then removed again before multipathd processes the uevent for -the newly created multipath device. In this case multipathd wasn't -taking the proper action for the case where all the paths had been -removed. If flush_on_last_del was set, multipathd wasn't disabling -flushing and if deferred_remove was set, it wasn't doing a deferred -remove. Multipathd should call flush_map_nopaths(), just like -ev_remove_path() does when the last path is removed. - -Signed-off-by: Benjamin Marzinski -Reviewed-by: Martin Wilck ---- - multipathd/main.c | 4 ++++ - 1 file changed, 4 insertions(+) - -diff --git a/multipathd/main.c b/multipathd/main.c -index 3fcd6bdb..7d127dbe 100644 ---- a/multipathd/main.c -+++ b/multipathd/main.c -@@ -602,6 +602,10 @@ retry: - goto fail; - } - verify_paths(mpp); -+ if (VECTOR_SIZE(mpp->paths) == 0 && -+ flush_map_nopaths(mpp, vecs)) -+ return 1; -+ - mpp->action = ACT_RELOAD; - - if (mpp->prflag) { diff --git a/0044-RH-Remove-the-property-blacklist-exception-builtin.patch b/0034-RH-Remove-the-property-blacklist-exception-builtin.patch similarity index 96% rename from 0044-RH-Remove-the-property-blacklist-exception-builtin.patch rename to 0034-RH-Remove-the-property-blacklist-exception-builtin.patch index ded9aab..feef3f6 100644 --- a/0044-RH-Remove-the-property-blacklist-exception-builtin.patch +++ b/0034-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 acdd1ae6..5ab770ba 100644 +index 1fea9d5a..eef3c605 100644 --- a/multipath/multipath.conf.5 +++ b/multipath/multipath.conf.5 -@@ -1348,9 +1348,14 @@ keywords. Both are regular expressions. For a full description of these keywords +@@ -1353,9 +1353,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 acdd1ae6..5ab770ba 100644 . .RS .PP -@@ -1361,10 +1366,6 @@ Blacklisting by missing properties is only applied to devices which do have the +@@ -1366,10 +1371,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/0034-multipath-fix-systemd-timers-in-the-initramfs.patch b/0034-multipath-fix-systemd-timers-in-the-initramfs.patch deleted file mode 100644 index 91178ea..0000000 --- a/0034-multipath-fix-systemd-timers-in-the-initramfs.patch +++ /dev/null @@ -1,35 +0,0 @@ -From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 -From: Benjamin Marzinski -Date: Fri, 5 Aug 2022 18:16:03 -0500 -Subject: [PATCH] multipath: fix systemd timers in the initramfs - -The systemd timers created for "find_multipaths smart" conflict with -shutdown.target, but not with initrd-cleanup.service. This can make -these timers trigger after the inirtd has started shutting down, -restarting multipathd (which then stops initrd-cleanup.service, since it -conflicts). To avoid this, make sure the timers and the unit they -trigger conflict with inird-cleanup.service. Also don't make them start -multipathd. "multipath -u" will not return "maybe" if multipathd isn't -running or set to run, and since we no longer wait for udev-settle, -multipathd starts up pretty quickly, so it shouldn't be a problem to -not trigger it here. - -Signed-off-by: Benjamin Marzinski -Reviewed-by: Martin Wilck ---- - multipath/multipath.rules | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/multipath/multipath.rules b/multipath/multipath.rules -index 9df11a95..f993d996 100644 ---- a/multipath/multipath.rules -+++ b/multipath/multipath.rules -@@ -71,7 +71,7 @@ ENV{.SAVED_FM_WAIT_UNTIL}=="?*", GOTO="pretend_mpath" - # - # We must trigger an "add" event because LVM2 will only act on those. - --RUN+="/usr/bin/systemd-run --unit=cancel-multipath-wait-$kernel --description 'cancel waiting for multipath siblings of $kernel' --no-block --timer-property DefaultDependencies=no --timer-property Conflicts=shutdown.target --timer-property Before=shutdown.target --timer-property AccuracySec=500ms --property DefaultDependencies=no --property Conflicts=shutdown.target --property Before=shutdown.target --property Wants=multipathd.service --property After=multipathd.service --on-active=$env{FIND_MULTIPATHS_WAIT_UNTIL} /usr/bin/udevadm trigger --action=add $sys$devpath" -+RUN+="/usr/bin/systemd-run --unit=cancel-multipath-wait-$kernel --description 'cancel waiting for multipath siblings of $kernel' --no-block --timer-property DefaultDependencies=no --timer-property Conflicts=shutdown.target --timer-property Before=shutdown.target --timer-property Conflicts=initrd-cleanup.service --timer-property Before=initrd-cleanup.service --timer-property AccuracySec=500ms --property DefaultDependencies=no --property Conflicts=shutdown.target --property Before=shutdown.target --property Conflicts=initrd-cleanup.service --property Before=initrd-cleanup.service --on-active=$env{FIND_MULTIPATHS_WAIT_UNTIL} /usr/bin/udevadm trigger --action=add $sys$devpath" - - LABEL="pretend_mpath" - ENV{DM_MULTIPATH_DEVICE_PATH}="1" diff --git a/0045-RH-don-t-start-without-a-config-file.patch b/0035-RH-don-t-start-without-a-config-file.patch similarity index 83% rename from 0045-RH-don-t-start-without-a-config-file.patch rename to 0035-RH-don-t-start-without-a-config-file.patch index dda921b..c957e2f 100644 --- a/0045-RH-don-t-start-without-a-config-file.patch +++ b/0035-RH-don-t-start-without-a-config-file.patch @@ -14,17 +14,17 @@ Signed-off-by: Benjamin Marzinski --- libmultipath/config.c | 13 +++++++++++++ libmultipath/config.h | 1 + - multipath/multipath.rules | 1 + + multipath/multipath.rules.in | 1 + multipathd/multipathd.8 | 2 ++ multipathd/multipathd.service | 1 + multipathd/multipathd.socket | 1 + 6 files changed, 19 insertions(+) diff --git a/libmultipath/config.c b/libmultipath/config.c -index ab8b26e7..f06fcbf9 100644 +index 5c5c0726..183b319d 100644 --- a/libmultipath/config.c +++ b/libmultipath/config.c -@@ -955,6 +955,19 @@ int _init_config (const char *file, struct config *conf) +@@ -966,6 +966,19 @@ int _init_config (const char *file, struct config *conf) } factorize_hwtable(conf->hwtable, builtin_hwtable_size, file); validate_pctable(conf->overrides, 0, file); @@ -45,10 +45,10 @@ index ab8b26e7..f06fcbf9 100644 conf->processed_main_config = 1; diff --git a/libmultipath/config.h b/libmultipath/config.h -index fdcdff0a..affba937 100644 +index 87947469..0dc89c16 100644 --- a/libmultipath/config.h +++ b/libmultipath/config.h -@@ -9,6 +9,7 @@ +@@ -10,6 +10,7 @@ #define ORIGIN_DEFAULT 0 #define ORIGIN_CONFIG 1 @@ -56,10 +56,10 @@ index fdcdff0a..affba937 100644 enum devtypes { DEV_NONE, -diff --git a/multipath/multipath.rules b/multipath/multipath.rules -index f993d996..68c30644 100644 ---- a/multipath/multipath.rules -+++ b/multipath/multipath.rules +diff --git a/multipath/multipath.rules.in b/multipath/multipath.rules.in +index 8d3cf33a..5c4447a2 100644 +--- a/multipath/multipath.rules.in ++++ b/multipath/multipath.rules.in @@ -9,6 +9,7 @@ IMPORT{cmdline}="nompath" ENV{nompath}=="?*", GOTO="end_mpath" IMPORT{cmdline}="multipath" @@ -69,13 +69,13 @@ index f993d996..68c30644 100644 ENV{DEVTYPE}!="partition", GOTO="test_dev" IMPORT{parent}="DM_MULTIPATH_DEVICE_PATH" diff --git a/multipathd/multipathd.8 b/multipathd/multipathd.8 -index 1e318bdc..6aab9325 100644 +index bdf102eb..a16a0bd5 100644 --- a/multipathd/multipathd.8 +++ b/multipathd/multipathd.8 -@@ -39,6 +39,8 @@ map regains its maximum performance and redundancy. - This daemon executes the external \fBmultipath\fR tool when events occur. - In turn, the multipath tool signals the multipathd daemon when it is done with - devmap reconfiguration, so that it can refresh its failed path list. +@@ -48,6 +48,8 @@ map regains its maximum performance and redundancy. + With the \fB-k\fR option, \fBmultipathd\fR acts as a client utility that + sends commands to a running instance of the multipathd daemon (see + \fBCOMMANDS\fR below). + +In this Linux distribution, multipathd does not run unless a /etc/multipath.conf file exists. . diff --git a/0035-multipathd-Add-missing-ctype-include.patch b/0035-multipathd-Add-missing-ctype-include.patch deleted file mode 100644 index 29ea453..0000000 --- a/0035-multipathd-Add-missing-ctype-include.patch +++ /dev/null @@ -1,26 +0,0 @@ -From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 -From: Bastian Germann -Date: Thu, 14 Oct 2021 00:34:33 +0200 -Subject: [PATCH] multipathd: Add missing ctype include - -In uxclnt.c, there are isspace calls. Add an explicit include. - -Signed-off-by: Bastian Germann -Reviewed-by: Martin Wilck -Signed-off-by: Benjamin Marzinski ---- - multipathd/uxclnt.c | 1 + - 1 file changed, 1 insertion(+) - -diff --git a/multipathd/uxclnt.c b/multipathd/uxclnt.c -index b1b058bd..bdcc7c3f 100644 ---- a/multipathd/uxclnt.c -+++ b/multipathd/uxclnt.c -@@ -8,6 +8,7 @@ - #include - #include - #include -+#include - #include - #include - #include diff --git a/0046-RH-Fix-nvme-function-missing-argument.patch b/0036-RH-Fix-nvme-function-missing-argument.patch similarity index 100% rename from 0046-RH-Fix-nvme-function-missing-argument.patch rename to 0036-RH-Fix-nvme-function-missing-argument.patch diff --git a/0036-multipathd-replace-libreadline-with-libedit.patch b/0036-multipathd-replace-libreadline-with-libedit.patch deleted file mode 100644 index f376ee7..0000000 --- a/0036-multipathd-replace-libreadline-with-libedit.patch +++ /dev/null @@ -1,102 +0,0 @@ -From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 -From: Martin Wilck -Date: Fri, 12 Aug 2022 18:58:15 +0200 -Subject: [PATCH] multipathd: replace libreadline with libedit - -Linking multipathd with libreadline may cause a license conflict, -because libreadline is licensed under GPL-3.0-or-later, and -libmultipath contains several files under GPL-2.0. - -See: - https://github.com/opensvc/multipath-tools/issues/36 - https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=979095 - https://www.gnu.org/licenses/gpl-faq.html#AllCompatibility - -Replace the readline functionality with libedit, which comes under -a BSD license. The readline library can still be enabled (e.g. for -binaries not intended to be distributed) by running -"make READLINE=libreadline". - -Signed-off-by: Martin Wilck -Signed-off-by: Benjamin Marzinski ---- - Makefile.inc | 5 +++++ - multipathd/Makefile | 11 ++++++++++- - multipathd/cli.c | 5 +++++ - multipathd/uxclnt.c | 6 ++++++ - 4 files changed, 26 insertions(+), 1 deletion(-) - -diff --git a/Makefile.inc b/Makefile.inc -index bcd2212a..ad7afd04 100644 ---- a/Makefile.inc -+++ b/Makefile.inc -@@ -8,6 +8,11 @@ - # - # Uncomment to disable dmevents polling support - # ENABLE_DMEVENTS_POLL = 0 -+# -+# Readline library to use, libedit or libreadline -+# Caution: Using libreadline may make the multipathd binary undistributable, -+# see https://github.com/opensvc/multipath-tools/issues/36 -+READLINE = libedit - - # List of scsi device handler modules to load on boot, e.g. - # SCSI_DH_MODULES_PRELOAD := scsi_dh_alua scsi_dh_rdac -diff --git a/multipathd/Makefile b/multipathd/Makefile -index c937cd55..95acd887 100644 ---- a/multipathd/Makefile -+++ b/multipathd/Makefile -@@ -22,7 +22,16 @@ CFLAGS += $(BIN_CFLAGS) - LDFLAGS += $(BIN_LDFLAGS) - LIBDEPS += -L$(multipathdir) -lmultipath -L$(mpathpersistdir) -lmpathpersist \ - -L$(mpathcmddir) -lmpathcmd -ludev -ldl -lurcu -lpthread \ -- -ldevmapper -lreadline -+ -ldevmapper -+ -+ifeq ($(READLINE),libedit) -+CPPFLAGS += -DUSE_LIBEDIT -+LIBDEPS += -ledit -+endif -+ifeq ($(READLINE),libreadline) -+CPPFLAGS += -DUSE_LIBREADLINE -+LIBDEPS += -lreadline -+endif - - ifdef SYSTEMD - CPPFLAGS += -DUSE_SYSTEMD=$(SYSTEMD) -diff --git a/multipathd/cli.c b/multipathd/cli.c -index b2ee9a99..fa482a67 100644 ---- a/multipathd/cli.c -+++ b/multipathd/cli.c -@@ -11,7 +11,12 @@ - #include "parser.h" - #include "util.h" - #include "version.h" -+#ifdef USE_LIBEDIT -+#include -+#endif -+#ifdef USE_LIBREADLINE - #include -+#endif - - #include "mpath_cmd.h" - #include "cli.h" -diff --git a/multipathd/uxclnt.c b/multipathd/uxclnt.c -index bdcc7c3f..251e7d75 100644 ---- a/multipathd/uxclnt.c -+++ b/multipathd/uxclnt.c -@@ -16,8 +16,14 @@ - #include - #include - #include -+ -+#ifdef USE_LIBEDIT -+#include -+#endif -+#ifdef USE_LIBREADLINE - #include - #include -+#endif - - #include "mpath_cmd.h" - #include "uxsock.h" diff --git a/0047-RH-use-rpm-optflags-if-present.patch b/0037-RH-use-rpm-optflags-if-present.patch similarity index 71% rename from 0047-RH-use-rpm-optflags-if-present.patch rename to 0037-RH-use-rpm-optflags-if-present.patch index bd3b6e1..c844afe 100644 --- a/0047-RH-use-rpm-optflags-if-present.patch +++ b/0037-RH-use-rpm-optflags-if-present.patch @@ -13,19 +13,19 @@ Signed-off-by: Benjamin Marzinski 1 file changed, 18 insertions(+), 6 deletions(-) diff --git a/Makefile.inc b/Makefile.inc -index 03450610..2cf6e85f 100644 +index 8c5a08a2..e6e7f7d7 100644 --- a/Makefile.inc +++ b/Makefile.inc -@@ -141,18 +141,30 @@ 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,) +@@ -74,19 +74,31 @@ INSTALL_PROGRAM := install + 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 \ +ifndef RPM_OPT_FLAGS -+ OPTFLAGS := -O2 -g -Wall $(FORTIFY_OPT) -fexceptions \ -+ $(STACKPROT) -grecord-gcc-switches \ -+ -fasynchronous-unwind-tables --param=ssp-buffer-size=4 ++ OPTFLAGS := -O2 -g $(STACKPROT) --param=ssp-buffer-size=4 \ ++ -Wall $(FORTIFY_OPT) -fexceptions -grecord-gcc-switches \ ++ -fasynchronous-unwind-tables + ifeq ($(shell test -f /usr/lib/rpm/redhat/redhat-hardened-cc1 && echo 1),1) + OPTFLAGS += -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 + endif @@ -39,17 +39,18 @@ index 03450610..2cf6e85f 100644 -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)\" \ + $(WNOCLOBBERED) -Werror=cast-qual \ + $(ERROR_DISCARDED_QUALIFIERS) -Wstrict-prototypes -+CPPFLAGS := -DBIN_DIR=\"$(bindir)\" -DMULTIPATH_DIR=\"$(plugindir)\" -DRUN_DIR=\"${RUN}\" \ ++CPPFLAGS := -DBIN_DIR=\"$(bindir)\" -DMULTIPATH_DIR=\"$(plugindir)\" \ + -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 +LDFLAGS := $(LDFLAGS) $(RPM_LD_FLAGS) -Wl,-z,relro -Wl,-z,now -Wl,-z,defs - BIN_LDFLAGS = -pie + BIN_LDFLAGS := -pie - # Check whether a function with name $1 has been declared in header file $2. + # Source code directories. Don't modify. diff --git a/0037-libmultipath-convert-license-of-strbuf-code-to-GPL-2.patch b/0037-libmultipath-convert-license-of-strbuf-code-to-GPL-2.patch deleted file mode 100644 index f8085e8..0000000 --- a/0037-libmultipath-convert-license-of-strbuf-code-to-GPL-2.patch +++ /dev/null @@ -1,42 +0,0 @@ -From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 -From: Martin Wilck -Date: Fri, 12 Aug 2022 21:25:37 +0200 -Subject: [PATCH] libmultipath: convert license of strbuf code to GPL-2.0+ - -This (partly) fixes the license incompatibility reported in -https://github.com/opensvc/multipath-tools/issues/36 - -As I'm the only author (except for a trivial spelling fix), -I see no issue with changing the license. - -Signed-off-by: Martin Wilck -Signed-off-by: Benjamin Marzinski ---- - libmultipath/strbuf.c | 2 +- - libmultipath/strbuf.h | 2 +- - 2 files changed, 2 insertions(+), 2 deletions(-) - -diff --git a/libmultipath/strbuf.c b/libmultipath/strbuf.c -index f654594d..e23b65e8 100644 ---- a/libmultipath/strbuf.c -+++ b/libmultipath/strbuf.c -@@ -1,6 +1,6 @@ - /* - * Copyright (c) 2021 SUSE LLC -- * SPDX-License-Identifier: GPL-2.0-only -+ * SPDX-License-Identifier: GPL-2.0-or-later - */ - #include - #include -diff --git a/libmultipath/strbuf.h b/libmultipath/strbuf.h -index 31ab519a..ae863417 100644 ---- a/libmultipath/strbuf.h -+++ b/libmultipath/strbuf.h -@@ -1,6 +1,6 @@ - /* - * Copyright (c) 2021 SUSE LLC -- * SPDX-License-Identifier: GPL-2.0-only -+ * SPDX-License-Identifier: GPL-2.0-or-later - */ - #ifndef _STRBUF_H - #define _STRBUF_H diff --git a/0048-RH-add-mpathconf.patch b/0038-RH-add-mpathconf.patch similarity index 94% rename from 0048-RH-add-mpathconf.patch rename to 0038-RH-add-mpathconf.patch index ff2487f..e279822 100644 --- a/0048-RH-add-mpathconf.patch +++ b/0038-RH-add-mpathconf.patch @@ -21,10 +21,10 @@ Signed-off-by: Benjamin Marzinski create mode 100644 multipath/mpathconf.8 diff --git a/libmultipath/config.c b/libmultipath/config.c -index f06fcbf9..e2840839 100644 +index 183b319d..01f36a4f 100644 --- a/libmultipath/config.c +++ b/libmultipath/config.c -@@ -957,6 +957,8 @@ int _init_config (const char *file, struct config *conf) +@@ -968,6 +968,8 @@ int _init_config (const char *file, struct config *conf) validate_pctable(conf->overrides, 0, file); } else { condlog(0, "/etc/multipath.conf does not exist, blacklisting all devices."); @@ -34,36 +34,39 @@ index f06fcbf9..e2840839 100644 conf->blist_devnode = vector_alloc(); if (!conf->blist_devnode) { diff --git a/multipath/Makefile b/multipath/Makefile -index d2b3fd82..00e46a0d 100644 +index b3c2cc81..413294ef 100644 --- a/multipath/Makefile +++ b/multipath/Makefile -@@ -21,6 +21,7 @@ $(EXEC): $(OBJS) $(multipathdir)/libmultipath.so $(mpathcmddir)/libmpathcmd.so +@@ -22,6 +22,7 @@ $(EXEC): $(OBJS) $(multipathdir)/libmultipath.so $(mpathcmddir)/libmpathcmd.so install: - $(INSTALL_PROGRAM) -d $(DESTDIR)$(bindir) - $(INSTALL_PROGRAM) -m 755 $(EXEC) $(DESTDIR)$(bindir)/ -+ $(INSTALL_PROGRAM) -m 755 mpathconf $(DESTDIR)$(bindir)/ - $(INSTALL_PROGRAM) -d $(DESTDIR)$(udevrulesdir) - $(INSTALL_PROGRAM) -m 644 11-dm-mpath.rules $(DESTDIR)$(udevrulesdir) - $(INSTALL_PROGRAM) -m 644 $(EXEC).rules $(DESTDIR)$(udevrulesdir)/62-multipath.rules -@@ -30,6 +31,7 @@ install: - $(INSTALL_PROGRAM) -m 644 $(EXEC).8 $(DESTDIR)$(man8dir) - $(INSTALL_PROGRAM) -d $(DESTDIR)$(man5dir) - $(INSTALL_PROGRAM) -m 644 $(EXEC).conf.5 $(DESTDIR)$(man5dir) -+ $(INSTALL_PROGRAM) -m 644 mpathconf.8 $(DESTDIR)$(man8dir) + $(Q)$(INSTALL_PROGRAM) -d $(DESTDIR)$(bindir) + $(Q)$(INSTALL_PROGRAM) -m 755 $(EXEC) $(DESTDIR)$(bindir)/ ++ $(Q)$(INSTALL_PROGRAM) -m 755 mpathconf $(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)/62-multipath.rules +@@ -31,6 +32,7 @@ install: + $(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) -m 644 mpathconf.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 \ -@@ -42,8 +44,10 @@ uninstall: - $(RM) $(DESTDIR)$(modulesloaddir)/multipath.conf - $(RM) $(DESTDIR)$(modulesloaddir)/scsi_dh.conf - $(RM) $(DESTDIR)$(libudevdir)/rules.d/62-multipath.rules -+ $(RM) $(DESTDIR)$(bindir)/mpathconf - $(RM) $(DESTDIR)$(man8dir)/$(EXEC).8 - $(RM) $(DESTDIR)$(man5dir)/$(EXEC).conf.5 -+ $(RM) $(DESTDIR)$(man8dir)/mpathconf.8 +@@ -41,11 +43,13 @@ endif + + uninstall: + $(Q)$(RM) $(DESTDIR)$(bindir)/$(EXEC) ++ $(Q)$(RM) $(DESTDIR)$(bindir)/mpathconf + $(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/62-multipath.rules + $(Q)$(RM) $(DESTDIR)$(mandir)/man8/$(EXEC).8 ++ $(Q)$(RM) $(DESTDIR)$(mandir)/man8/mpathconf.8 + $(Q)$(RM) $(DESTDIR)$(mandir)/man5/$(EXEC).conf.5 clean: dep_clean - $(RM) core *.o $(EXEC) diff --git a/multipath/mpathconf b/multipath/mpathconf new file mode 100644 index 00000000..319664b1 diff --git a/0038-github-workflows-build-and-unittest.yaml-add-libedit.patch b/0038-github-workflows-build-and-unittest.yaml-add-libedit.patch deleted file mode 100644 index 375940f..0000000 --- a/0038-github-workflows-build-and-unittest.yaml-add-libedit.patch +++ /dev/null @@ -1,44 +0,0 @@ -From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 -From: Martin Wilck -Date: Tue, 16 Aug 2022 14:10:39 +0200 -Subject: [PATCH] github workflows: build-and-unittest.yaml: add libedit-dev - -This is is required after switching from libreadline to libedit. - -Signed-off-by: Martin Wilck -Signed-off-by: Benjamin Marzinski ---- - .github/workflows/build-and-unittest.yaml | 6 +++--- - 1 file changed, 3 insertions(+), 3 deletions(-) - -diff --git a/.github/workflows/build-and-unittest.yaml b/.github/workflows/build-and-unittest.yaml -index 7ff45842..1ab0d36c 100644 ---- a/.github/workflows/build-and-unittest.yaml -+++ b/.github/workflows/build-and-unittest.yaml -@@ -27,7 +27,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 -+ libudev-dev libjson-c-dev liburcu-dev libcmocka-dev libedit-dev - - name: build - run: make -O -j$(grep -c ^processor /proc/cpuinfo) - - name: test -@@ -55,7 +55,7 @@ jobs: - sudo apt-get install --yes gcc-10 - make perl-base pkg-config valgrind - libdevmapper-dev libreadline-dev libaio-dev libsystemd-dev -- libudev-dev libjson-c-dev liburcu-dev libcmocka-dev -+ libudev-dev libjson-c-dev liburcu-dev libcmocka-dev libedit-dev - - name: set CC - run: echo CC=gcc-10 >> $GITHUB_ENV - - name: build -@@ -85,7 +85,7 @@ jobs: - sudo apt-get install --yes clang - make perl-base pkg-config valgrind - libdevmapper-dev libreadline-dev libaio-dev libsystemd-dev -- libudev-dev libjson-c-dev liburcu-dev libcmocka-dev -+ libudev-dev libjson-c-dev liburcu-dev libcmocka-dev libedit-dev - - name: set CC - run: echo CC=clang >> $GITHUB_ENV - - name: build diff --git a/0049-RH-add-wwids-from-kernel-cmdline-mpath.wwids-with-A.patch b/0039-RH-add-wwids-from-kernel-cmdline-mpath.wwids-with-A.patch similarity index 95% rename from 0049-RH-add-wwids-from-kernel-cmdline-mpath.wwids-with-A.patch rename to 0039-RH-add-wwids-from-kernel-cmdline-mpath.wwids-with-A.patch index fbf22db..c98543b 100644 --- a/0049-RH-add-wwids-from-kernel-cmdline-mpath.wwids-with-A.patch +++ b/0039-RH-add-wwids-from-kernel-cmdline-mpath.wwids-with-A.patch @@ -20,7 +20,7 @@ Signed-off-by: Benjamin Marzinski 3 files changed, 59 insertions(+), 3 deletions(-) diff --git a/multipath/main.c b/multipath/main.c -index 034dd2f4..4c31820b 100644 +index b9f360b4..5eb752ee 100644 --- a/multipath/main.c +++ b/multipath/main.c @@ -120,7 +120,7 @@ usage (char * progname) @@ -41,7 +41,7 @@ index 034dd2f4..4c31820b 100644 " -c check if a device should be a path in a multipath device\n" " -C check if a multipath device has usable paths\n" " -q allow queue_if_no_path when multipathd is not running\n" -@@ -448,6 +450,50 @@ static void cleanup_vecs(void) +@@ -447,6 +449,50 @@ static void cleanup_vecs(void) free_pathvec(vecs.pathvec, FREE_PATHS); } @@ -92,7 +92,7 @@ index 034dd2f4..4c31820b 100644 static int configure (struct config *conf, enum mpath_cmds cmd, enum devtypes dev_type, char *devpath) -@@ -841,7 +887,7 @@ main (int argc, char *argv[]) +@@ -840,7 +886,7 @@ main (int argc, char *argv[]) conf->force_sync = 1; if (atexit(cleanup_vecs)) condlog(1, "failed to register cleanup handler for vecs: %m"); @@ -101,7 +101,7 @@ index 034dd2f4..4c31820b 100644 switch(arg) { case 'v': if (!isdigit(optarg[0])) { -@@ -912,6 +958,10 @@ main (int argc, char *argv[]) +@@ -911,6 +957,10 @@ main (int argc, char *argv[]) case 'T': cmd = CMD_DUMP_CONFIG; break; @@ -113,7 +113,7 @@ index 034dd2f4..4c31820b 100644 usage(argv[0]); exit(RTVL_OK); diff --git a/multipath/multipath.8 b/multipath/multipath.8 -index 4c7e9885..1d062664 100644 +index 88149d53..072a03ee 100644 --- a/multipath/multipath.8 +++ b/multipath/multipath.8 @@ -63,7 +63,7 @@ multipath \- Device mapper target autoconfig. diff --git a/0039-github-workflows-coverity.yaml-add-libedit-dev.patch b/0039-github-workflows-coverity.yaml-add-libedit-dev.patch deleted file mode 100644 index 63ef9dc..0000000 --- a/0039-github-workflows-coverity.yaml-add-libedit-dev.patch +++ /dev/null @@ -1,26 +0,0 @@ -From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 -From: Martin Wilck -Date: Tue, 16 Aug 2022 14:10:39 +0200 -Subject: [PATCH] github workflows: coverity.yaml: add libedit-dev - -This is is required after switching from libreadline to libedit. - -Signed-off-by: Martin Wilck -Signed-off-by: Benjamin Marzinski ---- - .github/workflows/coverity.yaml | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/.github/workflows/coverity.yaml b/.github/workflows/coverity.yaml -index a8b56d43..3c6b3824 100644 ---- a/.github/workflows/coverity.yaml -+++ b/.github/workflows/coverity.yaml -@@ -15,7 +15,7 @@ jobs: - sudo apt-get install --yes - gcc make pkg-config - libdevmapper-dev libreadline-dev libaio-dev libsystemd-dev -- libudev-dev libjson-c-dev liburcu-dev libcmocka-dev -+ libudev-dev libjson-c-dev liburcu-dev libcmocka-dev libedit-dev - - name: download coverity - run: > - curl -o cov-analysis-linux64.tar.gz diff --git a/0050-RH-reset-default-find_mutipaths-value-to-off.patch b/0040-RH-reset-default-find_mutipaths-value-to-off.patch similarity index 96% rename from 0050-RH-reset-default-find_mutipaths-value-to-off.patch rename to 0040-RH-reset-default-find_mutipaths-value-to-off.patch index 9b6b7bb..ea12464 100644 --- a/0050-RH-reset-default-find_mutipaths-value-to-off.patch +++ b/0040-RH-reset-default-find_mutipaths-value-to-off.patch @@ -12,7 +12,7 @@ Signed-off-by: Benjamin Marzinski 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libmultipath/defaults.h b/libmultipath/defaults.h -index 7979f208..78b3d938 100644 +index a5e9ea0c..514fd880 100644 --- a/libmultipath/defaults.h +++ b/libmultipath/defaults.h @@ -23,7 +23,7 @@ diff --git a/0040-github-workflows-abi.yaml-add-libedit-dev.patch b/0040-github-workflows-abi.yaml-add-libedit-dev.patch deleted file mode 100644 index 93e2331..0000000 --- a/0040-github-workflows-abi.yaml-add-libedit-dev.patch +++ /dev/null @@ -1,26 +0,0 @@ -From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 -From: Martin Wilck -Date: Tue, 16 Aug 2022 14:10:39 +0200 -Subject: [PATCH] github workflows: abi.yaml: add libedit-dev - -This is is required after switching from libreadline to libedit. - -Signed-off-by: Martin Wilck -Signed-off-by: Benjamin Marzinski ---- - .github/workflows/abi.yaml | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/.github/workflows/abi.yaml b/.github/workflows/abi.yaml -index 0a40104a..89b971cd 100644 ---- a/.github/workflows/abi.yaml -+++ b/.github/workflows/abi.yaml -@@ -30,7 +30,7 @@ jobs: - sudo apt-get install --yes gcc - gcc make pkg-config abigail-tools - libdevmapper-dev libreadline-dev libaio-dev libsystemd-dev -- libudev-dev libjson-c-dev liburcu-dev libcmocka-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 - - name: save ABI diff --git a/0041-GitHub-workflows-native.yaml-add-libedit-dev-except-.patch b/0041-GitHub-workflows-native.yaml-add-libedit-dev-except-.patch deleted file mode 100644 index 7fc05a6..0000000 --- a/0041-GitHub-workflows-native.yaml-add-libedit-dev-except-.patch +++ /dev/null @@ -1,71 +0,0 @@ -From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 -From: Martin Wilck -Date: Tue, 16 Aug 2022 16:52:07 +0200 -Subject: [PATCH] GitHub workflows: native.yaml: add libedit-dev, except for - jessie - -This is is required after switching from libreadline to libedit. - -On jessie, we can use libreadline5 (libreadline-gpl2-dev) without -license issues. Trying to compile against libedit results in an -"incompatible pointer type" error on jessie, because libedit -uses a different prototype for rl_completion_entry_function. - -Signed-off-by: Martin Wilck -Signed-off-by: Benjamin Marzinski ---- - .github/workflows/native.yaml | 15 ++++++++++++++- - 1 file changed, 14 insertions(+), 1 deletion(-) - -diff --git a/.github/workflows/native.yaml b/.github/workflows/native.yaml -index ddfd4a09..8b599209 100644 ---- a/.github/workflows/native.yaml -+++ b/.github/workflows/native.yaml -@@ -22,13 +22,24 @@ jobs: - - name: checkout - uses: actions/checkout@v1 - - name: build and test -+ if: ${{ matrix.os != 'jessie' }} - run: make test -+ - name: build and test (jessie) -+ # On jessie, we use libreadline 5 (no licensing issue) -+ if: ${{ matrix.os == 'jessie' }} -+ run: make READLINE=libreadline test - - name: clean - run: make clean - - name: clang -+ if: ${{ matrix.os != 'jessie' }} - env: - CC: clang - run: make test -+ - name: clang (jessie) -+ if: ${{ matrix.os == 'jessie' }} -+ env: -+ CC: clang -+ run: make READLINE=libreadline test - - rolling: - runs-on: ubuntu-20.04 -@@ -56,12 +67,13 @@ jobs: - libjson-c-dev - liburcu-dev - libcmocka-dev -+ libedit-dev - - name: dependencies-alpine - if: ${{ matrix.os == 'alpine' }} - run: > - apk add make gcc clang cmocka - musl-dev lvm2-dev libaio-dev readline-dev ncurses-dev eudev-dev -- userspace-rcu-dev json-c-dev cmocka-dev -+ userspace-rcu-dev json-c-dev cmocka-dev libedit-dev - - name: dependencies-fedora - if: ${{ matrix.os == 'fedora:rawhide' }} - run: > -@@ -76,6 +88,7 @@ jobs: - userspace-rcu-devel - json-c-devel - libcmocka-devel -+ libedit-devel - - name: checkout - uses: actions/checkout@v1 - - name: build and test diff --git a/0051-RH-attempt-to-get-ANA-info-via-sysfs-first.patch b/0041-RH-attempt-to-get-ANA-info-via-sysfs-first.patch similarity index 100% rename from 0051-RH-attempt-to-get-ANA-info-via-sysfs-first.patch rename to 0041-RH-attempt-to-get-ANA-info-via-sysfs-first.patch diff --git a/0042-GitHub-workflows-foreign.yaml-switch-to-Debian-11-bu.patch b/0042-GitHub-workflows-foreign.yaml-switch-to-Debian-11-bu.patch deleted file mode 100644 index 3af19df..0000000 --- a/0042-GitHub-workflows-foreign.yaml-switch-to-Debian-11-bu.patch +++ /dev/null @@ -1,40 +0,0 @@ -From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 -From: Martin Wilck -Date: Tue, 16 Aug 2022 23:38:18 +0200 -Subject: [PATCH] GitHub workflows: foreign.yaml: switch to Debian 11 - (bullseye) - -Building the containers in the build-multipath project recently -started failing for buster/s390x and buster/ppc64el. That failure -had nothing to do with the switch to libedit. - -It's about time to switch to bullseye anyway. - -Signed-off-by: Martin Wilck -Signed-off-by: Benjamin Marzinski ---- - .github/workflows/foreign.yaml | 4 ++-- - 1 file changed, 2 insertions(+), 2 deletions(-) - -diff --git a/.github/workflows/foreign.yaml b/.github/workflows/foreign.yaml -index 32915186..f6e69709 100644 ---- a/.github/workflows/foreign.yaml -+++ b/.github/workflows/foreign.yaml -@@ -13,7 +13,7 @@ jobs: - runs-on: ubuntu-20.04 - strategy: - matrix: -- os: [buster] -+ os: [bullseye] - arch: ['ppc64le', 'aarch64', 's390x'] - container: mwilck/multipath-build-${{ matrix.os }}-${{ matrix.arch }} - steps: -@@ -44,7 +44,7 @@ jobs: - needs: build - strategy: - matrix: -- os: [buster] -+ os: [bullseye] - arch: ['ppc64le', 'aarch64', 's390x'] - steps: - - name: get binaries diff --git a/0052-RH-make-parse_vpd_pg83-match-scsi_id-output.patch b/0042-RH-make-parse_vpd_pg83-match-scsi_id-output.patch similarity index 94% rename from 0052-RH-make-parse_vpd_pg83-match-scsi_id-output.patch rename to 0042-RH-make-parse_vpd_pg83-match-scsi_id-output.patch index 604ff75..5812a54 100644 --- a/0052-RH-make-parse_vpd_pg83-match-scsi_id-output.patch +++ b/0042-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 15560f8c..2339c9a9 100644 +index f3fccedd..c883fd02 100644 --- a/libmultipath/discovery.c +++ b/libmultipath/discovery.c -@@ -1175,13 +1175,9 @@ parse_vpd_pg83(const unsigned char *in, size_t in_len, +@@ -1176,13 +1176,9 @@ parse_vpd_pg83(const unsigned char *in, size_t in_len, good_len = 8; break; case 2: @@ -33,7 +33,7 @@ index 15560f8c..2339c9a9 100644 good_len = 8; break; default: -@@ -1199,10 +1195,6 @@ parse_vpd_pg83(const unsigned char *in, size_t in_len, +@@ -1200,10 +1196,6 @@ parse_vpd_pg83(const unsigned char *in, size_t in_len, break; case 0x8: /* SCSI Name: Prio 3 */ diff --git a/0053-RH-add-scsi-device-handlers-to-modules-load.d.patch b/0043-RH-add-scsi-device-handlers-to-modules-load.d.patch similarity index 92% rename from 0053-RH-add-scsi-device-handlers-to-modules-load.d.patch rename to 0043-RH-add-scsi-device-handlers-to-modules-load.d.patch index 423f107..72fbfe8 100644 --- a/0053-RH-add-scsi-device-handlers-to-modules-load.d.patch +++ b/0043-RH-add-scsi-device-handlers-to-modules-load.d.patch @@ -11,10 +11,10 @@ Signed-off-by: Benjamin Marzinski 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Makefile.inc b/Makefile.inc -index 2cf6e85f..7277cf5f 100644 +index e6e7f7d7..15f0b9f6 100644 --- a/Makefile.inc +++ b/Makefile.inc -@@ -16,7 +16,7 @@ READLINE = libedit +@@ -16,7 +16,7 @@ READLINE := # List of scsi device handler modules to load on boot, e.g. # SCSI_DH_MODULES_PRELOAD := scsi_dh_alua scsi_dh_rdac diff --git a/0043-RH-fixup-udev-rules-for-redhat.patch b/0043-RH-fixup-udev-rules-for-redhat.patch deleted file mode 100644 index 47a1ab2..0000000 --- a/0043-RH-fixup-udev-rules-for-redhat.patch +++ /dev/null @@ -1,63 +0,0 @@ -From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 -From: Benjamin Marzinski -Date: Thu, 13 Apr 2017 07:22:23 -0500 -Subject: [PATCH] RH: fixup udev rules for redhat - -The multipath rules need to run after scsi_id is run. This means moving -them after 60-persistent-storage.rules for redhat. Redhat also uses a -different naming scheme for partitions than SuSE. - -Signed-off-by: Benjamin Marzinski ---- - Makefile.inc | 2 +- - kpartx/kpartx.rules | 2 +- - multipath/Makefile | 4 ++-- - 3 files changed, 4 insertions(+), 4 deletions(-) - -diff --git a/Makefile.inc b/Makefile.inc -index ad7afd04..03450610 100644 ---- a/Makefile.inc -+++ b/Makefile.inc -@@ -81,7 +81,7 @@ endif - prefix = - exec_prefix = $(prefix) - usr_prefix = $(prefix) --bindir = $(exec_prefix)/sbin -+bindir = $(exec_prefix)/usr/sbin - libudevdir = $(prefix)/$(SYSTEMDPATH)/udev - udevrulesdir = $(libudevdir)/rules.d - modulesloaddir = $(prefix)/$(SYSTEMDPATH)/modules-load.d -diff --git a/kpartx/kpartx.rules b/kpartx/kpartx.rules -index 1969dee0..d2b28233 100644 ---- a/kpartx/kpartx.rules -+++ b/kpartx/kpartx.rules -@@ -39,6 +39,6 @@ LABEL="mpath_kpartx_end" - GOTO="kpartx_end" - - LABEL="run_kpartx" --RUN+="/sbin/kpartx -un -p -part /dev/$name" -+RUN+="/sbin/kpartx -un /dev/$name" - - LABEL="kpartx_end" -diff --git a/multipath/Makefile b/multipath/Makefile -index bcb04533..d2b3fd82 100644 ---- a/multipath/Makefile -+++ b/multipath/Makefile -@@ -23,7 +23,7 @@ install: - $(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 $(EXEC).rules $(DESTDIR)$(udevrulesdir)/56-multipath.rules -+ $(INSTALL_PROGRAM) -m 644 $(EXEC).rules $(DESTDIR)$(udevrulesdir)/62-multipath.rules - $(INSTALL_PROGRAM) -d $(DESTDIR)$(modulesloaddir) - $(INSTALL_PROGRAM) -m 644 modules-load.conf $(DESTDIR)$(modulesloaddir)/multipath.conf - $(INSTALL_PROGRAM) -d $(DESTDIR)$(man8dir) -@@ -41,7 +41,7 @@ uninstall: - $(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)$(libudevdir)/rules.d/62-multipath.rules - $(RM) $(DESTDIR)$(man8dir)/$(EXEC).8 - $(RM) $(DESTDIR)$(man5dir)/$(EXEC).conf.5 - diff --git a/0044-RH-compile-with-libreadline-support.patch b/0044-RH-compile-with-libreadline-support.patch new file mode 100644 index 0000000..b6d59f5 --- /dev/null +++ b/0044-RH-compile-with-libreadline-support.patch @@ -0,0 +1,26 @@ +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 +From: Benjamin Marzinski +Date: Tue, 15 Nov 2022 18:03:33 -0600 +Subject: [PATCH] RH: compile with libreadline support + +Since the license issue has been resolved, and there are problems with +the command completion with libedit, use libreadline. + +Signed-off-by: Benjamin Marzinski +--- + Makefile.inc | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/Makefile.inc b/Makefile.inc +index 15f0b9f6..881c1d52 100644 +--- a/Makefile.inc ++++ b/Makefile.inc +@@ -12,7 +12,7 @@ + # Readline library to use, libedit, libreadline, or empty + # Caution: Using libreadline may make the multipathd binary undistributable, + # see https://github.com/opensvc/multipath-tools/issues/36 +-READLINE := ++READLINE := libreadline + + # List of scsi device handler modules to load on boot, e.g. + # SCSI_DH_MODULES_PRELOAD := scsi_dh_alua scsi_dh_rdac diff --git a/device-mapper-multipath.spec b/device-mapper-multipath.spec index f140e00..8a6b8e5 100644 --- a/device-mapper-multipath.spec +++ b/device-mapper-multipath.spec @@ -1,75 +1,66 @@ Name: device-mapper-multipath -Version: 0.9.0 -Release: 3%{?dist} +Version: 0.9.3 +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.0.tar.gz -o multipath-tools-0.9.0.tgz -Source0: multipath-tools-0.9.0.tgz +# 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 Source1: multipath.conf -Patch0001: 0001-github-workflows-switch-to-fedora-36.patch -Patch0002: 0002-multipath-tools-fix-multipath-ll-bug-for-Native-NVME.patch -Patch0003: 0003-multipath-tools-update-Huawei-OceanStor-NVMe-vendor-.patch -Patch0004: 0004-multipath-tools-update-Generic-NVMe-vendor-regex-in-.patch -Patch0005: 0005-libmultipath-fix-find_multipaths_timeout-for-unknown.patch -Patch0006: 0006-multipath-tools-update-devel-repo-info-in-README.md.patch -Patch0007: 0007-multipath-tools-delete-README.alua.patch -Patch0008: 0008-multipath-tools-add-ALUA-info-to-README.md.patch -Patch0009: 0009-libmultipath-alua-remove-get_sysfs_pg83.patch -Patch0010: 0010-libmultipath-remove-sysfs_get_binary.patch -Patch0011: 0011-libmultipath-sysfs_bin_attr_get_value-no-error-if-bu.patch -Patch0012: 0012-libmultipath-common-code-path-for-sysfs_attr_get_val.patch -Patch0013: 0013-libmultipath-sanitize-error-checking-in-sysfs-access.patch -Patch0014: 0014-libmultipath-get-rid-of-PATH_SIZE.patch -Patch0015: 0015-libmultipath-sysfs_attr_get_value-don-t-return-0-if-.patch -Patch0016: 0016-libmultipath-sysfs_attr_set_value-don-t-return-0-on-.patch -Patch0017: 0017-libmultipath-sysfs-cleanup-file-descriptors-on-pthre.patch -Patch0018: 0018-libmultipath-multipathd-log-failure-setting-sysfs-at.patch -Patch0019: 0019-multipath-tests-expect_condlog-skip-depending-on-ver.patch -Patch0020: 0020-multipath-tests-__wrap_dlog-print-log-message.patch -Patch0021: 0021-multipath-tests-add-sysfs-test.patch -Patch0022: 0022-libmultipath.version-bump-version-for-sysfs-accessor.patch -Patch0023: 0023-libmultipath-unset-detect_checker-for-clariion-Unity.patch -Patch0024: 0024-libmultipath-spelling-cplusplus.patch -Patch0025: 0025-libmultipath-spelling-ascii.patch -Patch0026: 0026-libmultipath-spelling-progress.patch -Patch0027: 0027-multipath-tools-spelling-fixes.patch -Patch0028: 0028-multipath-tools-remove-list-of-rebranded-arrays-vend.patch -Patch0029: 0029-multipath-tools-correct-CLARiiON-info-from-multipath.patch -Patch0030: 0030-multipath-tools-add-basic-info-on-how-to-use-multipa.patch -Patch0031: 0031-multipathd-factor-out-the-code-to-flush-a-map-with-n.patch -Patch0032: 0032-libmultipath-return-success-if-we-raced-to-remove-a-.patch -Patch0033: 0033-multipathd-Handle-losing-all-path-in-update_map.patch -Patch0034: 0034-multipath-fix-systemd-timers-in-the-initramfs.patch -Patch0035: 0035-multipathd-Add-missing-ctype-include.patch -Patch0036: 0036-multipathd-replace-libreadline-with-libedit.patch -Patch0037: 0037-libmultipath-convert-license-of-strbuf-code-to-GPL-2.patch -Patch0038: 0038-github-workflows-build-and-unittest.yaml-add-libedit.patch -Patch0039: 0039-github-workflows-coverity.yaml-add-libedit-dev.patch -Patch0040: 0040-github-workflows-abi.yaml-add-libedit-dev.patch -Patch0041: 0041-GitHub-workflows-native.yaml-add-libedit-dev-except-.patch -Patch0042: 0042-GitHub-workflows-foreign.yaml-switch-to-Debian-11-bu.patch -Patch0043: 0043-RH-fixup-udev-rules-for-redhat.patch -Patch0044: 0044-RH-Remove-the-property-blacklist-exception-builtin.patch -Patch0045: 0045-RH-don-t-start-without-a-config-file.patch -Patch0046: 0046-RH-Fix-nvme-function-missing-argument.patch -Patch0047: 0047-RH-use-rpm-optflags-if-present.patch -Patch0048: 0048-RH-add-mpathconf.patch -Patch0049: 0049-RH-add-wwids-from-kernel-cmdline-mpath.wwids-with-A.patch -Patch0050: 0050-RH-reset-default-find_mutipaths-value-to-off.patch -Patch0051: 0051-RH-attempt-to-get-ANA-info-via-sysfs-first.patch -Patch0052: 0052-RH-make-parse_vpd_pg83-match-scsi_id-output.patch -Patch0053: 0053-RH-add-scsi-device-handlers-to-modules-load.d.patch +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 # runtime Requires: %{name}-libs = %{version}-%{release} Requires: kpartx = %{version}-%{release} Requires: device-mapper >= 1.02.96 Requires: userspace-rcu -Requires: libedit +Requires: readline Requires(post): systemd-units Requires(preun): systemd-units Requires(postun): systemd-units @@ -87,7 +78,7 @@ Conflicts: udisks2 < 2.8.0-2 # build/setup BuildRequires: libaio-devel, device-mapper-devel >= 1.02.89 BuildRequires: libselinux-devel, libsepol-devel -BuildRequires: libedit-devel, ncurses-devel +BuildRequires: readline-devel, ncurses-devel BuildRequires: systemd-units, systemd-devel BuildRequires: json-c-devel, perl-interpreter, pkgconfig, gcc BuildRequires: userspace-rcu-devel @@ -147,7 +138,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.0 -p1 +%autosetup -n multipath-tools-0.9.3 -p1 cp %{SOURCE1} . %build @@ -162,11 +153,12 @@ cp %{SOURCE1} . bindir=%{_sbindir} \ syslibdir=%{_libdir} \ usrlibdir=%{_libdir} \ - libdir=%{_libmpathdir} \ - rcdir=%{_initrddir} \ + plugindir=%{_libmpathdir} \ + mandir=%{_mandir} \ unitdir=%{_unitdir} \ includedir=%{_includedir} \ - pkgconfdir=%{_pkgconfdir} + pkgconfdir=%{_pkgconfdir} \ + tmpfilesdir=%{_tmpfilesdir} # tree fix up install -d %{buildroot}/etc/multipath @@ -191,32 +183,37 @@ fi /bin/systemctl --quiet is-enabled multipathd.service >/dev/null 2>&1 && /bin/systemctl reenable multipathd.service ||: %files -%license LICENSES/GPL-2.0 LICENSES/LGPL-2.0 +%license LICENSES/GPL-2.0 LICENSES/LGPL-2.0 LICENSES/GPL-3.0 %{_sbindir}/multipath %{_sbindir}/multipathd +%{_sbindir}/multipathc %{_sbindir}/mpathconf %{_sbindir}/mpathpersist %{_unitdir}/multipathd.service %{_unitdir}/multipathd.socket -%{_mandir}/man5/multipath.conf.5.gz -%{_mandir}/man8/multipath.8.gz -%{_mandir}/man8/multipathd.8.gz -%{_mandir}/man8/mpathconf.8.gz -%{_mandir}/man8/mpathpersist.8.gz +%{_mandir}/man5/multipath.conf.5* +%{_mandir}/man8/multipath.8* +%{_mandir}/man8/multipathd.8* +%{_mandir}/man8/multipathc.8* +%{_mandir}/man8/mpathconf.8* +%{_mandir}/man8/mpathpersist.8* %config /usr/lib/udev/rules.d/62-multipath.rules %config /usr/lib/udev/rules.d/11-dm-mpath.rules %dir /usr/lib/modules-load.d /usr/lib/modules-load.d/multipath.conf /usr/lib/modules-load.d/scsi_dh.conf +%{_tmpfilesdir}/multipath.conf %doc README.md %doc multipath.conf %dir /etc/multipath %files libs -%license LICENSES/GPL-2.0 LICENSES/LGPL-2.0 +%license LICENSES/GPL-2.0 LICENSES/LGPL-2.0 LICENSES/LGPL-2.1 %doc README.md %{_libdir}/libmultipath.so %{_libdir}/libmultipath.so.* +%{_libdir}/libmpathutil.so +%{_libdir}/libmpathutil.so.* %{_libdir}/libmpathpersist.so.* %{_libdir}/libmpathcmd.so.* %{_libdir}/libmpathvalid.so.* @@ -233,15 +230,15 @@ fi %{_includedir}/mpath_cmd.h %{_includedir}/mpath_persist.h %{_includedir}/mpath_valid.h -%{_mandir}/man3/mpath_persistent_reserve_in.3.gz -%{_mandir}/man3/mpath_persistent_reserve_out.3.gz +%{_mandir}/man3/mpath_persistent_reserve_in.3* +%{_mandir}/man3/mpath_persistent_reserve_out.3* %files -n kpartx %license LICENSES/GPL-2.0 %doc README.md %{_sbindir}/kpartx /usr/lib/udev/kpartx_id -%{_mandir}/man8/kpartx.8.gz +%{_mandir}/man8/kpartx.8* %config /usr/lib/udev/rules.d/11-dm-parts.rules %config /usr/lib/udev/rules.d/66-kpartx.rules %config /usr/lib/udev/rules.d/68-del-part-nodes.rules @@ -259,10 +256,24 @@ fi %dir %{_includedir}/libdmmp %{_includedir}/libdmmp/* %{_mandir}/man3/dmmp_* -%{_mandir}/man3/libdmmp.h.3.gz +%{_mandir}/man3/libdmmp.h.3* %{_pkgconfdir}/libdmmp.pc %changelog +* Tue Nov 15 2022 Benjamin Marzinski - 0.9.3-1 +- Update to the head of the upstream staging branch + * Previous patches 0001-0042 are included in the source tarball + * Patches 0001-0032 are from the upstream staging branch +- Rename redhat patches + * Previous patches 0043-0053 are now patches 0033-0043 +- Change back to using readline instead of libedit + * The code the uses readline has been isolated from the code that + is licensed gpl v2 only. +- Add libmpathutil libraries to spec file +- Add multipathc program to spec file +- Add multipath.conf systemd tempfile configuration to spec file +- Misc spec file cleanups + * Fri Aug 19 2022 Benjamin Marzinski - 0.9.0-3 - Update to the head of the upstream staging branch * Patches 0005-0042 are from the upstream staging branch diff --git a/sources b/sources index 14c7342..0394f4e 100644 --- a/sources +++ b/sources @@ -1,2 +1,2 @@ -SHA512 (multipath-tools-0.9.0.tgz) = 6c417f6d1d116fa43bedb9f77769ece9cbb7b35b78a9b3558c41df2360e52a65a07314b12ab7e4a7bbc867b9755250de9db96a2f7eb4a6a37f0b0b3f0bbc840e +SHA512 (multipath-tools-0.9.3.tgz) = 4faa2ee5a96a9d5d752219931ebc885cb70ed6b022d45ede985ad7919c043a3aee166e6f126d32dffd187c5c32d5cbce91747d87d0b55557e2f7f68b279583da SHA512 (multipath.conf) = 71953dce5a68adcf60a942305f5a66023e6f4c4baf53b1bfdb4edf65ed5b8e03db804363c36d1dcfd85591f4766f52b515269904c53b84d7b076da0b80b09942