diff --git a/.gitignore b/.gitignore index 03e544c..d5360ef 100644 --- a/.gitignore +++ b/.gitignore @@ -23,3 +23,4 @@ multipath-tools-091027.tar.gz /multipath-tools-0.8.5.tgz /multipath-tools-0.8.6.tgz /multipath-tools-0.8.7.tgz +/multipath-tools-0.8.9.tgz diff --git a/0001-multipath-tools-add-info-about-IO-affinity-path-sele.patch b/0001-multipath-tools-add-info-about-IO-affinity-path-sele.patch deleted file mode 100644 index 559d5a5..0000000 --- a/0001-multipath-tools-add-info-about-IO-affinity-path-sele.patch +++ /dev/null @@ -1,45 +0,0 @@ -From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 -From: Xose Vazquez Perez -Date: Wed, 8 Sep 2021 22:33:54 +0200 -Subject: [PATCH] multipath-tools: add info about IO affinity path selector to - manpage - -Added in 5.11: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=e4d2e82b2300b03f66b3ca8417590c86e661fab1 - -Cc: Mike Christie -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, 5 insertions(+), 1 deletion(-) - -diff --git a/multipath/multipath.conf.5 b/multipath/multipath.conf.5 -index d6b8c7f6..42a15ffd 100644 ---- a/multipath/multipath.conf.5 -+++ b/multipath/multipath.conf.5 -@@ -6,7 +6,7 @@ - .\" - .\" ---------------------------------------------------------------------------- - . --.TH MULTIPATH.CONF 5 2018-05-21 Linux -+.TH MULTIPATH.CONF 5 2021-09-08 Linux - . - . - .\" ---------------------------------------------------------------------------- -@@ -210,6 +210,10 @@ of outstanding I/O to the path and its relative throughput. - estimation of future service time based on the history of previous I/O submitted - to each path. - .TP -+.I "io-affinity 0" -+(Since 5.11 kernel) Choose the path for the next bunch of I/O based on a CPU to -+path mapping the user passes in and what CPU we are executing on. -+.TP - The default is: \fBservice-time 0\fR - .RE - . diff --git a/0001-multipath-tools-identify-more-arrays-under-IBM-2145-.patch b/0001-multipath-tools-identify-more-arrays-under-IBM-2145-.patch new file mode 100644 index 0000000..c34345e --- /dev/null +++ b/0001-multipath-tools-identify-more-arrays-under-IBM-2145-.patch @@ -0,0 +1,29 @@ +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 +From: Xose Vazquez Perez +Date: Thu, 24 Feb 2022 22:06:08 +0100 +Subject: [PATCH] multipath-tools: identify more arrays under IBM/2145 ID + +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 +--- + libmultipath/hwtable.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/libmultipath/hwtable.c b/libmultipath/hwtable.c +index bd157103..643caa32 100644 +--- a/libmultipath/hwtable.c ++++ b/libmultipath/hwtable.c +@@ -665,7 +665,7 @@ static struct hwentry default_hw[] = { + }, + { + // Storwize V5000 and V7000 lines / SAN Volume Controller (SVC) / Flex System V7000 / +- // FlashSystem V840/V9000/5000/5100/5200/7200/9100/9200/9200R ++ // FlashSystem V840/V9000/5000/5100/5200/7200/7300/9100/9200/9200R/9500 + .vendor = "IBM", + .product = "^2145", + .no_path_retry = NO_PATH_RETRY_QUEUE, diff --git a/0002-multipath-tools-add-HPE-as-vendor-for-OPEN-XP8-array.patch b/0002-multipath-tools-add-HPE-as-vendor-for-OPEN-XP8-array.patch new file mode 100644 index 0000000..7df0d4b --- /dev/null +++ b/0002-multipath-tools-add-HPE-as-vendor-for-OPEN-XP8-array.patch @@ -0,0 +1,32 @@ +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 +From: Xose Vazquez Perez +Date: Thu, 24 Feb 2022 22:23:34 +0100 +Subject: [PATCH] multipath-tools: add HPE as vendor for OPEN- (XP8 arrays) + +Cc: Matthias Rudolph +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 +--- + libmultipath/hwtable.c | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +diff --git a/libmultipath/hwtable.c b/libmultipath/hwtable.c +index 643caa32..3b9e0e0f 100644 +--- a/libmultipath/hwtable.c ++++ b/libmultipath/hwtable.c +@@ -467,8 +467,8 @@ static struct hwentry default_hw[] = { + * Maintainer: Matthias Rudolph + */ + { +- /* USP-V, HUS VM, VSP, VSP G1X00 and VSP GX00 families / HP XP */ +- .vendor = "(HITACHI|HP)", ++ /* USP-V, HUS VM, VSP, VSP G1X00 and VSP GX00 families / HPE XP */ ++ .vendor = "(HITACHI|HP|HPE)", + .product = "^OPEN-", + .pgpolicy = MULTIBUS, + }, diff --git a/0002-multipathd-fix-missing-persistent-reseravtion-for-ac.patch b/0002-multipathd-fix-missing-persistent-reseravtion-for-ac.patch deleted file mode 100644 index 5312160..0000000 --- a/0002-multipathd-fix-missing-persistent-reseravtion-for-ac.patch +++ /dev/null @@ -1,52 +0,0 @@ -From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 -From: lixiaokeng -Date: Mon, 13 Sep 2021 10:43:14 +0800 -Subject: [PATCH] multipathd: fix missing persistent reseravtion for active - path - -There are two paths(sucu as sda and adb) for one LUN. The two -paths log in, but before the two uevents have been processed -(for example there are many uevent), users use multipathd add -path /dev/sda to cause mpatha and use mpathpersist -o -I to -register prkey for mpatha. The add map uevent is after add path -uevent, the the uevent(add sdb) will delay and missing persistent -reseravtion check. - -Here, we add persistent reseravtion check in update_map() which -is called ev_add_map(). - -Signed-off-by: Lixiaokeng -Signed-off-by: Benjamin Marzinski ---- - multipathd/main.c | 11 +++++++++++ - 1 file changed, 11 insertions(+) - -diff --git a/multipathd/main.c b/multipathd/main.c -index 3aff241d..1defeaf1 100644 ---- a/multipathd/main.c -+++ b/multipathd/main.c -@@ -490,6 +490,8 @@ update_map (struct multipath *mpp, struct vectors *vecs, int new_map) - { - int retries = 3; - char *params __attribute__((cleanup(cleanup_charp))) = NULL; -+ struct path *pp; -+ int i; - - retry: - condlog(4, "%s: updating new map", mpp->alias); -@@ -502,6 +504,15 @@ retry: - verify_paths(mpp); - mpp->action = ACT_RELOAD; - -+ if (mpp->prflag) { -+ vector_foreach_slot(mpp->paths, pp, i) { -+ if ((pp->state == PATH_UP) || (pp->state == PATH_GHOST)) { -+ /* persistent reseravtion check*/ -+ mpath_pr_event_handle(pp); -+ } -+ } -+ } -+ - if (setup_map(mpp, ¶ms, vecs)) { - condlog(0, "%s: failed to setup new map in update", mpp->alias); - retries = -1; diff --git a/0010-multipath-tools-remove-Compellent-maintainer.patch b/0003-multipath-tools-add-HP-HSVX740-to-hwtable.patch similarity index 51% rename from 0010-multipath-tools-remove-Compellent-maintainer.patch rename to 0003-multipath-tools-add-HP-HSVX740-to-hwtable.patch index f8e9cc0..b950020 100644 --- a/0010-multipath-tools-remove-Compellent-maintainer.patch +++ b/0003-multipath-tools-add-HP-HSVX740-to-hwtable.patch @@ -1,9 +1,9 @@ From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 From: Xose Vazquez Perez -Date: Tue, 28 Sep 2021 22:39:17 +0200 -Subject: [PATCH] multipath-tools: remove Compellent maintainer +Date: Thu, 24 Feb 2022 22:24:39 +0100 +Subject: [PATCH] multipath-tools: add HP/HSVX740 to hwtable -e-mail was bounced: 550 5.1.1 User Unknown +Info from: https://community.hpe.com/hpeb/attachments/hpeb/itrc-248/61618/1/HP_DM_MP_Guide.pdf Cc: Martin Wilck Cc: Benjamin Marzinski @@ -13,23 +13,19 @@ Signed-off-by: Xose Vazquez Perez Reviewed-by: Martin Wilck Signed-off-by: Benjamin Marzinski --- - libmultipath/hwtable.c | 6 +----- - 1 file changed, 1 insertion(+), 5 deletions(-) + libmultipath/hwtable.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libmultipath/hwtable.c b/libmultipath/hwtable.c -index 7fc5bc04..763982cd 100644 +index 3b9e0e0f..ff8ed036 100644 --- a/libmultipath/hwtable.c +++ b/libmultipath/hwtable.c -@@ -361,11 +361,7 @@ static struct hwentry default_hw[] = { - .pgpolicy = MULTIBUS, - }, +@@ -192,7 +192,7 @@ static struct hwentry default_hw[] = { { -- /* -- * SC Series, formerly Compellent -- * -- * Maintainer: Sean McGinnis -- */ -+ /* SC Series, formerly Compellent */ - .vendor = "COMPELNT", - .product = "Compellent Vol", + /* SAN Virtualization Services Platform */ + .vendor = "HP", +- .product = "HSVX700", ++ .product = "(HSVX700|HSVX740)", + .hwhandler = "1 alua", .pgpolicy = GROUP_BY_PRIO, + .pgfailback = -FAILBACK_IMMEDIATE, diff --git a/0003-multipath-tools-minor-fixes-to-multipath.conf.5-man-.patch b/0003-multipath-tools-minor-fixes-to-multipath.conf.5-man-.patch deleted file mode 100644 index ddad7b0..0000000 --- a/0003-multipath-tools-minor-fixes-to-multipath.conf.5-man-.patch +++ /dev/null @@ -1,48 +0,0 @@ -From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 -From: Xose Vazquez Perez -Date: Thu, 16 Sep 2021 00:44:49 +0200 -Subject: [PATCH] multipath-tools: minor fixes to multipath.conf.5 man page - -Cc: Martin Wilck -Cc: Benjamin Marzinski -Cc: Christophe Varoqui -Cc: DM-DEVEL ML -Signed-off-by: Xose Vazquez Perez -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 42a15ffd..c74129bd 100644 ---- a/multipath/multipath.conf.5 -+++ b/multipath/multipath.conf.5 -@@ -1,9 +1,9 @@ - .\" ---------------------------------------------------------------------------- --.\" Update the date below if you make any significant change. - .\" Make sure there are no errors with: - .\" groff -z -wall -b -e -t multipath/multipath.conf.5 - .\" man --warnings -E UTF-8 -l -Tutf8 -Z multipath/multipath.conf.5 >/dev/null - .\" -+.\" Update the date below if you make any significant change. - .\" ---------------------------------------------------------------------------- - . - .TH MULTIPATH.CONF 5 2021-09-08 Linux -@@ -189,7 +189,7 @@ The default is: \fB\fR - .TP - .B path_selector - The default path selector algorithm to use; they are offered by the --kernel multipath target. There are three selector algorithms: -+kernel multipath target: - .RS - .TP 12 - .I "round-robin 0" -@@ -206,7 +206,7 @@ of outstanding I/O to the path. - of outstanding I/O to the path and its relative throughput. - .TP - .I "historical-service-time 0" --(Since 5.8 kernel) Choose the path for the next bunch of IOs based on the -+(Since 5.8 kernel) Choose the path for the next bunch of I/O based on the - estimation of future service time based on the history of previous I/O submitted - to each path. - .TP diff --git a/0004-multipath-tools-add-DellEMC-ME5-PowerVault-ME5-to-ha.patch b/0004-multipath-tools-add-DellEMC-ME5-PowerVault-ME5-to-ha.patch new file mode 100644 index 0000000..8834238 --- /dev/null +++ b/0004-multipath-tools-add-DellEMC-ME5-PowerVault-ME5-to-ha.patch @@ -0,0 +1,37 @@ +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 +From: Xose Vazquez Perez +Date: Wed, 23 Feb 2022 23:16:44 +0100 +Subject: [PATCH] multipath-tools: add DellEMC/ME5 (PowerVault ME5) to hardware + table + +Convert PowerVault ME4 template for all ME series. + +[MW] https://dl.dell.com/content/manual51886263-dell-powervault-me5-series-administrator's-guide.pdf + +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 +--- + libmultipath/hwtable.c | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +diff --git a/libmultipath/hwtable.c b/libmultipath/hwtable.c +index ff8ed036..0e1c0a41 100644 +--- a/libmultipath/hwtable.c ++++ b/libmultipath/hwtable.c +@@ -397,9 +397,9 @@ static struct hwentry default_hw[] = { + .fast_io_fail = 15, + }, + { +- /* PowerVault ME4 */ ++ /* PowerVault ME 4/5 families */ + .vendor = "DellEMC", +- .product = "ME4", ++ .product = "^ME", + .pgpolicy = GROUP_BY_PRIO, + .prio_name = PRIO_ALUA, + .hwhandler = "1 alua", diff --git a/0004-multipath-tools-make-IBM-XIV-config-work-with-alua-a.patch b/0004-multipath-tools-make-IBM-XIV-config-work-with-alua-a.patch deleted file mode 100644 index da06d58..0000000 --- a/0004-multipath-tools-make-IBM-XIV-config-work-with-alua-a.patch +++ /dev/null @@ -1,39 +0,0 @@ -From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 -From: Xose Vazquez Perez -Date: Sat, 25 Sep 2021 00:27:36 +0200 -Subject: [PATCH] multipath-tools: make IBM/XIV config work with alua and - multibus - -And add recommended pgfailback value. - -ALUA is supported since XIV_Gen2 and microcode 10.2.1 -(All ports across all controllers in single Target Port Group) - -https://www.ibm.com/support/pages/ibm-flashsystem%C2%AE-a9000-and-a9000r-hyperswap-solution-deployment-linux%C2%AE-ibm-z-systems%C2%AE -https://www.google.com/search?q=%222810XIV%22+%22path_grouping_policy%22+site%3Aibm.com - -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 ---- - libmultipath/hwtable.c | 3 ++- - 1 file changed, 2 insertions(+), 1 deletion(-) - -diff --git a/libmultipath/hwtable.c b/libmultipath/hwtable.c -index 0caac0da..72f81c60 100644 ---- a/libmultipath/hwtable.c -+++ b/libmultipath/hwtable.c -@@ -712,7 +712,8 @@ static struct hwentry default_hw[] = { - .vendor = "(XIV|IBM)", - .product = "(NEXTRA|2810XIV)", - .no_path_retry = NO_PATH_RETRY_QUEUE, -- .pgpolicy = MULTIBUS, -+ .pgpolicy = GROUP_BY_PRIO, -+ .pgfailback = 15, - }, - { - /* TMS RamSan / FlashSystem 710/720/810/820/840/900 */ diff --git a/0005-multipath-tools-update-mpp-force_readonly-in-ev_add_.patch b/0005-multipath-tools-update-mpp-force_readonly-in-ev_add_.patch new file mode 100644 index 0000000..a2538e4 --- /dev/null +++ b/0005-multipath-tools-update-mpp-force_readonly-in-ev_add_.patch @@ -0,0 +1,136 @@ +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 +From: Uday Shankar +Date: Wed, 9 Mar 2022 13:03:26 -0700 +Subject: [PATCH] multipath-tools: update mpp->force_readonly in ev_add_path + +When NVMe disks are added to the system, no uevent containing the +DISK_RO property is generated. As a result, dm-* nodes backed by +readonly NVMe disks will not have their RO state set properly. The +result looks like this: + +$ multipath -l +eui.00c92c091fd6564424a9376600011bd1 dm-3 NVME,Pure Storage FlashArray +size=1.0T features='0' hwhandler='0' wp=rw +|-+- policy='service-time 0' prio=0 status=active +| `- 0:2:2:72657 nvme0n2 259:4 active undef running +`-+- policy='service-time 0' prio=0 status=enabled + `- 1:0:2:72657 nvme1n2 259:1 active undef running +$ cat /sys/block/dm-3/ro +0 +$ cat /sys/block/nvme*n2/ro +1 +1 + +This is not a problem for SCSI disks, since the kernel will emit change +uevents containing the DISK_RO property when the disk is added to the +system. See the following thread for my initial attempt to fix this +issue at the kernel level: +https://lore.kernel.org/linux-block/Yib8GqCA5e3SQYty@infradead.org/T/#t + +Fix the issue by picking up the path ro state from sysfs in ev_add_path, +setting the mpp->force_readonly accordingly, and changing +dm_addmap_create to be aware of mpp->force_readonly. + +Signed-off-by: Uday Shankar +Reviewed-by: Benjamin Marzinski +Signed-off-by: Benjamin Marzinski +--- + libmultipath/devmapper.c | 2 +- + multipathd/main.c | 50 ++++++++++++++++++++++------------------ + 2 files changed, 29 insertions(+), 23 deletions(-) + +diff --git a/libmultipath/devmapper.c b/libmultipath/devmapper.c +index 2507f77f..9819e29b 100644 +--- a/libmultipath/devmapper.c ++++ b/libmultipath/devmapper.c +@@ -540,7 +540,7 @@ int dm_addmap_create (struct multipath *mpp, char * params) + int ro; + uint16_t udev_flags = build_udev_flags(mpp, 0); + +- for (ro = 0; ro <= 1; ro++) { ++ for (ro = mpp->force_readonly ? 1 : 0; ro <= 1; ro++) { + int err; + + if (dm_addmap(DM_DEVICE_CREATE, TGT_MPATH, mpp, params, ro, +diff --git a/multipathd/main.c b/multipathd/main.c +index f2c0b280..a67865df 100644 +--- a/multipathd/main.c ++++ b/multipathd/main.c +@@ -1130,6 +1130,28 @@ out: + return ret; + } + ++static int ++sysfs_get_ro (struct path *pp) ++{ ++ int ro; ++ char buff[3]; /* Either "0\n\0" or "1\n\0" */ ++ ++ if (!pp->udev) ++ return -1; ++ ++ if (sysfs_attr_get_value(pp->udev, "ro", buff, sizeof(buff)) <= 0) { ++ condlog(3, "%s: Cannot read ro attribute in sysfs", pp->dev); ++ return -1; ++ } ++ ++ if (sscanf(buff, "%d\n", &ro) != 1 || ro < 0 || ro > 1) { ++ condlog(3, "%s: Cannot parse ro attribute", pp->dev); ++ return -1; ++ } ++ ++ return ro; ++} ++ + /* + * returns: + * 0: added +@@ -1143,6 +1165,7 @@ ev_add_path (struct path * pp, struct vectors * vecs, int need_do_map) + int retries = 3; + int start_waiter = 0; + int ret; ++ int ro; + + /* + * need path UID to go any further +@@ -1207,6 +1230,11 @@ rescan: + /* persistent reservation check*/ + mpath_pr_event_handle(pp); + ++ /* ro check - if new path is ro, force map to be ro as well */ ++ ro = sysfs_get_ro(pp); ++ if (ro == 1) ++ mpp->force_readonly = 1; ++ + if (!need_do_map) + return 0; + +@@ -1446,28 +1474,6 @@ finish_path_init(struct path *pp, struct vectors * vecs) + return -1; + } + +-static int +-sysfs_get_ro (struct path *pp) +-{ +- int ro; +- char buff[3]; /* Either "0\n\0" or "1\n\0" */ +- +- if (!pp->udev) +- return -1; +- +- if (sysfs_attr_get_value(pp->udev, "ro", buff, sizeof(buff)) <= 0) { +- condlog(3, "%s: Cannot read ro attribute in sysfs", pp->dev); +- return -1; +- } +- +- if (sscanf(buff, "%d\n", &ro) != 1 || ro < 0 || ro > 1) { +- condlog(3, "%s: Cannot parse ro attribute", pp->dev); +- return -1; +- } +- +- return ro; +-} +- + static bool + needs_ro_update(struct multipath *mpp, int ro) + { diff --git a/0005-multipathd.socket-add-missing-conditions-from-servic.patch b/0005-multipathd.socket-add-missing-conditions-from-servic.patch deleted file mode 100644 index e6b34a2..0000000 --- a/0005-multipathd.socket-add-missing-conditions-from-servic.patch +++ /dev/null @@ -1,32 +0,0 @@ -From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 -From: Luca BRUNO -Date: Fri, 24 Sep 2021 09:34:01 +0000 -Subject: [PATCH] multipathd.socket: add missing conditions from service unit - -This aligns 'multipathd' socket and service units, by adding the -start conditions that are set on the service but not on the socket. -It should help avoiding situations where the socket unit ends up -marked as failed after hitting its retry-limit. - -Fixes: https://github.com/opensvc/multipath-tools/issues/15 -Signed-off-by: Luca BRUNO -Reviewed-by: Martin Wilck -Signed-off-by: Benjamin Marzinski ---- - multipathd/multipathd.socket | 3 +++ - 1 file changed, 3 insertions(+) - -diff --git a/multipathd/multipathd.socket b/multipathd/multipathd.socket -index 0ed4a1f7..c777e5e3 100644 ---- a/multipathd/multipathd.socket -+++ b/multipathd/multipathd.socket -@@ -1,6 +1,9 @@ - [Unit] - Description=multipathd control socket - DefaultDependencies=no -+ConditionKernelCommandLine=!nompath -+ConditionKernelCommandLine=!multipath=off -+ConditionVirtualization=!container - Before=sockets.target - - [Socket] diff --git a/0025-RH-fixup-udev-rules-for-redhat.patch b/0006-RH-fixup-udev-rules-for-redhat.patch similarity index 67% rename from 0025-RH-fixup-udev-rules-for-redhat.patch rename to 0006-RH-fixup-udev-rules-for-redhat.patch index df4455e..6153d90 100644 --- a/0025-RH-fixup-udev-rules-for-redhat.patch +++ b/0006-RH-fixup-udev-rules-for-redhat.patch @@ -15,10 +15,10 @@ Signed-off-by: Benjamin Marzinski 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/Makefile.inc b/Makefile.inc -index d0ec9b44..2a75dc9c 100644 +index d24da43e..fb23635c 100644 --- a/Makefile.inc +++ b/Makefile.inc -@@ -55,7 +55,7 @@ endif +@@ -75,7 +75,7 @@ endif prefix = exec_prefix = $(prefix) usr_prefix = $(prefix) @@ -26,12 +26,12 @@ index d0ec9b44..2a75dc9c 100644 +bindir = $(exec_prefix)/usr/sbin libudevdir = $(prefix)/$(SYSTEMDPATH)/udev udevrulesdir = $(libudevdir)/rules.d - multipathdir = $(TOPDIR)/libmultipath + modulesloaddir = $(prefix)/$(SYSTEMDPATH)/modules-load.d diff --git a/kpartx/kpartx.rules b/kpartx/kpartx.rules -index d7527d7d..0e0d70d5 100644 +index 1969dee0..d2b28233 100644 --- a/kpartx/kpartx.rules +++ b/kpartx/kpartx.rules -@@ -36,6 +36,6 @@ LABEL="mpath_kpartx_end" +@@ -39,6 +39,6 @@ LABEL="mpath_kpartx_end" GOTO="kpartx_end" LABEL="run_kpartx" @@ -40,24 +40,24 @@ index d7527d7d..0e0d70d5 100644 LABEL="kpartx_end" diff --git a/multipath/Makefile b/multipath/Makefile -index 0828a8f7..b9bbb3cf 100644 +index c930499d..2059a4f4 100644 --- a/multipath/Makefile +++ b/multipath/Makefile -@@ -24,7 +24,7 @@ install: +@@ -22,7 +22,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)$(libudevdir)/rules.d/56-multipath.rules -+ $(INSTALL_PROGRAM) -m 644 $(EXEC).rules $(DESTDIR)$(libudevdir)/rules.d/62-multipath.rules +- $(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) - $(INSTALL_PROGRAM) -m 644 $(EXEC).8.gz $(DESTDIR)$(man8dir) - $(INSTALL_PROGRAM) -d $(DESTDIR)$(man5dir) -@@ -33,7 +33,7 @@ install: - uninstall: - $(RM) $(DESTDIR)$(bindir)/$(EXEC) +@@ -40,7 +40,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.gz - $(RM) $(DESTDIR)$(man5dir)/$(EXEC).conf.5.gz + $(RM) $(DESTDIR)$(man8dir)/$(EXEC).8 + $(RM) $(DESTDIR)$(man5dir)/$(EXEC).conf.5 diff --git a/0006-multipath-tools-make-IBM-2107900-DS8000-config-work-.patch b/0006-multipath-tools-make-IBM-2107900-DS8000-config-work-.patch deleted file mode 100644 index 97cc8ef..0000000 --- a/0006-multipath-tools-make-IBM-2107900-DS8000-config-work-.patch +++ /dev/null @@ -1,40 +0,0 @@ -From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 -From: Xose Vazquez Perez -Date: Tue, 28 Sep 2021 18:52:10 +0200 -Subject: [PATCH] multipath-tools: make IBM/2107900 (DS8000) config work with - alua and multibus - -ALUA is supported since the beginning: -https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/drivers/scsi/device_handler/scsi_dh_alua.c?id=057ea7c9683c3d684128cced796f03c179ecf1c2#n683 - -... the DS8000 is an Asymmetric Logical Unit Access (ALUA) capable storage array, -pag#160(144): https://www.redbooks.ibm.com/redbooks/pdfs/sg248887.pdf - -kernel log: -https://marc.info/?l=linux-scsi&m=156407413807511&q=mbox - -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 ---- - libmultipath/hwtable.c | 3 ++- - 1 file changed, 2 insertions(+), 1 deletion(-) - -diff --git a/libmultipath/hwtable.c b/libmultipath/hwtable.c -index 72f81c60..f115c4f9 100644 ---- a/libmultipath/hwtable.c -+++ b/libmultipath/hwtable.c -@@ -656,7 +656,8 @@ static struct hwentry default_hw[] = { - .vendor = "IBM", - .product = "^2107900", - .no_path_retry = NO_PATH_RETRY_QUEUE, -- .pgpolicy = MULTIBUS, -+ .pgpolicy = GROUP_BY_PRIO, -+ .pgfailback = -FAILBACK_IMMEDIATE, - }, - { - // Storwize V5000 and V7000 lines / SAN Volume Controller (SVC) / Flex System V7000 / diff --git a/0026-RH-Remove-the-property-blacklist-exception-builtin.patch b/0007-RH-Remove-the-property-blacklist-exception-builtin.patch similarity index 92% rename from 0026-RH-Remove-the-property-blacklist-exception-builtin.patch rename to 0007-RH-Remove-the-property-blacklist-exception-builtin.patch index 3bb4786..edc8dc1 100644 --- a/0026-RH-Remove-the-property-blacklist-exception-builtin.patch +++ b/0007-RH-Remove-the-property-blacklist-exception-builtin.patch @@ -19,10 +19,10 @@ Signed-off-by: Benjamin Marzinski 3 files changed, 10 insertions(+), 14 deletions(-) diff --git a/libmultipath/blacklist.c b/libmultipath/blacklist.c -index 4e315c97..1e463ef6 100644 +index 8d15d2ea..eff690fd 100644 --- a/libmultipath/blacklist.c +++ b/libmultipath/blacklist.c -@@ -202,9 +202,6 @@ setup_default_blist (struct config * conf) +@@ -201,9 +201,6 @@ setup_default_blist (struct config * conf) if (store_ble(conf->blist_devnode, "!^(sd[a-z]|dasd[a-z]|nvme[0-9])", ORIGIN_DEFAULT)) return 1; @@ -32,7 +32,7 @@ index 4e315c97..1e463ef6 100644 vector_foreach_slot (conf->hwtable, hwe, i) { if (hwe->bl_product) { if (find_blacklist_device(conf->blist_device, -@@ -410,7 +407,8 @@ filter_property(const struct config *conf, struct udev_device *udev, +@@ -409,7 +406,8 @@ filter_property(const struct config *conf, struct udev_device *udev, *uid_attribute != '\0'; bool uid_attr_seen = false; @@ -43,10 +43,10 @@ index 4e315c97..1e463ef6 100644 udev_device_get_properties_list_entry(udev)) { diff --git a/multipath/multipath.conf.5 b/multipath/multipath.conf.5 -index 88d2a1df..7f85f766 100644 +index 605b46e0..1844a250 100644 --- a/multipath/multipath.conf.5 +++ b/multipath/multipath.conf.5 -@@ -1356,9 +1356,14 @@ keywords. Both are regular expressions. For a full description of these keywords +@@ -1365,9 +1365,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 88d2a1df..7f85f766 100644 . .RS .PP -@@ -1369,10 +1374,6 @@ Blacklisting by missing properties is only applied to devices which do have the +@@ -1378,10 +1383,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/0007-multipath-tools-make-EMC-SYMMETRIX-config-work-with-.patch b/0007-multipath-tools-make-EMC-SYMMETRIX-config-work-with-.patch deleted file mode 100644 index 201232a..0000000 --- a/0007-multipath-tools-make-EMC-SYMMETRIX-config-work-with-.patch +++ /dev/null @@ -1,35 +0,0 @@ -From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 -From: Xose Vazquez Perez -Date: Tue, 28 Sep 2021 19:20:59 +0200 -Subject: [PATCH] multipath-tools: make EMC/SYMMETRIX config work with alua and - multibus - -ALUA is supported since VMAX3 and HYPERMAX OS 5977.811.784, pag#113: -https://www.delltechnologies.com/en-us/collaterals/unauth/technical-guides-support-information/products/storage-2/docu5128.pdf - -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 ---- - libmultipath/hwtable.c | 3 ++- - 1 file changed, 2 insertions(+), 1 deletion(-) - -diff --git a/libmultipath/hwtable.c b/libmultipath/hwtable.c -index f115c4f9..7095aaf1 100644 ---- a/libmultipath/hwtable.c -+++ b/libmultipath/hwtable.c -@@ -329,8 +329,9 @@ static struct hwentry default_hw[] = { - /* Symmetrix / DMX / VMAX / PowerMax */ - .vendor = "EMC", - .product = "SYMMETRIX", -- .pgpolicy = MULTIBUS, -+ .pgpolicy = GROUP_BY_PRIO, - .no_path_retry = 6, -+ .pgfailback = -FAILBACK_IMMEDIATE, - }, - { - /* DGC CLARiiON CX/AX / VNX and Unity */ diff --git a/0027-RH-don-t-start-without-a-config-file.patch b/0008-RH-don-t-start-without-a-config-file.patch similarity index 87% rename from 0027-RH-don-t-start-without-a-config-file.patch rename to 0008-RH-don-t-start-without-a-config-file.patch index 8061a99..82bf02f 100644 --- a/0027-RH-don-t-start-without-a-config-file.patch +++ b/0008-RH-don-t-start-without-a-config-file.patch @@ -21,10 +21,10 @@ Signed-off-by: Benjamin Marzinski 6 files changed, 19 insertions(+) diff --git a/libmultipath/config.c b/libmultipath/config.c -index 30046a17..5f35c3d3 100644 +index c595e768..b193de5c 100644 --- a/libmultipath/config.c +++ b/libmultipath/config.c -@@ -895,6 +895,19 @@ int _init_config (const char *file, struct config *conf) +@@ -894,6 +894,19 @@ int _init_config (const char *file, struct config *conf) goto out; } factorize_hwtable(conf->hwtable, builtin_hwtable_size, file); @@ -45,7 +45,7 @@ index 30046a17..5f35c3d3 100644 conf->processed_main_config = 1; diff --git a/libmultipath/config.h b/libmultipath/config.h -index 933fe0d1..5f01c1fc 100644 +index c73389b5..69a01cb7 100644 --- a/libmultipath/config.h +++ b/libmultipath/config.h @@ -9,6 +9,7 @@ @@ -69,7 +69,7 @@ index 9df11a95..0486bf70 100644 ENV{DEVTYPE}!="partition", GOTO="test_dev" IMPORT{parent}="DM_MULTIPATH_DEVICE_PATH" diff --git a/multipathd/multipathd.8 b/multipathd/multipathd.8 -index 048a838d..8bd47a80 100644 +index 1e318bdc..6aab9325 100644 --- a/multipathd/multipathd.8 +++ b/multipathd/multipathd.8 @@ -39,6 +39,8 @@ map regains its maximum performance and redundancy. @@ -82,17 +82,17 @@ index 048a838d..8bd47a80 100644 . .\" ---------------------------------------------------------------------------- diff --git a/multipathd/multipathd.service b/multipathd/multipathd.service -index 0b2ac814..6d57c7e8 100644 +index aec62dbb..d76f94f9 100644 --- a/multipathd/multipathd.service +++ b/multipathd/multipathd.service -@@ -4,6 +4,7 @@ Wants=systemd-udev-trigger.service systemd-udev-settle.service - Before=iscsi.service iscsid.service lvm2-activation-early.service - Before=local-fs-pre.target blk-availability.service shutdown.target - After=multipathd.socket systemd-udev-trigger.service systemd-udev-settle.service +@@ -6,6 +6,7 @@ Wants=systemd-udevd-kernel.socket + After=systemd-udevd-kernel.socket + After=multipathd.socket systemd-remount-fs.service + Before=initrd-cleanup.service +ConditionPathExists=/etc/multipath.conf DefaultDependencies=no Conflicts=shutdown.target - ConditionKernelCommandLine=!nompath + Conflicts=initrd-cleanup.service diff --git a/multipathd/multipathd.socket b/multipathd/multipathd.socket index c777e5e3..3c20a2ff 100644 --- a/multipathd/multipathd.socket diff --git a/0008-multipath-tools-make-EMC-Invista-config-work-with-al.patch b/0008-multipath-tools-make-EMC-Invista-config-work-with-al.patch deleted file mode 100644 index 723f023..0000000 --- a/0008-multipath-tools-make-EMC-Invista-config-work-with-al.patch +++ /dev/null @@ -1,37 +0,0 @@ -From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 -From: Xose Vazquez Perez -Date: Tue, 28 Sep 2021 19:31:21 +0200 -Subject: [PATCH] multipath-tools: make EMC/Invista config work with alua and - multibus - -Optimal Path Management (OPM) was introduced with VPLEX 5.5 to improve VPLEX -performance. OPM uses the ALUA mechanism to spread the I/O load across VPLEX directors -while gaining cache locality, pag #187: -https://www.delltechnologies.com/en-us/collaterals/unauth/technical-guides-support-information/products/storage-2/docu5128.pdf - -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 ---- - libmultipath/hwtable.c | 3 ++- - 1 file changed, 2 insertions(+), 1 deletion(-) - -diff --git a/libmultipath/hwtable.c b/libmultipath/hwtable.c -index 7095aaf1..4e8b52ff 100644 ---- a/libmultipath/hwtable.c -+++ b/libmultipath/hwtable.c -@@ -350,8 +350,9 @@ static struct hwentry default_hw[] = { - .vendor = "EMC", - .product = "Invista", - .bl_product = "LUNZ", -- .pgpolicy = MULTIBUS, -+ .pgpolicy = GROUP_BY_PRIO, - .no_path_retry = 5, -+ .pgfailback = -FAILBACK_IMMEDIATE, - }, - { - /* XtremIO */ diff --git a/0028-RH-Fix-nvme-function-missing-argument.patch b/0009-RH-Fix-nvme-function-missing-argument.patch similarity index 100% rename from 0028-RH-Fix-nvme-function-missing-argument.patch rename to 0009-RH-Fix-nvme-function-missing-argument.patch diff --git a/0009-multipath-tools-make-COMPELNT-Compellent-Vol-config-.patch b/0009-multipath-tools-make-COMPELNT-Compellent-Vol-config-.patch deleted file mode 100644 index e2a93ee..0000000 --- a/0009-multipath-tools-make-COMPELNT-Compellent-Vol-config-.patch +++ /dev/null @@ -1,35 +0,0 @@ -From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 -From: Xose Vazquez Perez -Date: Tue, 28 Sep 2021 22:15:56 +0200 -Subject: [PATCH] multipath-tools: make "COMPELNT/Compellent Vol" config work - with alua and multibus - -ALUA is needed by SAS arrays, pag#124: -https://downloads.dell.com/manuals/all-products/esuprt_solutions_int/esuprt_solutions_int_solutions_resources/general-solution-resources_white-papers2_en-us.pdf - -Cc: Sean McGinnis -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 ---- - libmultipath/hwtable.c | 3 ++- - 1 file changed, 2 insertions(+), 1 deletion(-) - -diff --git a/libmultipath/hwtable.c b/libmultipath/hwtable.c -index 4e8b52ff..7fc5bc04 100644 ---- a/libmultipath/hwtable.c -+++ b/libmultipath/hwtable.c -@@ -368,7 +368,8 @@ static struct hwentry default_hw[] = { - */ - .vendor = "COMPELNT", - .product = "Compellent Vol", -- .pgpolicy = MULTIBUS, -+ .pgpolicy = GROUP_BY_PRIO, -+ .pgfailback = -FAILBACK_IMMEDIATE, - .no_path_retry = NO_PATH_RETRY_QUEUE, - }, - { diff --git a/0029-RH-use-rpm-optflags-if-present.patch b/0010-RH-use-rpm-optflags-if-present.patch similarity index 94% rename from 0029-RH-use-rpm-optflags-if-present.patch rename to 0010-RH-use-rpm-optflags-if-present.patch index a1c081c..7436fd0 100644 --- a/0029-RH-use-rpm-optflags-if-present.patch +++ b/0010-RH-use-rpm-optflags-if-present.patch @@ -13,10 +13,10 @@ Signed-off-by: Benjamin Marzinski 1 file changed, 19 insertions(+), 7 deletions(-) diff --git a/Makefile.inc b/Makefile.inc -index 2a75dc9c..5ac660de 100644 +index fb23635c..4511ab1f 100644 --- a/Makefile.inc +++ b/Makefile.inc -@@ -92,23 +92,35 @@ TEST_CC_OPTION = $(shell \ +@@ -114,23 +114,35 @@ TEST_CC_OPTION = $(shell \ echo "$(2)"; \ fi) @@ -58,9 +58,12 @@ index 2a75dc9c..5ac660de 100644 BIN_LDFLAGS = -pie # Check whether a function with name $1 has been declared in header file $2. -@@ -139,4 +151,4 @@ check_file = $(shell \ +@@ -174,7 +186,7 @@ check_var = $(shell \ %.o: %.c @echo building $@ because of $? - $(CC) $(CFLAGS) $(CPPFLAGS) -c -o $@ $< + $(CC) $(CFLAGS) -c -o $@ $< + + %.abi: %.so.0 + abidw $< >$@ diff --git a/0030-RH-add-mpathconf.patch b/0011-RH-add-mpathconf.patch similarity index 80% rename from 0030-RH-add-mpathconf.patch rename to 0011-RH-add-mpathconf.patch index aaa4150..80b882a 100644 --- a/0030-RH-add-mpathconf.patch +++ b/0011-RH-add-mpathconf.patch @@ -13,18 +13,18 @@ a single command. Signed-off-by: Benjamin Marzinski --- libmultipath/config.c | 2 + - multipath/Makefile | 5 + - multipath/mpathconf | 564 ++++++++++++++++++++++++++++++++++++++++++ - multipath/mpathconf.8 | 135 ++++++++++ - 4 files changed, 706 insertions(+) + multipath/Makefile | 4 + + multipath/mpathconf | 658 ++++++++++++++++++++++++++++++++++++++++++ + multipath/mpathconf.8 | 151 ++++++++++ + 4 files changed, 815 insertions(+) create mode 100644 multipath/mpathconf create mode 100644 multipath/mpathconf.8 diff --git a/libmultipath/config.c b/libmultipath/config.c -index 5f35c3d3..cee3bbb7 100644 +index b193de5c..a8ec3bf4 100644 --- a/libmultipath/config.c +++ b/libmultipath/config.c -@@ -897,6 +897,8 @@ int _init_config (const char *file, struct config *conf) +@@ -896,6 +896,8 @@ int _init_config (const char *file, struct config *conf) factorize_hwtable(conf->hwtable, builtin_hwtable_size, file); } else { condlog(0, "/etc/multipath.conf does not exist, blacklisting all devices."); @@ -34,45 +34,42 @@ index 5f35c3d3..cee3bbb7 100644 conf->blist_devnode = vector_alloc(); if (!conf->blist_devnode) { diff --git a/multipath/Makefile b/multipath/Makefile -index b9bbb3cf..e720c7f6 100644 +index 2059a4f4..e2ebe431 100644 --- a/multipath/Makefile +++ b/multipath/Makefile -@@ -18,10 +18,12 @@ $(EXEC): $(OBJS) $(multipathdir)/libmultipath.so $(mpathcmddir)/libmpathcmd.so - $(CC) $(CFLAGS) $(OBJS) -o $(EXEC) $(LDFLAGS) $(LIBDEPS) - $(GZIP) $(EXEC).8 > $(EXEC).8.gz - $(GZIP) $(EXEC).conf.5 > $(EXEC).conf.5.gz -+ $(GZIP) mpathconf.8 > mpathconf.8.gz - +@@ -20,6 +20,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)$(libudevdir)/rules.d/62-multipath.rules -@@ -29,13 +31,16 @@ install: - $(INSTALL_PROGRAM) -m 644 $(EXEC).8.gz $(DESTDIR)$(man8dir) + $(INSTALL_PROGRAM) -m 644 $(EXEC).rules $(DESTDIR)$(udevrulesdir)/62-multipath.rules +@@ -29,6 +30,7 @@ install: + $(INSTALL_PROGRAM) -m 644 $(EXEC).8 $(DESTDIR)$(man8dir) $(INSTALL_PROGRAM) -d $(DESTDIR)$(man5dir) - $(INSTALL_PROGRAM) -m 644 $(EXEC).conf.5.gz $(DESTDIR)$(man5dir) -+ $(INSTALL_PROGRAM) -m 644 mpathconf.8.gz $(DESTDIR)$(man8dir) - - uninstall: - $(RM) $(DESTDIR)$(bindir)/$(EXEC) - $(RM) $(DESTDIR)$(udevrulesdir)/11-dm-mpath.rules + $(INSTALL_PROGRAM) -m 644 $(EXEC).conf.5 $(DESTDIR)$(man5dir) ++ $(INSTALL_PROGRAM) -m 644 mpathconf.8 $(DESTDIR)$(man8dir) + 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 \ +@@ -41,8 +43,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.gz - $(RM) $(DESTDIR)$(man5dir)/$(EXEC).conf.5.gz -+ $(RM) $(DESTDIR)$(man8dir)/mpathconf.8.gz + $(RM) $(DESTDIR)$(man8dir)/$(EXEC).8 + $(RM) $(DESTDIR)$(man5dir)/$(EXEC).conf.5 ++ $(RM) $(DESTDIR)$(man8dir)/mpathconf.8 clean: dep_clean - $(RM) core *.o $(EXEC) *.gz + $(RM) core *.o $(EXEC) diff --git a/multipath/mpathconf b/multipath/mpathconf new file mode 100644 -index 00000000..0de6b121 +index 00000000..319664b1 --- /dev/null +++ b/multipath/mpathconf -@@ -0,0 +1,564 @@ +@@ -0,0 +1,658 @@ +#!/bin/bash +# +# Copyright (C) 2010 Red Hat, Inc. All rights reserved. @@ -92,7 +89,7 @@ index 00000000..0de6b121 +# This program was largely ripped off from lvmconf +# + -+unset ENABLE FIND FRIENDLY PROPERTY FOREIGN MODULE MULTIPATHD HAVE_DISABLE HAVE_WWID_DISABLE HAVE_FIND HAVE_BLACKLIST HAVE_EXCEPTIONS HAVE_DEFAULTS HAVE_FRIENDLY HAVE_PROPERTY HAVE_FOREIGN HAVE_MULTIPATHD HAVE_MODULE HAVE_OUTFILE SHOW_STATUS CHANGED_CONFIG WWID_LIST ++unset ENABLE FIND FRIENDLY PROPERTY FOREIGN MODULE MULTIPATHD HAVE_DISABLE HAVE_WWID_DISABLE HAVE_FIND HAVE_BLACKLIST HAVE_EXCEPTIONS HAVE_DEFAULTS HAVE_FRIENDLY HAVE_PROPERTY HAVE_FOREIGN HAVE_MULTIPATHD HAVE_MODULE HAVE_OUTFILE SHOW_STATUS CHANGED_CONFIG WWID_LIST HAVE_OPTION OPTION_NAME OPTION_VALUE HAVE_RECHECK_WWID RECHECK_WWID + +DEFAULT_CONFIG="# device-mapper-multipath configuration file + @@ -127,6 +124,8 @@ index 00000000..0de6b121 + echo "Set find_multipaths (Default y): --find_multipaths " + echo "Set default property blacklist (Default n): --property_blacklist " + echo "Set enable_foreign to show foreign devices (Default n): --enable_foreign " ++ echo "Set recheck_wwid (Defaut n): --recheck_wwid " ++ echo "Add/Change/Remove option in defaults section: --option :" + echo "Load the dm-multipath modules on enable (Default y): --with_module " + echo "start/stop/reload multipathd (Default n): --with_multipathd " + echo "select output file (Default /etc/multipath.conf): --outfile " @@ -219,6 +218,15 @@ index 00000000..0de6b121 + exit 1 + fi + ;; ++ --recheck_wwid) ++ if [ -n "$2" ]; then ++ RECHECK_WWID=$2 ++ shift 2 ++ else ++ usage ++ exit 1 ++ fi ++ ;; + --find_multipaths) + if [ -n "$2" ]; then + FIND=$2 @@ -237,6 +245,20 @@ index 00000000..0de6b121 + exit 1 + fi + ;; ++ --option) ++ if [ -n "$2" ]; then ++ OPTION_NAME=$(echo $2 | cut -s -f1 -d:) ++ OPTION_VALUE=$(echo $2 | cut -s -f2 -d:) ++ if [ -z "$OPTION_NAME" ]; then ++ usage ++ exit 1 ++ fi ++ shift 2 ++ else ++ usage ++ exit 1 ++ fi ++ ;; + --enable_foreign) + if [ -n "$2" ]; then + FOREIGN=$2 @@ -283,17 +305,25 @@ index 00000000..0de6b121 + +function validate_args +{ -+ if [ "$ENABLE" = "0" ] && [ -n "$FRIENDLY" -o -n "$FIND" -o -n "$PROPERTY" -o -n "$MODULE" ]; then ++ if [ "$ENABLE" = "0" ] && [ -n "$FRIENDLY" -o -n "$FIND" -o -n "$PROPERTY" -o -n "$MODULE" -o -n "$FOREIGN" -o -n "$OPTION_NAME" -o -n "$RECHECK_WWID" ]; then + echo "ignoring extra parameters on disable" + FRIENDLY="" + FIND="" + PROPERTY="" + MODULE="" ++ FOREIGN="" ++ OPTION_NAME="" ++ OPTION_VALUE="" ++ RECHECK_WWID="" + fi + if [ -n "$FRIENDLY" ] && [ "$FRIENDLY" != "y" -a "$FRIENDLY" != "n" ]; then + echo "--user_friendly_names must be either 'y' or 'n'" + exit 1 + fi ++ if [ -n "$RECHECK_WWID" ] && [ "$RECHECK_WWID" != "y" -a "$RECHECK_WWID" != "n" ]; then ++ echo "--recheck_wwid must be either 'y' or 'n'" ++ exit 1 ++ fi + if [ "$FIND" = "y" ]; then + FIND="yes" + elif [ "$FIND" = "n" ]; then @@ -310,7 +340,19 @@ index 00000000..0de6b121 + echo "--enable_foreign must be either 'y' or 'n'" + exit 1 + fi -+ if [ -z "$ENABLE" -a -z "$FIND" -a -z "$FRIENDLY" -a -z "$PROPERTY" -a -z "$FOREIGN" ]; then ++ if [ -n "$OPTION_NAME" ]; then ++ if [[ $OPTION_NAME =~ [[:space:]]|#|\"|!|\{|\} ]]; then ++ echo "--option name \"$OPTION_NAME\" is invalid" ++ exit 1 ++ elif [[ $OPTION_VALUE =~ \"|#|!|\{|\} ]]; then ++ echo "--option value \"$OPTION_VALUE\" is invalid" ++ exit 1 ++ fi ++ if [[ $OPTION_VALUE =~ [[:space:]] ]]; then ++ OPTION_VALUE=\"$OPTION_VALUE\" ++ fi ++ fi ++ if [ -z "$ENABLE" -a -z "$FIND" -a -z "$FRIENDLY" -a -z "$PROPERTY" -a -z "$FOREIGN" -a -z "$OPTION_NAME" -a -z "$RECHECK_WWID" ]; then + SHOW_STATUS=1 + fi + if [ -n "$MODULE" ] && [ "$MODULE" != "y" -a "$MODULE" != "n" ]; then @@ -412,6 +454,11 @@ index 00000000..0de6b121 + elif sed -n '/^defaults[[:space:]]*{/,/^}/ p' $TMPFILE | grep -q "^[[:space:]]*user_friendly_names[[:space:]][[:space:]]*\(no\|0\)" ; then + HAVE_FRIENDLY=0 + fi ++ if sed -n '/^defaults[[:space:]]*{/,/^}/ p' $TMPFILE | grep -q "^[[:space:]]*recheck_wwid[[:space:]][[:space:]]*\(yes\|1\)" ; then ++ HAVE_RECHECK_WWID=1 ++ elif sed -n '/^defaults[[:space:]]*{/,/^}/ p' $TMPFILE | grep -q "^[[:space:]]*recheck_wwid[[:space:]][[:space:]]*\(no\|0\)" ; then ++ HAVE_RECHECK_WWID=0 ++ fi + if sed -n '/^defaults[[:space:]]*{/,/^}/ p' $TMPFILE | grep -q "^[[:space:]]*#[[:space:]]*enable_foreign" ; then + HAVE_FOREIGN=0 + elif sed -n '/^defaults[[:space:]]*{/,/^}/ p' $TMPFILE | grep -q "^[[:space:]]*enable_foreign[[:space:]][[:space:]]*\"\.\*\"" ; then @@ -423,6 +470,13 @@ index 00000000..0de6b121 + elif sed -n '/^defaults[[:space:]]*{/,/^}/ p' $TMPFILE | grep -q "^[[:space:]]*enable_foreign" ; then + HAVE_FOREIGN=3 + fi ++ if [ -n "$OPTION_NAME" ]; then ++ if sed -n '/^defaults[[:space:]]*{/,/^}/ p' $TMPFILE | grep -q '^[[:space:]]*'"$OPTION_NAME"'[[:space:]][[:space:]]*'"$OPTION_VALUE" ; then ++ HAVE_OPTION=1 ++ elif sed -n '/^defaults[[:space:]]*{/,/^}/ p' $TMPFILE | grep -q '^[[:space:]]*'"$OPTION_NAME"'\([[:space:]].*\)\?$' ; then ++ HAVE_OPTION=0 ++ fi ++ fi +fi + +if [ "$HAVE_EXCEPTIONS" = "1" ]; then @@ -449,6 +503,11 @@ index 00000000..0de6b121 + else + echo "user_friendly_names is enabled" + fi ++ if [ -z "$HAVE_RECHECK_WWID" -o "$HAVE_RECHECK_WWID" = 0 ]; then ++ echo "recheck_wwid is disabled" ++ else ++ echo "recheck_wwid is enabled" ++ fi + if [ -z "$HAVE_PROPERTY" -o "$HAVE_PROPERTY" = 0 ]; then + echo "default property blacklist is disabled" + else @@ -565,6 +624,23 @@ index 00000000..0de6b121 + fi +fi + ++if [ "$RECHECK_WWID" = "n" ]; then ++ if [ "$HAVE_RECHECK_WWID" = 1 ]; then ++ sed -i '/^defaults[[:space:]]*{/,/^}/ s/^[[:space:]]*recheck_wwid[[:space:]][[:space:]]*\(yes\|1\)/ recheck_wwid no/' $TMPFILE ++ CHANGED_CONFIG=1 ++ fi ++elif [ "$RECHECK_WWID" = "y" ]; then ++ if [ -z "$HAVE_RECHECK_WWID" ]; then ++ sed -i '/^defaults[[:space:]]*{/ a\ ++ recheck_wwid yes ++' $TMPFILE ++ CHANGED_CONFIG=1 ++ elif [ "$HAVE_RECHECK_WWID" = 0 ]; then ++ sed -i '/^defaults[[:space:]]*{/,/^}/ s/^[[:space:]]*recheck_wwid[[:space:]][[:space:]]*\(no\|0\)/ recheck_wwid yes/' $TMPFILE ++ CHANGED_CONFIG=1 ++ fi ++fi ++ +if [ "$PROPERTY" = "n" ]; then + if [ "$HAVE_PROPERTY" = 1 ]; then + sed -i '/^blacklist_exceptions[[:space:]]*{/,/^}/ s/^[[:space:]]*property[[:space:]][[:space:]]*\"(SCSI_IDENT_|ID_WWN)\"/# property \"(SCSI_IDENT_|ID_WWN)\"/' $TMPFILE @@ -607,6 +683,21 @@ index 00000000..0de6b121 + fi +fi + ++if [ -n "$OPTION_NAME" -a -n "$OPTION_VALUE" ]; then ++ if [ -z "$HAVE_OPTION" ]; then ++ sed -i '/^defaults[[:space:]]*{/ a\ ++ '"$OPTION_NAME"' '"$OPTION_VALUE"' ++' $TMPFILE ++ CHANGED_CONFIG=1 ++ elif [ "$HAVE_OPTION" = 0 ]; then ++ sed -i '/^defaults[[:space:]]*{/,/^}/ s/^[[:space:]]*'"$OPTION_NAME"'\([[:space:]].*\)\?$/ '"$OPTION_NAME"' '"$OPTION_VALUE"'/' $TMPFILE ++ CHANGED_CONFIG=1 ++ fi ++elif [ -n "$OPTION_NAME" -a -n "$HAVE_OPTION" ]; then ++ sed -i '/^defaults[[:space:]]*{/,/^}/{/^[[:space:]]*'"$OPTION_NAME"'\([[:space:]].*\)\?$/d}' $TMPFILE ++ CHANGED_CONFIG=1 ++fi ++ +if [ -f "$OUTPUTFILE" ]; then + cp $OUTPUTFILE $OUTPUTFILE.old + if [ $? != 0 ]; then @@ -639,10 +730,10 @@ index 00000000..0de6b121 +fi diff --git a/multipath/mpathconf.8 b/multipath/mpathconf.8 new file mode 100644 -index 00000000..a14d831e +index 00000000..9c2fb835 --- /dev/null +++ b/multipath/mpathconf.8 -@@ -0,0 +1,135 @@ +@@ -0,0 +1,151 @@ +.TH MPATHCONF 8 "June 2010" "" "Linux Administrator's Manual" +.SH NAME +mpathconf - A tool for configuring device-mapper-multipath @@ -722,6 +813,15 @@ index 00000000..a14d831e +defaults section. If set to \fBn\fP, this removes the line, if present. This +command can be used along with any other command. +.TP ++.B --recheck_wwid \fP { \fBy\fP | \fBn\fP } ++If set to \fBy\fP, this adds the line ++.B recheck_wwid yes ++to the ++.B /etc/multipath.conf ++defaults section, or sets an existing line to \fByes\fP. If set to \fBn\fP, this ++sets an existing \fBrecheck_wwid\fP line to \fBno\fP. This command can be used ++along with any other command. ++.TP +.B --find_multipaths\fP { \fByes\fP | \fBno\fP | \fBstrict\fP | \fBgreedy\fP | \fBsmart\fP } +If set to \fB\fP, this adds the line +.B find_multipaths @@ -746,6 +846,13 @@ index 00000000..a14d831e +defaults section. if set to \fBn\fP, this removes the line, if present. This +command can be used along with any other command. +.TP ++.B --option \fB:[]\fP ++Sets the defaults section option \fB\fP to \fB\fP. If the ++option was not previously set in the defaults section, it is added. If it was ++set, its value is changed to \fB\fP. If \fB\fP is left blank, ++then the option is removed from the defaults section, if was set there. This ++command can be used along with any other command. ++.TP +.B --outfile \fB\fP +Write the resulting multipath configuration to \fB\fP instead of +\fB/etc/multipath.conf\fP. diff --git a/0011-Revert-multipath-tools-make-EMC-Invista-config-work-.patch b/0011-Revert-multipath-tools-make-EMC-Invista-config-work-.patch deleted file mode 100644 index 1912f80..0000000 --- a/0011-Revert-multipath-tools-make-EMC-Invista-config-work-.patch +++ /dev/null @@ -1,35 +0,0 @@ -From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 -From: Martin Wilck -Date: Wed, 20 Oct 2021 20:44:54 +0200 -Subject: [PATCH] Revert "multipath-tools: make EMC/Invista config work with - alua and multibus" - -This reverts commit 309ff281aaa07e862540d3d645a8263f3e9baaed. - -Mail from , 20210930: - -"OPM is no longer supported in the Dell VPLEX product. If we at Dell had -wished to change the default device stanzas for any of our products they -would have been done when the product and/or feature is released. -Please remove this patch as well. It is not needed." - -Signed-off-by: Benjamin Marzinski ---- - libmultipath/hwtable.c | 3 +-- - 1 file changed, 1 insertion(+), 2 deletions(-) - -diff --git a/libmultipath/hwtable.c b/libmultipath/hwtable.c -index 763982cd..211087ad 100644 ---- a/libmultipath/hwtable.c -+++ b/libmultipath/hwtable.c -@@ -350,9 +350,8 @@ static struct hwentry default_hw[] = { - .vendor = "EMC", - .product = "Invista", - .bl_product = "LUNZ", -- .pgpolicy = GROUP_BY_PRIO, -+ .pgpolicy = MULTIBUS, - .no_path_retry = 5, -- .pgfailback = -FAILBACK_IMMEDIATE, - }, - { - /* XtremIO */ diff --git a/0031-RH-add-wwids-from-kernel-cmdline-mpath.wwids-with-A.patch b/0012-RH-add-wwids-from-kernel-cmdline-mpath.wwids-with-A.patch similarity index 88% rename from 0031-RH-add-wwids-from-kernel-cmdline-mpath.wwids-with-A.patch rename to 0012-RH-add-wwids-from-kernel-cmdline-mpath.wwids-with-A.patch index 3ce47ac..c133e00 100644 --- a/0031-RH-add-wwids-from-kernel-cmdline-mpath.wwids-with-A.patch +++ b/0012-RH-add-wwids-from-kernel-cmdline-mpath.wwids-with-A.patch @@ -20,10 +20,10 @@ Signed-off-by: Benjamin Marzinski 3 files changed, 59 insertions(+), 3 deletions(-) diff --git a/multipath/main.c b/multipath/main.c -index b2d300e5..80fa68e5 100644 +index d09f62db..0d786ee5 100644 --- a/multipath/main.c +++ b/multipath/main.c -@@ -122,7 +122,7 @@ usage (char * progname) +@@ -120,7 +120,7 @@ usage (char * progname) fprintf (stderr, " %s [-v level] [-R retries] -F\n", progname); fprintf (stderr, " %s [-v level] [-l|-ll] [device]\n", progname); fprintf (stderr, " %s [-v level] [-a|-w] device\n", progname); @@ -32,7 +32,7 @@ index b2d300e5..80fa68e5 100644 fprintf (stderr, " %s [-v level] [-i] [-c|-C] device\n", progname); fprintf (stderr, " %s [-v level] [-i] [-u|-U]\n", progname); fprintf (stderr, " %s [-h|-t|-T]\n", progname); -@@ -136,6 +136,8 @@ usage (char * progname) +@@ -134,6 +134,8 @@ usage (char * progname) " -f flush a multipath device map\n" " -F flush all multipath device maps\n" " -a add a device wwid to the wwids file\n" @@ -41,7 +41,7 @@ index b2d300e5..80fa68e5 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" -@@ -450,6 +452,50 @@ static void cleanup_vecs(void) +@@ -448,6 +450,50 @@ static void cleanup_vecs(void) free_pathvec(vecs.pathvec, FREE_PATHS); } @@ -92,16 +92,16 @@ index b2d300e5..80fa68e5 100644 static int configure (struct config *conf, enum mpath_cmds cmd, enum devtypes dev_type, char *devpath) -@@ -839,7 +885,7 @@ main (int argc, char *argv[]) - conf->retrigger_tries = 0; +@@ -841,7 +887,7 @@ main (int argc, char *argv[]) conf->force_sync = 1; - atexit(cleanup_vecs); + if (atexit(cleanup_vecs)) + condlog(1, "failed to register cleanup handler for vecs: %m"); - while ((arg = getopt(argc, argv, ":adDcChl::eFfM:v:p:b:BrR:itTquUwW")) != EOF ) { + while ((arg = getopt(argc, argv, ":aAdDcChl::eFfM:v:p:b:BrR:itTquUwW")) != EOF ) { switch(arg) { - case 1: printf("optarg : %s\n",optarg); - break; -@@ -916,6 +962,10 @@ main (int argc, char *argv[]) + case 'v': + if (!isdigit(optarg[0])) { +@@ -912,6 +958,10 @@ main (int argc, char *argv[]) case 'T': cmd = CMD_DUMP_CONFIG; break; @@ -113,7 +113,7 @@ index b2d300e5..80fa68e5 100644 usage(argv[0]); exit(RTVL_OK); diff --git a/multipath/multipath.8 b/multipath/multipath.8 -index 17df59f5..5ca75359 100644 +index 4c7e9885..1d062664 100644 --- a/multipath/multipath.8 +++ b/multipath/multipath.8 @@ -63,7 +63,7 @@ multipath \- Device mapper target autoconfig. @@ -138,13 +138,13 @@ index 17df59f5..5ca75359 100644 Remove the WWID for the specified device from the WWIDs file. . diff --git a/multipathd/multipathd.service b/multipathd/multipathd.service -index 6d57c7e8..dfc1e962 100644 +index d76f94f9..bb5f383a 100644 --- a/multipathd/multipathd.service +++ b/multipathd/multipathd.service -@@ -16,6 +16,7 @@ Type=notify +@@ -17,6 +17,7 @@ ConditionVirtualization=!container + [Service] + Type=notify NotifyAccess=main - LimitCORE=infinity - ExecStartPre=-/sbin/modprobe -a scsi_dh_alua scsi_dh_emc scsi_dh_rdac dm-multipath +ExecStartPre=-/sbin/multipath -A ExecStart=/sbin/multipathd -d -s ExecReload=/sbin/multipathd reconfigure diff --git a/0012-Revert-multipath-tools-make-EMC-SYMMETRIX-config-wor.patch b/0012-Revert-multipath-tools-make-EMC-SYMMETRIX-config-wor.patch deleted file mode 100644 index b889ea8..0000000 --- a/0012-Revert-multipath-tools-make-EMC-SYMMETRIX-config-wor.patch +++ /dev/null @@ -1,38 +0,0 @@ -From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 -From: Martin Wilck -Date: Wed, 20 Oct 2021 20:46:09 +0200 -Subject: [PATCH] Revert "multipath-tools: make EMC/SYMMETRIX config work with - alua and multibus" - -This reverts commit 831af0dbfa171cd39d968ba6174669f11a278be9. - -Mail from "berthiaume, wayne" , 210930: - -"As a representative of Dell I request this patch be withdrawn. If we had -wanted the default stanza changed we would have already implemented it. -Also for your information we only advertise the entire enterprise storage -product line (DMX, VMAX, VMAX AFA, PowerMax) as SYMMETRIX in the VPD page. -The ALUA capability is only used for mobility devices in an SRDF/Metro -configuration and the current device stanza still works well in all of our -testing." - -Signed-off-by: Benjamin Marzinski ---- - libmultipath/hwtable.c | 3 +-- - 1 file changed, 1 insertion(+), 2 deletions(-) - -diff --git a/libmultipath/hwtable.c b/libmultipath/hwtable.c -index 211087ad..a8ba28e3 100644 ---- a/libmultipath/hwtable.c -+++ b/libmultipath/hwtable.c -@@ -329,9 +329,8 @@ static struct hwentry default_hw[] = { - /* Symmetrix / DMX / VMAX / PowerMax */ - .vendor = "EMC", - .product = "SYMMETRIX", -- .pgpolicy = GROUP_BY_PRIO, -+ .pgpolicy = MULTIBUS, - .no_path_retry = 6, -- .pgfailback = -FAILBACK_IMMEDIATE, - }, - { - /* DGC CLARiiON CX/AX / VNX and Unity */ diff --git a/0032-RH-reset-default-find_mutipaths-value-to-off.patch b/0013-RH-reset-default-find_mutipaths-value-to-off.patch similarity index 94% rename from 0032-RH-reset-default-find_mutipaths-value-to-off.patch rename to 0013-RH-reset-default-find_mutipaths-value-to-off.patch index d5b5601..f1e8c33 100644 --- a/0032-RH-reset-default-find_mutipaths-value-to-off.patch +++ b/0013-RH-reset-default-find_mutipaths-value-to-off.patch @@ -12,10 +12,10 @@ Signed-off-by: Benjamin Marzinski 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libmultipath/defaults.h b/libmultipath/defaults.h -index c27946c7..e0dd32ad 100644 +index 7d95413d..4fe08991 100644 --- a/libmultipath/defaults.h +++ b/libmultipath/defaults.h -@@ -23,7 +23,7 @@ +@@ -24,7 +24,7 @@ #define DEFAULT_NO_PATH_RETRY NO_PATH_RETRY_UNDEF #define DEFAULT_VERBOSITY 2 #define DEFAULT_REASSIGN_MAPS 0 diff --git a/0013-multipath-fix-exit-status-of-multipath-T.patch b/0013-multipath-fix-exit-status-of-multipath-T.patch deleted file mode 100644 index 783e95e..0000000 --- a/0013-multipath-fix-exit-status-of-multipath-T.patch +++ /dev/null @@ -1,26 +0,0 @@ -From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 -From: Martin Wilck -Date: Fri, 22 Oct 2021 12:58:11 +0200 -Subject: [PATCH] multipath: fix exit status of multipath -T - -We must set the return value in configure(). - -Signed-off-by: Martin Wilck -Reviewed-by: Benjamin Marzinski -Signed-off-by: Benjamin Marzinski ---- - multipath/main.c | 1 + - 1 file changed, 1 insertion(+) - -diff --git a/multipath/main.c b/multipath/main.c -index 65ece830..b2d300e5 100644 ---- a/multipath/main.c -+++ b/multipath/main.c -@@ -560,6 +560,7 @@ configure (struct config *conf, enum mpath_cmds cmd, - - dump_config(conf, hwes, curmp); - vector_free(hwes); -+ r = RTVL_OK; - goto out; - } - diff --git a/0033-RH-attempt-to-get-ANA-info-via-sysfs-first.patch b/0014-RH-attempt-to-get-ANA-info-via-sysfs-first.patch similarity index 100% rename from 0033-RH-attempt-to-get-ANA-info-via-sysfs-first.patch rename to 0014-RH-attempt-to-get-ANA-info-via-sysfs-first.patch diff --git a/0014-libmultipath-add-section-name-to-invalid-keyword-out.patch b/0014-libmultipath-add-section-name-to-invalid-keyword-out.patch deleted file mode 100644 index f4fce9f..0000000 --- a/0014-libmultipath-add-section-name-to-invalid-keyword-out.patch +++ /dev/null @@ -1,70 +0,0 @@ -From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 -From: Benjamin Marzinski -Date: Thu, 11 Nov 2021 12:53:44 -0600 -Subject: [PATCH] libmultipath: add section name to invalid keyword output - -If users forget the closing brace for a section in multipath.conf, -multipath has no way to detect that. When it sees the keyword at the -start of the next section, it will complain that there is an invalid -keyword, because that keyword doesn't belong in previous section (which -was never ended with a closing brace). This can confuse users. To make -this easier to understand, when multipath prints an invalid keyword -message, it now also prints the current section name, which can give -users a hint that they didn't end the previous section. - -Signed-off-by: Benjamin Marzinski -Reviewed-by: Martin Wilck ---- - libmultipath/parser.c | 20 +++++++++++++------- - 1 file changed, 13 insertions(+), 7 deletions(-) - -diff --git a/libmultipath/parser.c b/libmultipath/parser.c -index 8ca91bf2..611054f7 100644 ---- a/libmultipath/parser.c -+++ b/libmultipath/parser.c -@@ -504,7 +504,7 @@ validate_config_strvec(vector strvec, const char *file) - - static int - process_stream(struct config *conf, FILE *stream, vector keywords, -- const char *file) -+ const char *section, const char *file) - { - int i; - int r = 0, t; -@@ -568,16 +568,22 @@ process_stream(struct config *conf, FILE *stream, vector keywords, - if (keyword->sub) { - kw_level++; - r += process_stream(conf, stream, -- keyword->sub, file); -+ keyword->sub, -+ keyword->string, -+ file); - kw_level--; - } - break; - } - } -- if (i >= VECTOR_SIZE(keywords)) -- condlog(1, "%s line %d, invalid keyword: %s", -- file, line_nr, str); -- -+ if (i >= VECTOR_SIZE(keywords)) { -+ if (section) -+ condlog(1, "%s line %d, invalid keyword in the %s section: %s", -+ file, line_nr, section, str); -+ else -+ condlog(1, "%s line %d, invalid keyword: %s", -+ file, line_nr, str); -+ } - free_strvec(strvec); - } - if (kw_level == 1) -@@ -608,7 +614,7 @@ process_file(struct config *conf, const char *file) - - /* Stream handling */ - line_nr = 0; -- r = process_stream(conf, stream, conf->keywords, file); -+ r = process_stream(conf, stream, conf->keywords, NULL, file); - fclose(stream); - //free_keywords(keywords); - diff --git a/0034-RH-make-parse_vpd_pg83-match-scsi_id-output.patch b/0015-RH-make-parse_vpd_pg83-match-scsi_id-output.patch similarity index 67% rename from 0034-RH-make-parse_vpd_pg83-match-scsi_id-output.patch rename to 0015-RH-make-parse_vpd_pg83-match-scsi_id-output.patch index 1d10c09..bbc0212 100644 --- a/0034-RH-make-parse_vpd_pg83-match-scsi_id-output.patch +++ b/0015-RH-make-parse_vpd_pg83-match-scsi_id-output.patch @@ -9,52 +9,46 @@ that. Signed-off-by: Benjamin Marzinski --- - libmultipath/discovery.c | 18 ++---------------- + libmultipath/discovery.c | 12 ++---------- tests/vpd.c | 6 ++++++ - 2 files changed, 8 insertions(+), 16 deletions(-) + 2 files changed, 8 insertions(+), 10 deletions(-) diff --git a/libmultipath/discovery.c b/libmultipath/discovery.c -index f25fe9e3..6fb81c28 100644 +index b969fba1..d2f2a8cf 100644 --- a/libmultipath/discovery.c +++ b/libmultipath/discovery.c -@@ -1136,12 +1136,9 @@ parse_vpd_pg83(const unsigned char *in, size_t in_len, - naa_prio = 7; +@@ -1156,13 +1156,9 @@ parse_vpd_pg83(const unsigned char *in, size_t in_len, + good_len = 8; break; case 2: - /* IEEE Extended: Prio 6 */ -- naa_prio = 6; +- new_prio = 6; +- good_len = 8; - break; case 3: - /* IEEE Locally assigned: Prio 1 */ -- naa_prio = 1; +- new_prio = 1; + /* IEEE Extended or Locally assigned: Prio 6 */ -+ naa_prio = 6; ++ new_prio = 6; + good_len = 8; break; default: - /* Default: no priority */ -@@ -1160,17 +1157,6 @@ parse_vpd_pg83(const unsigned char *in, size_t in_len, - vpd = d; - } +@@ -1180,10 +1176,6 @@ parse_vpd_pg83(const unsigned char *in, size_t in_len, + break; + case 0x8: + /* SCSI Name: Prio 3 */ +- invalid = (d[3] < 4 || (memcmp(d + 4, "eui.", 4) && +- memcmp(d + 4, "naa.", 4) && +- memcmp(d + 4, "iqn.", 4))); +- new_prio = 3; break; -- case 0x8: -- /* SCSI Name: Prio 3 */ -- if (memcmp(d + 4, "eui.", 4) && -- memcmp(d + 4, "naa.", 4) && -- memcmp(d + 4, "iqn.", 4)) -- break; -- if (prio < 3) { -- prio = 3; -- vpd = d; -- } -- break; case 0x1: /* T-10 Vendor ID: Prio 2 */ - if (prio < 2) { diff --git a/tests/vpd.c b/tests/vpd.c -index 8e730d37..7bf7990f 100644 +index a7d2092c..2366cfba 100644 --- a/tests/vpd.c +++ b/tests/vpd.c -@@ -230,11 +230,13 @@ static const char * const str_prefix[] = { +@@ -231,11 +231,13 @@ static const char * const str_prefix[] = { [STR_IQN] = "iqn.", }; @@ -68,7 +62,7 @@ index 8e730d37..7bf7990f 100644 /** * create_scsi_string_desc() - create a SCSI name string descriptor. -@@ -659,6 +661,7 @@ make_test_vpd_naa(2, 18); +@@ -766,6 +768,7 @@ make_test_vpd_naa(2, 18); make_test_vpd_naa(2, 17); make_test_vpd_naa(2, 16); @@ -76,7 +70,7 @@ index 8e730d37..7bf7990f 100644 /* SCSI Name string: EUI64, WWID size: 17 */ make_test_vpd_str(0, 20, 18) make_test_vpd_str(0, 20, 17) -@@ -694,6 +697,7 @@ make_test_vpd_str(18, 20, 18) +@@ -801,6 +804,7 @@ make_test_vpd_str(18, 20, 18) make_test_vpd_str(18, 20, 17) make_test_vpd_str(18, 20, 16) make_test_vpd_str(18, 20, 15) @@ -84,7 +78,7 @@ index 8e730d37..7bf7990f 100644 static int test_vpd(void) { -@@ -767,6 +771,7 @@ static int test_vpd(void) +@@ -909,6 +913,7 @@ static int test_vpd(void) cmocka_unit_test(test_vpd_naa_2_18), cmocka_unit_test(test_vpd_naa_2_17), cmocka_unit_test(test_vpd_naa_2_16), @@ -92,7 +86,7 @@ index 8e730d37..7bf7990f 100644 cmocka_unit_test(test_vpd_str_0_20_18), cmocka_unit_test(test_vpd_str_0_20_17), cmocka_unit_test(test_vpd_str_0_20_16), -@@ -791,6 +796,7 @@ static int test_vpd(void) +@@ -933,6 +938,7 @@ static int test_vpd(void) cmocka_unit_test(test_vpd_str_18_20_17), cmocka_unit_test(test_vpd_str_18_20_16), cmocka_unit_test(test_vpd_str_18_20_15), diff --git a/0015-libmultipath-use-typedef-for-keyword-handler-functio.patch b/0015-libmultipath-use-typedef-for-keyword-handler-functio.patch deleted file mode 100644 index c3a41d2..0000000 --- a/0015-libmultipath-use-typedef-for-keyword-handler-functio.patch +++ /dev/null @@ -1,85 +0,0 @@ -From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 -From: Benjamin Marzinski -Date: Thu, 11 Nov 2021 12:53:45 -0600 -Subject: [PATCH] libmultipath: use typedef for keyword handler function - -Don't keep writing out the function type. - -Signed-off-by: Benjamin Marzinski -Reviewed-by: Martin Wilck ---- - libmultipath/parser.c | 6 +++--- - libmultipath/parser.h | 15 ++++++--------- - 2 files changed, 9 insertions(+), 12 deletions(-) - -diff --git a/libmultipath/parser.c b/libmultipath/parser.c -index 611054f7..ebe1cbd9 100644 ---- a/libmultipath/parser.c -+++ b/libmultipath/parser.c -@@ -33,7 +33,7 @@ static int line_nr; - - int - keyword_alloc(vector keywords, char *string, -- int (*handler) (struct config *, vector), -+ handler_fn *handler, - print_fn *print, - int unique) - { -@@ -72,7 +72,7 @@ install_sublevel_end(void) - - int - _install_keyword(vector keywords, char *string, -- int (*handler) (struct config *, vector), -+ handler_fn *handler, - print_fn *print, - int unique) - { -@@ -558,7 +558,7 @@ process_stream(struct config *conf, FILE *stream, vector keywords, - goto out; - } - if (keyword->handler) { -- t = (*keyword->handler) (conf, strvec); -+ t = keyword->handler(conf, strvec); - r += t; - if (t) - condlog(1, "multipath.conf +%d, parsing failed: %s", -diff --git a/libmultipath/parser.h b/libmultipath/parser.h -index b43d46f8..3452bde1 100644 ---- a/libmultipath/parser.h -+++ b/libmultipath/parser.h -@@ -43,10 +43,11 @@ struct strbuf; - - /* keyword definition */ - typedef int print_fn(struct config *, struct strbuf *, const void *); -+typedef int handler_fn(struct config *, vector); - - struct keyword { - char *string; -- int (*handler) (struct config *, vector); -+ handler_fn *handler; - print_fn *print; - vector sub; - int unique; -@@ -62,18 +63,14 @@ struct keyword { - for (i = 0; i < (k)->sub->allocated && ((p) = (k)->sub->slot[i]); i++) - - /* Prototypes */ --extern int keyword_alloc(vector keywords, char *string, -- int (*handler) (struct config *, vector), -- print_fn *print, -- int unique); -+extern int keyword_alloc(vector keywords, char *string, handler_fn *handler, -+ print_fn *print, int unique); - #define install_keyword_root(str, h) keyword_alloc(keywords, str, h, NULL, 1) - extern void install_sublevel(void); - extern void install_sublevel_end(void); - --extern int _install_keyword(vector keywords, char *string, -- int (*handler) (struct config *, vector), -- print_fn *print, -- int unique); -+extern int _install_keyword(vector keywords, char *string, handler_fn *handler, -+ print_fn *print, int unique); - #define install_keyword(str, vec, pri) _install_keyword(keywords, str, vec, pri, 1) - #define install_keyword_multi(str, vec, pri) _install_keyword(keywords, str, vec, pri, 0) - extern void dump_keywords(vector keydump, int level); diff --git a/0016-RH-add-scsi-device-handlers-to-modules-load.d.patch b/0016-RH-add-scsi-device-handlers-to-modules-load.d.patch new file mode 100644 index 0000000..07f921f --- /dev/null +++ b/0016-RH-add-scsi-device-handlers-to-modules-load.d.patch @@ -0,0 +1,25 @@ +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 +From: Benjamin Marzinski +Date: Fri, 25 Mar 2022 18:12:06 -0500 +Subject: [PATCH] RH: add scsi device handlers to modules-load.d + +Make scsi_dh_alua scsi_dh_emc and scsi_dh_rdac get loaded in early boot. + +Signed-off-by: Benjamin Marzinski +--- + Makefile.inc | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/Makefile.inc b/Makefile.inc +index 4511ab1f..fec82b00 100644 +--- a/Makefile.inc ++++ b/Makefile.inc +@@ -11,7 +11,7 @@ + + # List of scsi device handler modules to load on boot, e.g. + # SCSI_DH_MODULES_PRELOAD := scsi_dh_alua scsi_dh_rdac +-SCSI_DH_MODULES_PRELOAD := ++SCSI_DH_MODULES_PRELOAD := scsi_dh_alua scsi_dh_emc scsi_dh_rdac + + + PKGCONFIG ?= pkg-config diff --git a/0016-libmultipath-print-the-correct-file-when-parsing-fai.patch b/0016-libmultipath-print-the-correct-file-when-parsing-fai.patch deleted file mode 100644 index 5d9f2f4..0000000 --- a/0016-libmultipath-print-the-correct-file-when-parsing-fai.patch +++ /dev/null @@ -1,28 +0,0 @@ -From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 -From: Benjamin Marzinski -Date: Thu, 11 Nov 2021 12:53:46 -0600 -Subject: [PATCH] libmultipath: print the correct file when parsing fails - -Don't assume that parsing failed on multipath.conf - -Signed-off-by: Benjamin Marzinski -Reviewed-by: Martin Wilck ---- - libmultipath/parser.c | 4 ++-- - 1 file changed, 2 insertions(+), 2 deletions(-) - -diff --git a/libmultipath/parser.c b/libmultipath/parser.c -index ebe1cbd9..d5595fb0 100644 ---- a/libmultipath/parser.c -+++ b/libmultipath/parser.c -@@ -561,8 +561,8 @@ process_stream(struct config *conf, FILE *stream, vector keywords, - t = keyword->handler(conf, strvec); - r += t; - if (t) -- condlog(1, "multipath.conf +%d, parsing failed: %s", -- line_nr, buf); -+ condlog(1, "%s line %d, parsing failed: %s", -+ file, line_nr, buf); - } - - if (keyword->sub) { diff --git a/0017-libmultipath-pass-file-and-line-number-to-keyword-ha.patch b/0017-libmultipath-pass-file-and-line-number-to-keyword-ha.patch deleted file mode 100644 index 50f9184..0000000 --- a/0017-libmultipath-pass-file-and-line-number-to-keyword-ha.patch +++ /dev/null @@ -1,528 +0,0 @@ -From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 -From: Benjamin Marzinski -Date: Thu, 11 Nov 2021 12:53:47 -0600 -Subject: [PATCH] libmultipath: pass file and line number to keyword handlers - -This will make it possible for the keyword handlers to print more useful -warning messages. It will be used by future patches. - -Signed-off-by: Benjamin Marzinski -Reviewed-by: Martin Wilck ---- - libmultipath/dict.c | 143 +++++++++++++++++++++++++----------------- - libmultipath/parser.c | 3 +- - libmultipath/parser.h | 2 +- - 3 files changed, 90 insertions(+), 58 deletions(-) - -diff --git a/libmultipath/dict.c b/libmultipath/dict.c -index 7a727389..eb2c44c0 100644 ---- a/libmultipath/dict.c -+++ b/libmultipath/dict.c -@@ -29,7 +29,7 @@ - #include "strbuf.h" - - static int --set_int(vector strvec, void *ptr) -+set_int(vector strvec, void *ptr, const char *file, int line_nr) - { - int *int_ptr = (int *)ptr; - char *buff, *eptr; -@@ -58,7 +58,7 @@ set_int(vector strvec, void *ptr) - } - - static int --set_uint(vector strvec, void *ptr) -+set_uint(vector strvec, void *ptr, const char *file, int line_nr) - { - unsigned int *uint_ptr = (unsigned int *)ptr; - char *buff, *eptr, *p; -@@ -90,7 +90,7 @@ set_uint(vector strvec, void *ptr) - } - - static int --set_str(vector strvec, void *ptr) -+set_str(vector strvec, void *ptr, const char *file, int line_nr) - { - char **str_ptr = (char **)ptr; - -@@ -105,7 +105,7 @@ set_str(vector strvec, void *ptr) - } - - static int --set_yes_no(vector strvec, void *ptr) -+set_yes_no(vector strvec, void *ptr, const char *file, int line_nr) - { - char * buff; - int *int_ptr = (int *)ptr; -@@ -124,7 +124,7 @@ set_yes_no(vector strvec, void *ptr) - } - - static int --set_yes_no_undef(vector strvec, void *ptr) -+set_yes_no_undef(vector strvec, void *ptr, const char *file, int line_nr) - { - char * buff; - int *int_ptr = (int *)ptr; -@@ -187,9 +187,10 @@ static int print_yes_no_undef(struct strbuf *buff, long v) - - #define declare_def_handler(option, function) \ - static int \ --def_ ## option ## _handler (struct config *conf, vector strvec) \ -+def_ ## option ## _handler (struct config *conf, vector strvec, \ -+ const char *file, int line_nr) \ - { \ -- return function (strvec, &conf->option); \ -+ return function (strvec, &conf->option, file, line_nr); \ - } - - #define declare_def_snprint(option, function) \ -@@ -224,12 +225,13 @@ snprint_def_ ## option (struct config *conf, struct strbuf *buff, \ - - #define declare_hw_handler(option, function) \ - static int \ --hw_ ## option ## _handler (struct config *conf, vector strvec) \ -+hw_ ## option ## _handler (struct config *conf, vector strvec, \ -+ const char *file, int line_nr) \ - { \ - struct hwentry * hwe = VECTOR_LAST_SLOT(conf->hwtable); \ - if (!hwe) \ - return 1; \ -- return function (strvec, &hwe->option); \ -+ return function (strvec, &hwe->option, file, line_nr); \ - } - - #define declare_hw_snprint(option, function) \ -@@ -243,11 +245,12 @@ snprint_hw_ ## option (struct config *conf, struct strbuf *buff, \ - - #define declare_ovr_handler(option, function) \ - static int \ --ovr_ ## option ## _handler (struct config *conf, vector strvec) \ -+ovr_ ## option ## _handler (struct config *conf, vector strvec, \ -+ const char *file, int line_nr) \ - { \ - if (!conf->overrides) \ - return 1; \ -- return function (strvec, &conf->overrides->option); \ -+ return function (strvec, &conf->overrides->option, file, line_nr); \ - } - - #define declare_ovr_snprint(option, function) \ -@@ -260,12 +263,13 @@ snprint_ovr_ ## option (struct config *conf, struct strbuf *buff, \ - - #define declare_mp_handler(option, function) \ - static int \ --mp_ ## option ## _handler (struct config *conf, vector strvec) \ -+mp_ ## option ## _handler (struct config *conf, vector strvec, \ -+ const char *file, int line_nr) \ - { \ - struct mpentry * mpe = VECTOR_LAST_SLOT(conf->mptable); \ - if (!mpe) \ - return 1; \ -- return function (strvec, &mpe->option); \ -+ return function (strvec, &mpe->option, file, line_nr); \ - } - - #define declare_mp_snprint(option, function) \ -@@ -277,9 +281,10 @@ snprint_mp_ ## option (struct config *conf, struct strbuf *buff, \ - return function(buff, mpe->option); \ - } - --static int checkint_handler(struct config *conf, vector strvec) -+static int checkint_handler(struct config *conf, vector strvec, -+ const char *file, int line_nr) - { -- int rc = set_uint(strvec, &conf->checkint); -+ int rc = set_uint(strvec, &conf->checkint, file, line_nr); - - if (rc) - return rc; -@@ -302,9 +307,10 @@ declare_def_snprint(reassign_maps, print_yes_no) - declare_def_handler(multipath_dir, set_str) - declare_def_snprint(multipath_dir, print_str) - --static int def_partition_delim_handler(struct config *conf, vector strvec) -+static int def_partition_delim_handler(struct config *conf, vector strvec, -+ const char *file, int line_nr) - { -- int rc = set_str(strvec, &conf->partition_delim); -+ int rc = set_str(strvec, &conf->partition_delim, file, line_nr); - - if (rc != 0) - return rc; -@@ -334,13 +340,13 @@ static const char * const find_multipaths_optvals[] = { - }; - - static int --def_find_multipaths_handler(struct config *conf, vector strvec) -+def_find_multipaths_handler(struct config *conf, vector strvec, -+ const char *file, int line_nr) - { - char *buff; - int i; - -- if (set_yes_no_undef(strvec, &conf->find_multipaths) == 0 && -- conf->find_multipaths != FIND_MULTIPATHS_UNDEF) -+ if (set_yes_no_undef(strvec, &conf->find_multipaths, file, line_nr) == 0 && conf->find_multipaths != FIND_MULTIPATHS_UNDEF) - return 0; - - buff = set_value(strvec); -@@ -396,7 +402,8 @@ static int snprint_uid_attrs(struct config *conf, struct strbuf *buff, - return total; - } - --static int uid_attrs_handler(struct config *conf, vector strvec) -+static int uid_attrs_handler(struct config *conf, vector strvec, -+ const char *file, int line_nr) - { - char *val; - -@@ -597,7 +604,8 @@ declare_hw_handler(skip_kpartx, set_yes_no_undef) - declare_hw_snprint(skip_kpartx, print_yes_no_undef) - declare_mp_handler(skip_kpartx, set_yes_no_undef) - declare_mp_snprint(skip_kpartx, print_yes_no_undef) --static int def_disable_changed_wwids_handler(struct config *conf, vector strvec) -+static int def_disable_changed_wwids_handler(struct config *conf, vector strvec, -+ const char *file, int line_nr) - { - return 0; - } -@@ -629,20 +637,23 @@ declare_def_snprint_defstr(enable_foreign, print_str, - DEFAULT_ENABLE_FOREIGN) - - static int --def_config_dir_handler(struct config *conf, vector strvec) -+def_config_dir_handler(struct config *conf, vector strvec, const char *file, -+ int line_nr) - { - /* this is only valid in the main config file */ - if (conf->processed_main_config) - return 0; -- return set_str(strvec, &conf->config_dir); -+ return set_str(strvec, &conf->config_dir, file, line_nr); - } - declare_def_snprint(config_dir, print_str) - - #define declare_def_attr_handler(option, function) \ - static int \ --def_ ## option ## _handler (struct config *conf, vector strvec) \ -+def_ ## option ## _handler (struct config *conf, vector strvec, \ -+ const char *file, int line_nr) \ - { \ -- return function (strvec, &conf->option, &conf->attribute_flags);\ -+ return function (strvec, &conf->option, &conf->attribute_flags, \ -+ file, line_nr); \ - } - - #define declare_def_attr_snprint(option, function) \ -@@ -655,12 +666,14 @@ snprint_def_ ## option (struct config *conf, struct strbuf *buff, \ - - #define declare_mp_attr_handler(option, function) \ - static int \ --mp_ ## option ## _handler (struct config *conf, vector strvec) \ -+mp_ ## option ## _handler (struct config *conf, vector strvec, \ -+ const char *file, int line_nr) \ - { \ - struct mpentry * mpe = VECTOR_LAST_SLOT(conf->mptable); \ - if (!mpe) \ - return 1; \ -- return function (strvec, &mpe->option, &mpe->attribute_flags); \ -+ return function (strvec, &mpe->option, &mpe->attribute_flags, \ -+ file, line_nr); \ - } - - #define declare_mp_attr_snprint(option, function) \ -@@ -673,7 +686,7 @@ snprint_mp_ ## option (struct config *conf, struct strbuf *buff, \ - } - - static int --set_mode(vector strvec, void *ptr, int *flags) -+set_mode(vector strvec, void *ptr, int *flags, const char *file, int line_nr) - { - mode_t mode; - mode_t *mode_ptr = (mode_t *)ptr; -@@ -694,7 +707,7 @@ set_mode(vector strvec, void *ptr, int *flags) - } - - static int --set_uid(vector strvec, void *ptr, int *flags) -+set_uid(vector strvec, void *ptr, int *flags, const char *file, int line_nr) - { - uid_t uid; - uid_t *uid_ptr = (uid_t *)ptr; -@@ -719,7 +732,7 @@ set_uid(vector strvec, void *ptr, int *flags) - } - - static int --set_gid(vector strvec, void *ptr, int *flags) -+set_gid(vector strvec, void *ptr, int *flags, const char *file, int line_nr) - { - gid_t gid; - gid_t *gid_ptr = (gid_t *)ptr; -@@ -786,7 +799,7 @@ declare_mp_attr_handler(gid, set_gid) - declare_mp_attr_snprint(gid, print_gid) - - static int --set_undef_off_zero(vector strvec, void *ptr) -+set_undef_off_zero(vector strvec, void *ptr, const char *file, int line_nr) - { - char * buff; - int *int_ptr = (int *)ptr; -@@ -827,7 +840,7 @@ declare_hw_handler(fast_io_fail, set_undef_off_zero) - declare_hw_snprint(fast_io_fail, print_undef_off_zero) - - static int --set_dev_loss(vector strvec, void *ptr) -+set_dev_loss(vector strvec, void *ptr, const char *file, int line_nr) - { - char * buff; - unsigned int *uint_ptr = (unsigned int *)ptr; -@@ -870,7 +883,7 @@ declare_hw_handler(eh_deadline, set_undef_off_zero) - declare_hw_snprint(eh_deadline, print_undef_off_zero) - - static int --set_pgpolicy(vector strvec, void *ptr) -+set_pgpolicy(vector strvec, void *ptr, const char *file, int line_nr) - { - char * buff; - int *int_ptr = (int *)ptr; -@@ -936,7 +949,8 @@ get_sys_max_fds(int *max_fds) - - - static int --max_fds_handler(struct config *conf, vector strvec) -+max_fds_handler(struct config *conf, vector strvec, const char *file, -+ int line_nr) - { - char * buff; - int r = 0, max_fds; -@@ -981,7 +995,7 @@ snprint_max_fds (struct config *conf, struct strbuf *buff, const void *data) - } - - static int --set_rr_weight(vector strvec, void *ptr) -+set_rr_weight(vector strvec, void *ptr, const char *file, int line_nr) - { - int *int_ptr = (int *)ptr; - char * buff; -@@ -1025,7 +1039,7 @@ declare_mp_handler(rr_weight, set_rr_weight) - declare_mp_snprint(rr_weight, print_rr_weight) - - static int --set_pgfailback(vector strvec, void *ptr) -+set_pgfailback(vector strvec, void *ptr, const char *file, int line_nr) - { - int *int_ptr = (int *)ptr; - char * buff; -@@ -1075,7 +1089,7 @@ declare_mp_handler(pgfailback, set_pgfailback) - declare_mp_snprint(pgfailback, print_pgfailback) - - static int --no_path_retry_helper(vector strvec, void *ptr) -+no_path_retry_helper(vector strvec, void *ptr, const char *file, int line_nr) - { - int *int_ptr = (int *)ptr; - char * buff; -@@ -1120,7 +1134,8 @@ declare_mp_handler(no_path_retry, no_path_retry_helper) - declare_mp_snprint(no_path_retry, print_no_path_retry) - - static int --def_log_checker_err_handler(struct config *conf, vector strvec) -+def_log_checker_err_handler(struct config *conf, vector strvec, -+ const char *file, int line_nr) - { - char * buff; - -@@ -1193,7 +1208,8 @@ print_reservation_key(struct strbuf *buff, - } - - static int --def_reservation_key_handler(struct config *conf, vector strvec) -+def_reservation_key_handler(struct config *conf, vector strvec, -+ const char *file, int line_nr) - { - return set_reservation_key(strvec, &conf->reservation_key, - &conf->sa_flags, -@@ -1209,7 +1225,8 @@ snprint_def_reservation_key (struct config *conf, struct strbuf *buff, - } - - static int --mp_reservation_key_handler(struct config *conf, vector strvec) -+mp_reservation_key_handler(struct config *conf, vector strvec, const char *file, -+ int line_nr) - { - struct mpentry * mpe = VECTOR_LAST_SLOT(conf->mptable); - if (!mpe) -@@ -1229,7 +1246,7 @@ snprint_mp_reservation_key (struct config *conf, struct strbuf *buff, - } - - static int --set_off_int_undef(vector strvec, void *ptr) -+set_off_int_undef(vector strvec, void *ptr, const char *file, int line_nr) - { - int *int_ptr = (int *)ptr; - char * buff; -@@ -1370,7 +1387,8 @@ declare_hw_snprint(recheck_wwid, print_yes_no_undef) - - - static int --def_uxsock_timeout_handler(struct config *conf, vector strvec) -+def_uxsock_timeout_handler(struct config *conf, vector strvec, const char *file, -+ int line_nr) - { - unsigned int uxsock_timeout; - char *buff; -@@ -1390,7 +1408,8 @@ def_uxsock_timeout_handler(struct config *conf, vector strvec) - } - - static int --hw_vpd_vendor_handler(struct config *conf, vector strvec) -+hw_vpd_vendor_handler(struct config *conf, vector strvec, const char *file, -+ int line_nr) - { - int i; - char *buff; -@@ -1430,7 +1449,8 @@ snprint_hw_vpd_vendor(struct config *conf, struct strbuf *buff, - * blacklist block handlers - */ - static int --blacklist_handler(struct config *conf, vector strvec) -+blacklist_handler(struct config *conf, vector strvec, const char*file, -+ int line_nr) - { - if (!conf->blist_devnode) - conf->blist_devnode = vector_alloc(); -@@ -1452,7 +1472,8 @@ blacklist_handler(struct config *conf, vector strvec) - } - - static int --blacklist_exceptions_handler(struct config *conf, vector strvec) -+blacklist_exceptions_handler(struct config *conf, vector strvec, -+ const char *file, int line_nr) - { - if (!conf->elist_devnode) - conf->elist_devnode = vector_alloc(); -@@ -1475,7 +1496,8 @@ blacklist_exceptions_handler(struct config *conf, vector strvec) - - #define declare_ble_handler(option) \ - static int \ --ble_ ## option ## _handler (struct config *conf, vector strvec) \ -+ble_ ## option ## _handler (struct config *conf, vector strvec, \ -+ const char *file, int line_nr) \ - { \ - char *buff; \ - int rc; \ -@@ -1494,7 +1516,8 @@ ble_ ## option ## _handler (struct config *conf, vector strvec) \ - - #define declare_ble_device_handler(name, option, vend, prod) \ - static int \ --ble_ ## option ## _ ## name ## _handler (struct config *conf, vector strvec) \ -+ble_ ## option ## _ ## name ## _handler (struct config *conf, vector strvec, \ -+ const char *file, int line_nr) \ - { \ - char * buff; \ - int rc; \ -@@ -1536,13 +1559,15 @@ snprint_ble_simple (struct config *conf, struct strbuf *buff, const void *data) - } - - static int --ble_device_handler(struct config *conf, vector strvec) -+ble_device_handler(struct config *conf, vector strvec, const char *file, -+ int line_nr) - { - return alloc_ble_device(conf->blist_device); - } - - static int --ble_except_device_handler(struct config *conf, vector strvec) -+ble_except_device_handler(struct config *conf, vector strvec, const char *file, -+ int line_nr) - { - return alloc_ble_device(conf->elist_device); - } -@@ -1574,7 +1599,8 @@ static int snprint_bled_product(struct config *conf, struct strbuf *buff, - * devices block handlers - */ - static int --devices_handler(struct config *conf, vector strvec) -+devices_handler(struct config *conf, vector strvec, const char *file, -+ int line_nr) - { - if (!conf->hwtable) - conf->hwtable = vector_alloc(); -@@ -1586,7 +1612,8 @@ devices_handler(struct config *conf, vector strvec) - } - - static int --device_handler(struct config *conf, vector strvec) -+device_handler(struct config *conf, vector strvec, const char *file, -+ int line_nr) - { - struct hwentry * hwe; - -@@ -1623,7 +1650,8 @@ declare_hw_snprint(hwhandler, print_str) - * overrides handlers - */ - static int --overrides_handler(struct config *conf, vector strvec) -+overrides_handler(struct config *conf, vector strvec, const char *file, -+ int line_nr) - { - if (!conf->overrides) - conf->overrides = alloc_hwe(); -@@ -1640,7 +1668,8 @@ overrides_handler(struct config *conf, vector strvec) - * multipaths block handlers - */ - static int --multipaths_handler(struct config *conf, vector strvec) -+multipaths_handler(struct config *conf, vector strvec, const char *file, -+ int line_nr) - { - if (!conf->mptable) - conf->mptable = vector_alloc(); -@@ -1652,7 +1681,8 @@ multipaths_handler(struct config *conf, vector strvec) - } - - static int --multipath_handler(struct config *conf, vector strvec) -+multipath_handler(struct config *conf, vector strvec, const char *file, -+ int line_nr) - { - struct mpentry * mpe; - -@@ -1681,7 +1711,8 @@ declare_mp_snprint(alias, print_str) - */ - - static int --deprecated_handler(struct config *conf, vector strvec) -+deprecated_handler(struct config *conf, vector strvec, const char *file, -+ int line_nr) - { - char * buff; - -diff --git a/libmultipath/parser.c b/libmultipath/parser.c -index d5595fb0..68262d0e 100644 ---- a/libmultipath/parser.c -+++ b/libmultipath/parser.c -@@ -558,7 +558,8 @@ process_stream(struct config *conf, FILE *stream, vector keywords, - goto out; - } - if (keyword->handler) { -- t = keyword->handler(conf, strvec); -+ t = keyword->handler(conf, strvec, file, -+ line_nr); - r += t; - if (t) - condlog(1, "%s line %d, parsing failed: %s", -diff --git a/libmultipath/parser.h b/libmultipath/parser.h -index 3452bde1..11ea2278 100644 ---- a/libmultipath/parser.h -+++ b/libmultipath/parser.h -@@ -43,7 +43,7 @@ struct strbuf; - - /* keyword definition */ - typedef int print_fn(struct config *, struct strbuf *, const void *); --typedef int handler_fn(struct config *, vector); -+typedef int handler_fn(struct config *, vector, const char *file, int line_nr); - - struct keyword { - char *string; diff --git a/0018-libmultipath-make-set_int-take-a-range-for-valid-val.patch b/0018-libmultipath-make-set_int-take-a-range-for-valid-val.patch deleted file mode 100644 index 21969af..0000000 --- a/0018-libmultipath-make-set_int-take-a-range-for-valid-val.patch +++ /dev/null @@ -1,251 +0,0 @@ -From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 -From: Benjamin Marzinski -Date: Thu, 11 Nov 2021 12:53:48 -0600 -Subject: [PATCH] libmultipath: make set_int take a range for valid values - -If a value outside of the valid range is passed to set_int, it caps the -value at appropriate limit, and issues a warning. - -Signed-off-by: Benjamin Marzinski -Reviewed-by: Martin Wilck ---- - libmultipath/dict.c | 121 +++++++++++++++++++++++++++----------------- - 1 file changed, 75 insertions(+), 46 deletions(-) - -diff --git a/libmultipath/dict.c b/libmultipath/dict.c -index eb2c44c0..57b6a7b6 100644 ---- a/libmultipath/dict.c -+++ b/libmultipath/dict.c -@@ -29,7 +29,8 @@ - #include "strbuf.h" - - static int --set_int(vector strvec, void *ptr, const char *file, int line_nr) -+set_int(vector strvec, void *ptr, int min, int max, const char *file, -+ int line_nr) - { - int *int_ptr = (int *)ptr; - char *buff, *eptr; -@@ -44,11 +45,17 @@ set_int(vector strvec, void *ptr, const char *file, int line_nr) - if (eptr > buff) - while (isspace(*eptr)) - eptr++; -- if (*buff == '\0' || *eptr != '\0' || res > INT_MAX || res < INT_MIN) { -- condlog(1, "%s: invalid value for %s: \"%s\"", -- __func__, (char*)VECTOR_SLOT(strvec, 0), buff); -+ if (*buff == '\0' || *eptr != '\0') { -+ condlog(1, "%s line %d, invalid value for %s: \"%s\"", -+ file, line_nr, (char*)VECTOR_SLOT(strvec, 0), buff); - rc = 1; - } else { -+ if (res > max || res < min) { -+ res = (res > max) ? max : min; -+ condlog(1, "%s line %d, value for %s too %s, capping at %ld", -+ file, line_nr, (char*)VECTOR_SLOT(strvec, 0), -+ (res == max)? "large" : "small", res); -+ } - rc = 0; - *int_ptr = res; - } -@@ -77,8 +84,8 @@ set_uint(vector strvec, void *ptr, const char *file, int line_nr) - while (isspace(*eptr)) - eptr++; - if (*buff == '\0' || *eptr != '\0' || !isdigit(*p) || res > UINT_MAX) { -- condlog(1, "%s: invalid value for %s: \"%s\"", -- __func__, (char*)VECTOR_SLOT(strvec, 0), buff); -+ condlog(1, "%s line %d, invalid value for %s: \"%s\"", -+ file, line_nr, (char*)VECTOR_SLOT(strvec, 0), buff); - rc = 1; - } else { - rc = 0; -@@ -193,6 +200,14 @@ def_ ## option ## _handler (struct config *conf, vector strvec, \ - return function (strvec, &conf->option, file, line_nr); \ - } - -+#define declare_def_range_handler(option, minval, maxval) \ -+static int \ -+def_ ## option ## _handler (struct config *conf, vector strvec, \ -+ const char *file, int line_nr) \ -+{ \ -+ return set_int(strvec, &conf->option, minval, maxval, file, line_nr); \ -+} -+ - #define declare_def_snprint(option, function) \ - static int \ - snprint_def_ ## option (struct config *conf, struct strbuf *buff, \ -@@ -234,6 +249,18 @@ hw_ ## option ## _handler (struct config *conf, vector strvec, \ - return function (strvec, &hwe->option, file, line_nr); \ - } - -+#define declare_hw_range_handler(option, minval, maxval) \ -+static int \ -+hw_ ## option ## _handler (struct config *conf, vector strvec, \ -+ const char *file, int line_nr) \ -+{ \ -+ struct hwentry * hwe = VECTOR_LAST_SLOT(conf->hwtable); \ -+ if (!hwe) \ -+ return 1; \ -+ return set_int(strvec, &hwe->option, minval, maxval, file, line_nr); \ -+} -+ -+ - #define declare_hw_snprint(option, function) \ - static int \ - snprint_hw_ ## option (struct config *conf, struct strbuf *buff, \ -@@ -253,6 +280,17 @@ ovr_ ## option ## _handler (struct config *conf, vector strvec, \ - return function (strvec, &conf->overrides->option, file, line_nr); \ - } - -+#define declare_ovr_range_handler(option, minval, maxval) \ -+static int \ -+ovr_ ## option ## _handler (struct config *conf, vector strvec, \ -+ const char *file, int line_nr) \ -+{ \ -+ if (!conf->overrides) \ -+ return 1; \ -+ return set_int(strvec, &conf->overrides->option, minval, maxval, \ -+ file, line_nr); \ -+} -+ - #define declare_ovr_snprint(option, function) \ - static int \ - snprint_ovr_ ## option (struct config *conf, struct strbuf *buff, \ -@@ -272,6 +310,17 @@ mp_ ## option ## _handler (struct config *conf, vector strvec, \ - return function (strvec, &mpe->option, file, line_nr); \ - } - -+#define declare_mp_range_handler(option, minval, maxval) \ -+static int \ -+mp_ ## option ## _handler (struct config *conf, vector strvec, \ -+ const char *file, int line_nr) \ -+{ \ -+ struct mpentry * mpe = VECTOR_LAST_SLOT(conf->mptable); \ -+ if (!mpe) \ -+ return 1; \ -+ return set_int(strvec, &mpe->option, minval, maxval, file, line_nr); \ -+} -+ - #define declare_mp_snprint(option, function) \ - static int \ - snprint_mp_ ## option (struct config *conf, struct strbuf *buff, \ -@@ -298,7 +347,7 @@ declare_def_snprint(checkint, print_int) - declare_def_handler(max_checkint, set_uint) - declare_def_snprint(max_checkint, print_int) - --declare_def_handler(verbosity, set_int) -+declare_def_range_handler(verbosity, 0, MAX_VERBOSITY) - declare_def_snprint(verbosity, print_int) - - declare_def_handler(reassign_maps, set_yes_no) -@@ -473,22 +522,22 @@ declare_ovr_snprint(checker_name, print_str) - declare_hw_handler(checker_name, set_str) - declare_hw_snprint(checker_name, print_str) - --declare_def_handler(minio, set_int) -+declare_def_range_handler(minio, 0, INT_MAX) - declare_def_snprint_defint(minio, print_int, DEFAULT_MINIO) --declare_ovr_handler(minio, set_int) -+declare_ovr_range_handler(minio, 0, INT_MAX) - declare_ovr_snprint(minio, print_nonzero) --declare_hw_handler(minio, set_int) -+declare_hw_range_handler(minio, 0, INT_MAX) - declare_hw_snprint(minio, print_nonzero) --declare_mp_handler(minio, set_int) -+declare_mp_range_handler(minio, 0, INT_MAX) - declare_mp_snprint(minio, print_nonzero) - --declare_def_handler(minio_rq, set_int) -+declare_def_range_handler(minio_rq, 0, INT_MAX) - declare_def_snprint_defint(minio_rq, print_int, DEFAULT_MINIO_RQ) --declare_ovr_handler(minio_rq, set_int) -+declare_ovr_range_handler(minio_rq, 0, INT_MAX) - declare_ovr_snprint(minio_rq, print_nonzero) --declare_hw_handler(minio_rq, set_int) -+declare_hw_range_handler(minio_rq, 0, INT_MAX) - declare_hw_snprint(minio_rq, print_nonzero) --declare_mp_handler(minio_rq, set_int) -+declare_mp_range_handler(minio_rq, 0, INT_MAX) - declare_mp_snprint(minio_rq, print_nonzero) - - declare_def_handler(queue_without_daemon, set_yes_no) -@@ -512,7 +561,7 @@ snprint_def_queue_without_daemon(struct config *conf, struct strbuf *buff, - return append_strbuf_quoted(buff, qwd); - } - --declare_def_handler(checker_timeout, set_int) -+declare_def_range_handler(checker_timeout, 0, INT_MAX) - declare_def_snprint(checker_timeout, print_nonzero) - - declare_def_handler(allow_usb_devices, set_yes_no) -@@ -583,13 +632,13 @@ declare_hw_snprint(deferred_remove, print_yes_no_undef) - declare_mp_handler(deferred_remove, set_yes_no_undef) - declare_mp_snprint(deferred_remove, print_yes_no_undef) - --declare_def_handler(retrigger_tries, set_int) -+declare_def_range_handler(retrigger_tries, 0, INT_MAX) - declare_def_snprint(retrigger_tries, print_int) - --declare_def_handler(retrigger_delay, set_int) -+declare_def_range_handler(retrigger_delay, 0, INT_MAX) - declare_def_snprint(retrigger_delay, print_int) - --declare_def_handler(uev_wait_timeout, set_int) -+declare_def_range_handler(uev_wait_timeout, 0, INT_MAX) - declare_def_snprint(uev_wait_timeout, print_int) - - declare_def_handler(strict_timing, set_yes_no) -@@ -616,19 +665,19 @@ static int snprint_def_disable_changed_wwids(struct config *conf, - return print_ignored(buff); - } - --declare_def_handler(remove_retries, set_int) -+declare_def_range_handler(remove_retries, 0, INT_MAX) - declare_def_snprint(remove_retries, print_int) - --declare_def_handler(max_sectors_kb, set_int) -+declare_def_range_handler(max_sectors_kb, 0, INT_MAX) - declare_def_snprint(max_sectors_kb, print_nonzero) --declare_ovr_handler(max_sectors_kb, set_int) -+declare_ovr_range_handler(max_sectors_kb, 0, INT_MAX) - declare_ovr_snprint(max_sectors_kb, print_nonzero) --declare_hw_handler(max_sectors_kb, set_int) -+declare_hw_range_handler(max_sectors_kb, 0, INT_MAX) - declare_hw_snprint(max_sectors_kb, print_nonzero) --declare_mp_handler(max_sectors_kb, set_int) -+declare_mp_range_handler(max_sectors_kb, 0, INT_MAX) - declare_mp_snprint(max_sectors_kb, print_nonzero) - --declare_def_handler(find_multipaths_timeout, set_int) -+declare_def_range_handler(find_multipaths_timeout, INT_MIN, INT_MAX) - declare_def_snprint_defint(find_multipaths_timeout, print_int, - DEFAULT_FIND_MULTIPATHS_TIMEOUT) - -@@ -1385,27 +1434,7 @@ declare_ovr_snprint(recheck_wwid, print_yes_no_undef) - declare_hw_handler(recheck_wwid, set_yes_no_undef) - declare_hw_snprint(recheck_wwid, print_yes_no_undef) - -- --static int --def_uxsock_timeout_handler(struct config *conf, vector strvec, const char *file, -- int line_nr) --{ -- unsigned int uxsock_timeout; -- char *buff; -- -- buff = set_value(strvec); -- if (!buff) -- return 1; -- -- if (sscanf(buff, "%u", &uxsock_timeout) == 1 && -- uxsock_timeout > DEFAULT_REPLY_TIMEOUT) -- conf->uxsock_timeout = uxsock_timeout; -- else -- conf->uxsock_timeout = DEFAULT_REPLY_TIMEOUT; -- -- free(buff); -- return 0; --} -+declare_def_range_handler(uxsock_timeout, DEFAULT_REPLY_TIMEOUT, INT_MAX) - - static int - hw_vpd_vendor_handler(struct config *conf, vector strvec, const char *file, diff --git a/0019-libmultipath-improve-checks-for-set_str.patch b/0019-libmultipath-improve-checks-for-set_str.patch deleted file mode 100644 index 0cd8627..0000000 --- a/0019-libmultipath-improve-checks-for-set_str.patch +++ /dev/null @@ -1,171 +0,0 @@ -From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 -From: Benjamin Marzinski -Date: Thu, 11 Nov 2021 12:53:49 -0600 -Subject: [PATCH] libmultipath: improve checks for set_str - -multipath always requires absolute pathnames, so make sure all file and -directory names start with a slash. Also check that the directories -exist. Finally, some strings, like the alias, will be used in paths. -These must not contain the slash character '/', since it is a forbidden -character in file/directory names. This patch adds seperate handlers for -these three cases. If a config line is invalid, these handlers retain -the existing config string, if any. - -Signed-off-by: Benjamin Marzinski -Reviewed-by: Martin Wilck ---- - libmultipath/dict.c | 88 +++++++++++++++++++++++++++++++++++++++------ - 1 file changed, 78 insertions(+), 10 deletions(-) - -diff --git a/libmultipath/dict.c b/libmultipath/dict.c -index 57b6a7b6..149d3348 100644 ---- a/libmultipath/dict.c -+++ b/libmultipath/dict.c -@@ -5,6 +5,8 @@ - * Copyright (c) 2005 Kiyoshi Ueda, NEC - */ - #include -+#include -+#include - #include - #include - #include "checkers.h" -@@ -111,6 +113,72 @@ set_str(vector strvec, void *ptr, const char *file, int line_nr) - return 0; - } - -+static int -+set_dir(vector strvec, void *ptr, const char *file, int line_nr) -+{ -+ char **str_ptr = (char **)ptr; -+ char *old_str = *str_ptr; -+ struct stat sb; -+ -+ *str_ptr = set_value(strvec); -+ if (!*str_ptr) { -+ free(old_str); -+ return 1; -+ } -+ if ((*str_ptr)[0] != '/'){ -+ condlog(1, "%s line %d, %s is not an absolute directory path. Ignoring", file, line_nr, *str_ptr); -+ *str_ptr = old_str; -+ } else { -+ if (stat(*str_ptr, &sb) == 0 && S_ISDIR(sb.st_mode)) -+ free(old_str); -+ else { -+ condlog(1, "%s line %d, %s is not an existing directory. Ignoring", file, line_nr, *str_ptr); -+ *str_ptr = old_str; -+ } -+ } -+ return 0; -+} -+ -+static int -+set_path(vector strvec, void *ptr, const char *file, int line_nr) -+{ -+ char **str_ptr = (char **)ptr; -+ char *old_str = *str_ptr; -+ -+ *str_ptr = set_value(strvec); -+ if (!*str_ptr) { -+ free(old_str); -+ return 1; -+ } -+ if ((*str_ptr)[0] != '/'){ -+ condlog(1, "%s line %d, %s is not an absolute path. Ignoring", -+ file, line_nr, *str_ptr); -+ *str_ptr = old_str; -+ } else -+ free(old_str); -+ return 0; -+} -+ -+static int -+set_str_noslash(vector strvec, void *ptr, const char *file, int line_nr) -+{ -+ char **str_ptr = (char **)ptr; -+ char *old_str = *str_ptr; -+ -+ *str_ptr = set_value(strvec); -+ if (!*str_ptr) { -+ free(old_str); -+ return 1; -+ } -+ if (strchr(*str_ptr, '/')) { -+ condlog(1, "%s line %d, %s cannot contain a slash. Ignoring", -+ file, line_nr, *str_ptr); -+ *str_ptr = old_str; -+ } else -+ free(old_str); -+ return 0; -+} -+ - static int - set_yes_no(vector strvec, void *ptr, const char *file, int line_nr) - { -@@ -353,13 +421,13 @@ declare_def_snprint(verbosity, print_int) - declare_def_handler(reassign_maps, set_yes_no) - declare_def_snprint(reassign_maps, print_yes_no) - --declare_def_handler(multipath_dir, set_str) -+declare_def_handler(multipath_dir, set_dir) - declare_def_snprint(multipath_dir, print_str) - - static int def_partition_delim_handler(struct config *conf, vector strvec, - const char *file, int line_nr) - { -- int rc = set_str(strvec, &conf->partition_delim, file, line_nr); -+ int rc = set_str_noslash(strvec, &conf->partition_delim, file, line_nr); - - if (rc != 0) - return rc; -@@ -490,11 +558,11 @@ declare_hw_snprint(prio_name, print_str) - declare_mp_handler(prio_name, set_str) - declare_mp_snprint(prio_name, print_str) - --declare_def_handler(alias_prefix, set_str) -+declare_def_handler(alias_prefix, set_str_noslash) - declare_def_snprint_defstr(alias_prefix, print_str, DEFAULT_ALIAS_PREFIX) --declare_ovr_handler(alias_prefix, set_str) -+declare_ovr_handler(alias_prefix, set_str_noslash) - declare_ovr_snprint(alias_prefix, print_str) --declare_hw_handler(alias_prefix, set_str) -+declare_hw_handler(alias_prefix, set_str_noslash) - declare_hw_snprint(alias_prefix, print_str) - - declare_def_handler(prio_args, set_str) -@@ -586,13 +654,13 @@ declare_hw_snprint(user_friendly_names, print_yes_no_undef) - declare_mp_handler(user_friendly_names, set_yes_no_undef) - declare_mp_snprint(user_friendly_names, print_yes_no_undef) - --declare_def_handler(bindings_file, set_str) -+declare_def_handler(bindings_file, set_path) - declare_def_snprint(bindings_file, print_str) - --declare_def_handler(wwids_file, set_str) -+declare_def_handler(wwids_file, set_path) - declare_def_snprint(wwids_file, print_str) - --declare_def_handler(prkeys_file, set_str) -+declare_def_handler(prkeys_file, set_path) - declare_def_snprint(prkeys_file, print_str) - - declare_def_handler(retain_hwhandler, set_yes_no_undef) -@@ -692,7 +760,7 @@ def_config_dir_handler(struct config *conf, vector strvec, const char *file, - /* this is only valid in the main config file */ - if (conf->processed_main_config) - return 0; -- return set_str(strvec, &conf->config_dir, file, line_nr); -+ return set_path(strvec, &conf->config_dir, file, line_nr); - } - declare_def_snprint(config_dir, print_str) - -@@ -1732,7 +1800,7 @@ multipath_handler(struct config *conf, vector strvec, const char *file, - declare_mp_handler(wwid, set_str) - declare_mp_snprint(wwid, print_str) - --declare_mp_handler(alias, set_str) -+declare_mp_handler(alias, set_str_noslash) - declare_mp_snprint(alias, print_str) - - /* diff --git a/0020-libmultipath-deprecate-file-and-directory-config-opt.patch b/0020-libmultipath-deprecate-file-and-directory-config-opt.patch deleted file mode 100644 index 32e1b23..0000000 --- a/0020-libmultipath-deprecate-file-and-directory-config-opt.patch +++ /dev/null @@ -1,115 +0,0 @@ -From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 -From: Benjamin Marzinski -Date: Thu, 11 Nov 2021 12:53:50 -0600 -Subject: [PATCH] libmultipath: deprecate file and directory config options - -Having multipath able to select pathnames for the files and directories -it needs causes unnecessary maintainer headaches. Mark these as -deprecated, but still support them for now. - -Signed-off-by: Benjamin Marzinski -Reviewed-by: Martin Wilck ---- - libmultipath/dict.c | 19 +++++++++++++++---- - multipath/multipath.conf.5 | 5 +++++ - 2 files changed, 20 insertions(+), 4 deletions(-) - -diff --git a/libmultipath/dict.c b/libmultipath/dict.c -index 149d3348..d14be340 100644 ---- a/libmultipath/dict.c -+++ b/libmultipath/dict.c -@@ -268,6 +268,15 @@ def_ ## option ## _handler (struct config *conf, vector strvec, \ - return function (strvec, &conf->option, file, line_nr); \ - } - -+#define declare_def_warn_handler(option, function) \ -+static int \ -+def_ ## option ## _handler (struct config *conf, vector strvec, \ -+ const char *file, int line_nr) \ -+{ \ -+ condlog(2, "%s line %d, \"" #option "\" is deprecated and will be disabled in a future release", file, line_nr); \ -+ return function (strvec, &conf->option, file, line_nr); \ -+} -+ - #define declare_def_range_handler(option, minval, maxval) \ - static int \ - def_ ## option ## _handler (struct config *conf, vector strvec, \ -@@ -421,7 +430,7 @@ declare_def_snprint(verbosity, print_int) - declare_def_handler(reassign_maps, set_yes_no) - declare_def_snprint(reassign_maps, print_yes_no) - --declare_def_handler(multipath_dir, set_dir) -+declare_def_warn_handler(multipath_dir, set_dir) - declare_def_snprint(multipath_dir, print_str) - - static int def_partition_delim_handler(struct config *conf, vector strvec, -@@ -654,13 +663,13 @@ declare_hw_snprint(user_friendly_names, print_yes_no_undef) - declare_mp_handler(user_friendly_names, set_yes_no_undef) - declare_mp_snprint(user_friendly_names, print_yes_no_undef) - --declare_def_handler(bindings_file, set_path) -+declare_def_warn_handler(bindings_file, set_path) - declare_def_snprint(bindings_file, print_str) - --declare_def_handler(wwids_file, set_path) -+declare_def_warn_handler(wwids_file, set_path) - declare_def_snprint(wwids_file, print_str) - --declare_def_handler(prkeys_file, set_path) -+declare_def_warn_handler(prkeys_file, set_path) - declare_def_snprint(prkeys_file, print_str) - - declare_def_handler(retain_hwhandler, set_yes_no_undef) -@@ -760,6 +769,8 @@ def_config_dir_handler(struct config *conf, vector strvec, const char *file, - /* this is only valid in the main config file */ - if (conf->processed_main_config) - return 0; -+ condlog(2, "%s line %d, \"config_dir\" is deprecated and will be disabled in a future release", -+ file, line_nr); - return set_path(strvec, &conf->config_dir, file, line_nr); - } - declare_def_snprint(config_dir, print_str) -diff --git a/multipath/multipath.conf.5 b/multipath/multipath.conf.5 -index c74129bd..88d2a1df 100644 ---- a/multipath/multipath.conf.5 -+++ b/multipath/multipath.conf.5 -@@ -178,6 +178,7 @@ The default is: \fBno\fR - . - .TP - .B multipath_dir -+This option is deprecated, and will be removed in a future release. - Directory where the dynamic shared objects are stored. Defined at compile time, - commonly \fI/lib64/multipath/\fR or \fI/lib/multipath/\fR. - .RS -@@ -742,6 +743,7 @@ The default is: \fB\fR - . - .TP - .B bindings_file -+This option is deprecated, and will be removed in a future release. - The full pathname of the binding file to be used when the user_friendly_names - option is set. - .RS -@@ -752,6 +754,7 @@ The default is: \fB/etc/multipath/bindings\fR - . - .TP - .B wwids_file -+This option is deprecated, and will be removed in a future release. - The full pathname of the WWIDs file, which is used by multipath to keep track - of the WWIDs for LUNs it has created multipath devices on in the past. - .RS -@@ -762,6 +765,7 @@ The default is: \fB/etc/multipath/wwids\fR - . - .TP - .B prkeys_file -+This option is deprecated, and will be removed in a future release. - The full pathname of the prkeys file, which is used by multipathd to keep - track of the persistent reservation key used for a specific WWID, when - \fIreservation_key\fR is set to \fBfile\fR. -@@ -933,6 +937,7 @@ The default is: \fB\fR - . - .TP - .B config_dir -+This option is deprecated, and will be removed in a future release. - If set to anything other than "", multipath will search this directory - alphabetically for file ending in ".conf" and it will read configuration - information from them, just as if it was in \fI/etc/multipath.conf\fR. diff --git a/0021-libmultipath-split-set_int-to-enable-reuse.patch b/0021-libmultipath-split-set_int-to-enable-reuse.patch deleted file mode 100644 index 4f4b09a..0000000 --- a/0021-libmultipath-split-set_int-to-enable-reuse.patch +++ /dev/null @@ -1,192 +0,0 @@ -From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 -From: Benjamin Marzinski -Date: Thu, 11 Nov 2021 12:53:51 -0600 -Subject: [PATCH] libmultipath: split set_int to enable reuse - -Split the code that does the actual value parsing out of set_int(), into -a helper function, do_set_int(), so that it can be used by other -handlers. These functions no longer set the config value at all, when -they have invalid input. - -Signed-off-by: Benjamin Marzinski -Reviewed-by: Martin Wilck ---- - libmultipath/dict.c | 82 +++++++++++++++++++++++++-------------------- - 1 file changed, 46 insertions(+), 36 deletions(-) - -diff --git a/libmultipath/dict.c b/libmultipath/dict.c -index d14be340..68647061 100644 ---- a/libmultipath/dict.c -+++ b/libmultipath/dict.c -@@ -31,17 +31,12 @@ - #include "strbuf.h" - - static int --set_int(vector strvec, void *ptr, int min, int max, const char *file, -- int line_nr) -+do_set_int(vector strvec, void *ptr, int min, int max, const char *file, -+ int line_nr, char *buff) - { - int *int_ptr = (int *)ptr; -- char *buff, *eptr; -+ char *eptr; - long res; -- int rc; -- -- buff = set_value(strvec); -- if (!buff) -- return 1; - - res = strtol(buff, &eptr, 10); - if (eptr > buff) -@@ -50,17 +45,30 @@ set_int(vector strvec, void *ptr, int min, int max, const char *file, - if (*buff == '\0' || *eptr != '\0') { - condlog(1, "%s line %d, invalid value for %s: \"%s\"", - file, line_nr, (char*)VECTOR_SLOT(strvec, 0), buff); -- rc = 1; -- } else { -- if (res > max || res < min) { -- res = (res > max) ? max : min; -- condlog(1, "%s line %d, value for %s too %s, capping at %ld", -+ return 1; -+ } -+ if (res > max || res < min) { -+ res = (res > max) ? max : min; -+ condlog(1, "%s line %d, value for %s too %s, capping at %ld", - file, line_nr, (char*)VECTOR_SLOT(strvec, 0), -- (res == max)? "large" : "small", res); -- } -- rc = 0; -- *int_ptr = res; -+ (res == max)? "large" : "small", res); - } -+ *int_ptr = res; -+ return 0; -+} -+ -+static int -+set_int(vector strvec, void *ptr, int min, int max, const char *file, -+ int line_nr) -+{ -+ char *buff; -+ int rc; -+ -+ buff = set_value(strvec); -+ if (!buff) -+ return 1; -+ -+ rc = do_set_int(strvec, ptr, min, max, file, line_nr, buff); - - FREE(buff); - return rc; -@@ -929,6 +937,7 @@ declare_mp_attr_snprint(gid, print_gid) - static int - set_undef_off_zero(vector strvec, void *ptr, const char *file, int line_nr) - { -+ int rc = 0; - char * buff; - int *int_ptr = (int *)ptr; - -@@ -938,10 +947,10 @@ set_undef_off_zero(vector strvec, void *ptr, const char *file, int line_nr) - - if (strcmp(buff, "off") == 0) - *int_ptr = UOZ_OFF; -- else if (sscanf(buff, "%d", int_ptr) != 1 || -- *int_ptr < UOZ_ZERO) -- *int_ptr = UOZ_UNDEF; -- else if (*int_ptr == 0) -+ else -+ rc = do_set_int(strvec, int_ptr, 0, INT_MAX, file, line_nr, -+ buff); -+ if (rc == 0 && *int_ptr == 0) - *int_ptr = UOZ_ZERO; - - FREE(buff); -@@ -1093,14 +1102,12 @@ max_fds_handler(struct config *conf, vector strvec, const char *file, - /* Assume safe limit */ - max_fds = 4096; - } -- if (strlen(buff) == 3 && -- !strcmp(buff, "max")) -- conf->max_fds = max_fds; -- else -- conf->max_fds = atoi(buff); -- -- if (conf->max_fds > max_fds) -+ if (!strcmp(buff, "max")) { - conf->max_fds = max_fds; -+ r = 0; -+ } else -+ r = do_set_int(strvec, &conf->max_fds, 0, max_fds, file, -+ line_nr, buff); - - FREE(buff); - -@@ -1169,6 +1176,7 @@ declare_mp_snprint(rr_weight, print_rr_weight) - static int - set_pgfailback(vector strvec, void *ptr, const char *file, int line_nr) - { -+ int rc = 0; - int *int_ptr = (int *)ptr; - char * buff; - -@@ -1183,11 +1191,11 @@ set_pgfailback(vector strvec, void *ptr, const char *file, int line_nr) - else if (strlen(buff) == 10 && !strcmp(buff, "followover")) - *int_ptr = -FAILBACK_FOLLOWOVER; - else -- *int_ptr = atoi(buff); -+ rc = do_set_int(strvec, ptr, 0, INT_MAX, file, line_nr, buff); - - FREE(buff); - -- return 0; -+ return rc; - } - - int -@@ -1219,6 +1227,7 @@ declare_mp_snprint(pgfailback, print_pgfailback) - static int - no_path_retry_helper(vector strvec, void *ptr, const char *file, int line_nr) - { -+ int rc = 0; - int *int_ptr = (int *)ptr; - char * buff; - -@@ -1230,11 +1239,11 @@ no_path_retry_helper(vector strvec, void *ptr, const char *file, int line_nr) - *int_ptr = NO_PATH_RETRY_FAIL; - else if (!strcmp(buff, "queue")) - *int_ptr = NO_PATH_RETRY_QUEUE; -- else if ((*int_ptr = atoi(buff)) < 1) -- *int_ptr = NO_PATH_RETRY_UNDEF; -+ else -+ rc = do_set_int(strvec, ptr, 1, INT_MAX, file, line_nr, buff); - - FREE(buff); -- return 0; -+ return rc; - } - - int -@@ -1376,6 +1385,7 @@ snprint_mp_reservation_key (struct config *conf, struct strbuf *buff, - static int - set_off_int_undef(vector strvec, void *ptr, const char *file, int line_nr) - { -+ int rc =0; - int *int_ptr = (int *)ptr; - char * buff; - -@@ -1385,11 +1395,11 @@ set_off_int_undef(vector strvec, void *ptr, const char *file, int line_nr) - - if (!strcmp(buff, "no") || !strcmp(buff, "0")) - *int_ptr = NU_NO; -- else if ((*int_ptr = atoi(buff)) < 1) -- *int_ptr = NU_UNDEF; -+ else -+ rc = do_set_int(strvec, ptr, 1, INT_MAX, file, line_nr, buff); - - FREE(buff); -- return 0; -+ return rc; - } - - int diff --git a/0022-libmultipath-cleanup-invalid-config-handling.patch b/0022-libmultipath-cleanup-invalid-config-handling.patch deleted file mode 100644 index fcdca11..0000000 --- a/0022-libmultipath-cleanup-invalid-config-handling.patch +++ /dev/null @@ -1,202 +0,0 @@ -From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 -From: Benjamin Marzinski -Date: Thu, 11 Nov 2021 12:53:52 -0600 -Subject: [PATCH] libmultipath: cleanup invalid config handling - -Add error reporting to the remaining config handlers. If the value is -invalid, do not change the existing config option's value. Also print -an error whenever 0 is returned for an invalid value. When the handler -returns 1, config processing already fails with an error message. - -Signed-off-by: Benjamin Marzinski -Reviewed-by: Martin Wilck ---- - libmultipath/dict.c | 73 +++++++++++++++++++++++++++++++-------------- - 1 file changed, 51 insertions(+), 22 deletions(-) - -diff --git a/libmultipath/dict.c b/libmultipath/dict.c -index 68647061..c534d703 100644 ---- a/libmultipath/dict.c -+++ b/libmultipath/dict.c -@@ -199,8 +199,11 @@ set_yes_no(vector strvec, void *ptr, const char *file, int line_nr) - - if (strcmp(buff, "yes") == 0 || strcmp(buff, "1") == 0) - *int_ptr = YN_YES; -- else -+ else if (strcmp(buff, "no") == 0 || strcmp(buff, "0") == 0) - *int_ptr = YN_NO; -+ else -+ condlog(1, "%s line %d, invalid value for %s: \"%s\"", -+ file, line_nr, (char*)VECTOR_SLOT(strvec, 0), buff); - - FREE(buff); - return 0; -@@ -221,7 +224,8 @@ set_yes_no_undef(vector strvec, void *ptr, const char *file, int line_nr) - else if (strcmp(buff, "yes") == 0 || strcmp(buff, "1") == 0) - *int_ptr = YNU_YES; - else -- *int_ptr = YNU_UNDEF; -+ condlog(1, "%s line %d, invalid value for %s: \"%s\"", -+ file, line_nr, (char*)VECTOR_SLOT(strvec, 0), buff); - - FREE(buff); - return 0; -@@ -480,9 +484,6 @@ def_find_multipaths_handler(struct config *conf, vector strvec, - char *buff; - int i; - -- if (set_yes_no_undef(strvec, &conf->find_multipaths, file, line_nr) == 0 && conf->find_multipaths != FIND_MULTIPATHS_UNDEF) -- return 0; -- - buff = set_value(strvec); - if (!buff) - return 1; -@@ -495,9 +496,14 @@ def_find_multipaths_handler(struct config *conf, vector strvec, - } - } - -- if (conf->find_multipaths == YNU_UNDEF) { -- condlog(0, "illegal value for find_multipaths: %s", buff); -- conf->find_multipaths = DEFAULT_FIND_MULTIPATHS; -+ if (i >= __FIND_MULTIPATHS_LAST) { -+ if (strcmp(buff, "no") == 0 || strcmp(buff, "0") == 0) -+ conf->find_multipaths = FIND_MULTIPATHS_OFF; -+ else if (strcmp(buff, "yes") == 0 || strcmp(buff, "1") == 0) -+ conf->find_multipaths = FIND_MULTIPATHS_ON; -+ else -+ condlog(1, "%s line %d, invalid value for find_multipaths: \"%s\"", -+ file, line_nr, buff); - } - - FREE(buff); -@@ -546,8 +552,10 @@ static int uid_attrs_handler(struct config *conf, vector strvec, - if (!val) - return 1; - if (parse_uid_attrs(val, conf)) -- condlog(1, "error parsing uid_attrs: \"%s\"", val); -- condlog(3, "parsed %d uid_attrs", VECTOR_SIZE(&conf->uid_attrs)); -+ condlog(1, "%s line %d,error parsing uid_attrs: \"%s\"", file, -+ line_nr, val); -+ else -+ condlog(4, "parsed %d uid_attrs", VECTOR_SIZE(&conf->uid_attrs)); - FREE(val); - return 0; - } -@@ -775,8 +783,11 @@ def_config_dir_handler(struct config *conf, vector strvec, const char *file, - int line_nr) - { - /* this is only valid in the main config file */ -- if (conf->processed_main_config) -+ if (conf->processed_main_config) { -+ condlog(1, "%s line %d, config_dir option only valid in /etc/multipath.conf", -+ file, line_nr); - return 0; -+ } - condlog(2, "%s line %d, \"config_dir\" is deprecated and will be disabled in a future release", - file, line_nr); - return set_path(strvec, &conf->config_dir, file, line_nr); -@@ -836,7 +847,9 @@ set_mode(vector strvec, void *ptr, int *flags, const char *file, int line_nr) - if (sscanf(buff, "%o", &mode) == 1 && mode <= 0777) { - *flags |= (1 << ATTR_MODE); - *mode_ptr = mode; -- } -+ } else -+ condlog(1, "%s line %d, invalid value for mode: \"%s\"", -+ file, line_nr, buff); - - FREE(buff); - return 0; -@@ -861,7 +874,9 @@ set_uid(vector strvec, void *ptr, int *flags, const char *file, int line_nr) - else if (sscanf(buff, "%u", &uid) == 1){ - *flags |= (1 << ATTR_UID); - *uid_ptr = uid; -- } -+ } else -+ condlog(1, "%s line %d, invalid value for uid: \"%s\"", -+ file, line_nr, buff); - - FREE(buff); - return 0; -@@ -887,7 +902,9 @@ set_gid(vector strvec, void *ptr, int *flags, const char *file, int line_nr) - else if (sscanf(buff, "%u", &gid) == 1){ - *flags |= (1 << ATTR_GID); - *gid_ptr = gid; -- } -+ } else -+ condlog(1, "%s line %d, invalid value for gid: \"%s\"", -+ file, line_nr, buff); - FREE(buff); - return 0; - } -@@ -989,7 +1006,8 @@ set_dev_loss(vector strvec, void *ptr, const char *file, int line_nr) - if (!strcmp(buff, "infinity")) - *uint_ptr = MAX_DEV_LOSS_TMO; - else if (sscanf(buff, "%u", uint_ptr) != 1) -- *uint_ptr = DEV_LOSS_TMO_UNSET; -+ condlog(1, "%s line %d, invalid value for dev_loss_tmo: \"%s\"", -+ file, line_nr, buff); - - FREE(buff); - return 0; -@@ -1023,13 +1041,19 @@ static int - set_pgpolicy(vector strvec, void *ptr, const char *file, int line_nr) - { - char * buff; -+ int policy; - int *int_ptr = (int *)ptr; - - buff = set_value(strvec); - if (!buff) - return 1; - -- *int_ptr = get_pgpolicy_id(buff); -+ policy = get_pgpolicy_id(buff); -+ if (policy != IOPOLICY_UNDEF) -+ *int_ptr = policy; -+ else -+ condlog(1, "%s line %d, invalid value for path_grouping_policy: \"%s\"", -+ file, line_nr, buff); - FREE(buff); - - return 0; -@@ -1142,10 +1166,11 @@ set_rr_weight(vector strvec, void *ptr, const char *file, int line_nr) - - if (!strcmp(buff, "priorities")) - *int_ptr = RR_WEIGHT_PRIO; -- -- if (!strcmp(buff, "uniform")) -+ else if (!strcmp(buff, "uniform")) - *int_ptr = RR_WEIGHT_NONE; -- -+ else -+ condlog(1, "%s line %d, invalid value for rr_weight: \"%s\"", -+ file, line_nr, buff); - FREE(buff); - - return 0; -@@ -1281,10 +1306,13 @@ def_log_checker_err_handler(struct config *conf, vector strvec, - if (!buff) - return 1; - -- if (strlen(buff) == 4 && !strcmp(buff, "once")) -+ if (!strcmp(buff, "once")) - conf->log_checker_err = LOG_CHKR_ERR_ONCE; -- else if (strlen(buff) == 6 && !strcmp(buff, "always")) -+ else if (!strcmp(buff, "always")) - conf->log_checker_err = LOG_CHKR_ERR_ALWAYS; -+ else -+ condlog(1, "%s line %d, invalid value for log_checker_err: \"%s\"", -+ file, line_nr, buff); - - free(buff); - return 0; -@@ -1545,7 +1573,8 @@ hw_vpd_vendor_handler(struct config *conf, vector strvec, const char *file, - goto out; - } - } -- hwe->vpd_vendor_id = 0; -+ condlog(1, "%s line %d, invalid value for vpd_vendor: \"%s\"", -+ file, line_nr, buff); - out: - FREE(buff); - return 0; diff --git a/0023-libmultipath-don-t-return-error-on-invalid-values.patch b/0023-libmultipath-don-t-return-error-on-invalid-values.patch deleted file mode 100644 index 2d651e2..0000000 --- a/0023-libmultipath-don-t-return-error-on-invalid-values.patch +++ /dev/null @@ -1,219 +0,0 @@ -From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 -From: Benjamin Marzinski -Date: Thu, 11 Nov 2021 19:24:31 -0600 -Subject: [PATCH] libmultipath: don't return error on invalid values - -do_set_int and set_uint return 1 for invalid values. This can cause -multipath to fail completely, while reading the config. The config -handlers should only return a non-zero value if there is an internal -error, not if there is just an invalid value. - -Signed-off-by: Benjamin Marzinski -Reviewed-by: Martin Wilck ---- - libmultipath/dict.c | 64 ++++++++++++++++++--------------------------- - 1 file changed, 25 insertions(+), 39 deletions(-) - -diff --git a/libmultipath/dict.c b/libmultipath/dict.c -index c534d703..1b75be47 100644 ---- a/libmultipath/dict.c -+++ b/libmultipath/dict.c -@@ -30,7 +30,7 @@ - #include "dict.h" - #include "strbuf.h" - --static int -+static void - do_set_int(vector strvec, void *ptr, int min, int max, const char *file, - int line_nr, char *buff) - { -@@ -45,7 +45,7 @@ do_set_int(vector strvec, void *ptr, int min, int max, const char *file, - if (*buff == '\0' || *eptr != '\0') { - condlog(1, "%s line %d, invalid value for %s: \"%s\"", - file, line_nr, (char*)VECTOR_SLOT(strvec, 0), buff); -- return 1; -+ return; - } - if (res > max || res < min) { - res = (res > max) ? max : min; -@@ -54,7 +54,7 @@ do_set_int(vector strvec, void *ptr, int min, int max, const char *file, - (res == max)? "large" : "small", res); - } - *int_ptr = res; -- return 0; -+ return; - } - - static int -@@ -62,16 +62,15 @@ set_int(vector strvec, void *ptr, int min, int max, const char *file, - int line_nr) - { - char *buff; -- int rc; - - buff = set_value(strvec); - if (!buff) - return 1; - -- rc = do_set_int(strvec, ptr, min, max, file, line_nr, buff); -+ do_set_int(strvec, ptr, min, max, file, line_nr, buff); - - FREE(buff); -- return rc; -+ return 0; - } - - static int -@@ -80,7 +79,6 @@ set_uint(vector strvec, void *ptr, const char *file, int line_nr) - unsigned int *uint_ptr = (unsigned int *)ptr; - char *buff, *eptr, *p; - unsigned long res; -- int rc; - - buff = set_value(strvec); - if (!buff) -@@ -93,17 +91,14 @@ set_uint(vector strvec, void *ptr, const char *file, int line_nr) - if (eptr > buff) - while (isspace(*eptr)) - eptr++; -- if (*buff == '\0' || *eptr != '\0' || !isdigit(*p) || res > UINT_MAX) { -+ if (*buff == '\0' || *eptr != '\0' || !isdigit(*p) || res > UINT_MAX) - condlog(1, "%s line %d, invalid value for %s: \"%s\"", - file, line_nr, (char*)VECTOR_SLOT(strvec, 0), buff); -- rc = 1; -- } else { -- rc = 0; -+ else - *uint_ptr = res; -- } - - FREE(buff); -- return rc; -+ return 0; - } - - static int -@@ -954,7 +949,6 @@ declare_mp_attr_snprint(gid, print_gid) - static int - set_undef_off_zero(vector strvec, void *ptr, const char *file, int line_nr) - { -- int rc = 0; - char * buff; - int *int_ptr = (int *)ptr; - -@@ -964,11 +958,10 @@ set_undef_off_zero(vector strvec, void *ptr, const char *file, int line_nr) - - if (strcmp(buff, "off") == 0) - *int_ptr = UOZ_OFF; -- else -- rc = do_set_int(strvec, int_ptr, 0, INT_MAX, file, line_nr, -- buff); -- if (rc == 0 && *int_ptr == 0) -+ else if (strcmp(buff, "0") == 0) - *int_ptr = UOZ_ZERO; -+ else -+ do_set_int(strvec, int_ptr, 1, INT_MAX, file, line_nr, buff); - - FREE(buff); - return 0; -@@ -1114,28 +1107,24 @@ max_fds_handler(struct config *conf, vector strvec, const char *file, - int line_nr) - { - char * buff; -- int r = 0, max_fds; -+ int max_fds; - - buff = set_value(strvec); - - if (!buff) - return 1; - -- r = get_sys_max_fds(&max_fds); -- if (r) { -- /* Assume safe limit */ -- max_fds = 4096; -- } -- if (!strcmp(buff, "max")) { -+ if (get_sys_max_fds(&max_fds) != 0) -+ max_fds = 4096; /* Assume safe limit */ -+ if (!strcmp(buff, "max")) - conf->max_fds = max_fds; -- r = 0; -- } else -- r = do_set_int(strvec, &conf->max_fds, 0, max_fds, file, -- line_nr, buff); -+ else -+ do_set_int(strvec, &conf->max_fds, 0, max_fds, file, line_nr, -+ buff); - - FREE(buff); - -- return r; -+ return 0; - } - - static int -@@ -1201,7 +1190,6 @@ declare_mp_snprint(rr_weight, print_rr_weight) - static int - set_pgfailback(vector strvec, void *ptr, const char *file, int line_nr) - { -- int rc = 0; - int *int_ptr = (int *)ptr; - char * buff; - -@@ -1216,11 +1204,11 @@ set_pgfailback(vector strvec, void *ptr, const char *file, int line_nr) - else if (strlen(buff) == 10 && !strcmp(buff, "followover")) - *int_ptr = -FAILBACK_FOLLOWOVER; - else -- rc = do_set_int(strvec, ptr, 0, INT_MAX, file, line_nr, buff); -+ do_set_int(strvec, ptr, 0, INT_MAX, file, line_nr, buff); - - FREE(buff); - -- return rc; -+ return 0; - } - - int -@@ -1252,7 +1240,6 @@ declare_mp_snprint(pgfailback, print_pgfailback) - static int - no_path_retry_helper(vector strvec, void *ptr, const char *file, int line_nr) - { -- int rc = 0; - int *int_ptr = (int *)ptr; - char * buff; - -@@ -1265,10 +1252,10 @@ no_path_retry_helper(vector strvec, void *ptr, const char *file, int line_nr) - else if (!strcmp(buff, "queue")) - *int_ptr = NO_PATH_RETRY_QUEUE; - else -- rc = do_set_int(strvec, ptr, 1, INT_MAX, file, line_nr, buff); -+ do_set_int(strvec, ptr, 1, INT_MAX, file, line_nr, buff); - - FREE(buff); -- return rc; -+ return 0; - } - - int -@@ -1413,7 +1400,6 @@ snprint_mp_reservation_key (struct config *conf, struct strbuf *buff, - static int - set_off_int_undef(vector strvec, void *ptr, const char *file, int line_nr) - { -- int rc =0; - int *int_ptr = (int *)ptr; - char * buff; - -@@ -1424,10 +1410,10 @@ set_off_int_undef(vector strvec, void *ptr, const char *file, int line_nr) - if (!strcmp(buff, "no") || !strcmp(buff, "0")) - *int_ptr = NU_NO; - else -- rc = do_set_int(strvec, ptr, 1, INT_MAX, file, line_nr, buff); -+ do_set_int(strvec, ptr, 1, INT_MAX, file, line_nr, buff); - - FREE(buff); -- return rc; -+ return 0; - } - - int diff --git a/0024-multipathd-avoid-unnecessary-path-read-only-reloads.patch b/0024-multipathd-avoid-unnecessary-path-read-only-reloads.patch deleted file mode 100644 index 7bbe406..0000000 --- a/0024-multipathd-avoid-unnecessary-path-read-only-reloads.patch +++ /dev/null @@ -1,129 +0,0 @@ -From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 -From: Benjamin Marzinski -Date: Mon, 15 Nov 2021 10:54:35 -0600 -Subject: [PATCH] multipathd: avoid unnecessary path read-only reloads - -A mulitpath device can only be reloaded read/write when all paths are -read/write. Also, whenever a read-only device is rescanned, the scsi -subsystem will first unconditionally issue a uevent with DISK_RO=0 -before checking the read-only status, and if it the device is still -read-only, issuing another uevent with DISK_RO=1. These uevents cause -pointless reloads when read-only paths are rescanned. To avoid this, -check to see if all paths are read/write before changing a multipath -device from read-only to read/write. - -Signed-off-by: Benjamin Marzinski ---- - libmultipath/libmultipath.version | 5 +++++ - libmultipath/sysfs.c | 22 ++++++++++++++++++++++ - libmultipath/sysfs.h | 1 + - multipathd/main.c | 31 ++++++++++++++++++++++++++++++- - 4 files changed, 58 insertions(+), 1 deletion(-) - -diff --git a/libmultipath/libmultipath.version b/libmultipath/libmultipath.version -index eb5b5b55..dd1b4122 100644 ---- a/libmultipath/libmultipath.version -+++ b/libmultipath/libmultipath.version -@@ -287,3 +287,8 @@ global: - local: - *; - }; -+ -+LIBMULTIPATH_9.1.0 { -+global: -+ sysfs_get_ro; -+} LIBMULTIPATH_9.0.0; -diff --git a/libmultipath/sysfs.c b/libmultipath/sysfs.c -index 9ff145f2..24c12b6a 100644 ---- a/libmultipath/sysfs.c -+++ b/libmultipath/sysfs.c -@@ -236,6 +236,28 @@ sysfs_get_size (struct path *pp, unsigned long long * size) - return 0; - } - -+int -+sysfs_get_ro (struct path *pp) -+{ -+ int ro; -+ char buff[3]; /* Either "0\n\0" or "1\n\0" */ -+ -+ if (!pp->udev) -+ return -1; -+ -+ if (sysfs_attr_get_value(pp->udev, "ro", buff, sizeof(buff)) <= 0) { -+ condlog(3, "%s: Cannot read ro attribute in sysfs", pp->dev); -+ return -1; -+ } -+ -+ if (sscanf(buff, "%d\n", &ro) != 1 || ro < 0 || ro > 1) { -+ condlog(3, "%s: Cannot parse ro attribute", pp->dev); -+ return -1; -+ } -+ -+ return ro; -+} -+ - int sysfs_check_holders(char * check_devt, char * new_devt) - { - unsigned int major, new_minor, table_minor; -diff --git a/libmultipath/sysfs.h b/libmultipath/sysfs.h -index 72b39ab2..c948c467 100644 ---- a/libmultipath/sysfs.h -+++ b/libmultipath/sysfs.h -@@ -13,6 +13,7 @@ ssize_t sysfs_attr_get_value(struct udev_device *dev, const char *attr_name, - ssize_t sysfs_bin_attr_get_value(struct udev_device *dev, const char *attr_name, - unsigned char * value, size_t value_len); - int sysfs_get_size (struct path *pp, unsigned long long * size); -+int sysfs_get_ro(struct path *pp); - int sysfs_check_holders(char * check_devt, char * new_devt); - bool sysfs_is_multipathed(struct path *pp, bool set_wwid); - #endif -diff --git a/multipathd/main.c b/multipathd/main.c -index 1defeaf1..6145e512 100644 ---- a/multipathd/main.c -+++ b/multipathd/main.c -@@ -1324,6 +1324,35 @@ fail: - return REMOVE_PATH_MAP_ERROR; - } - -+static bool -+needs_ro_update(struct multipath *mpp, int ro) -+{ -+ struct pathgroup * pgp; -+ struct path * pp; -+ unsigned int i, j; -+ struct dm_info *dmi = NULL; -+ -+ if (!mpp || ro < 0) -+ return false; -+ dm_get_info(mpp->alias, &dmi); -+ if (!dmi) /* assume we do need to reload the device */ -+ return true; -+ if (dmi->read_only == ro) { -+ free(dmi); -+ return false; -+ } -+ free(dmi); -+ if (ro == 1) -+ return true; -+ vector_foreach_slot (mpp->pg, pgp, i) { -+ vector_foreach_slot (pgp->paths, pp, j) { -+ if (sysfs_get_ro(pp) == 1) -+ return false; -+ } -+ } -+ return true; -+} -+ - static int - uev_update_path (struct uevent *uev, struct vectors * vecs) - { -@@ -1388,7 +1417,7 @@ uev_update_path (struct uevent *uev, struct vectors * vecs) - } - - ro = uevent_get_disk_ro(uev); -- if (mpp && ro >= 0) { -+ if (needs_ro_update(mpp, ro)) { - condlog(2, "%s: update path write_protect to '%d' (uevent)", uev->kernel, ro); - - if (mpp->wait_for_udev) diff --git a/0035-libmultipath-use-asprintf-to-allocate-prefixed_uuid.patch b/0035-libmultipath-use-asprintf-to-allocate-prefixed_uuid.patch deleted file mode 100644 index 6e60d4a..0000000 --- a/0035-libmultipath-use-asprintf-to-allocate-prefixed_uuid.patch +++ /dev/null @@ -1,59 +0,0 @@ -From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 -From: Benjamin Marzinski -Date: Tue, 25 Jan 2022 23:02:33 -0600 -Subject: [PATCH] libmultipath: use asprintf() to allocate prefixed_uuid - -gcc 12.0.1 failed building libmultipath due to a format-overflow false -positive on 32-bit architectures. This isn't so surprising as -format-overflow=2 is very aggressive in the assumptions it makes about -the arguments. Here, it assumes that mpp->wwid could take up all the -space that a pointer could point to, even if I add code to this function -to explicitly null terminate mpp->wwid to fit in WWID_SIZE. - -To avoid this and simplify the function, switch from using calloc() and -sprintf() to just using asprintf(). - -For reference, the gcc build error that this fixes is: - -devmapper.c: In function 'dm_addmap.constprop.0': -devmapper.h:27:21: error: '%s' directive writing up to 2147483644 bytes into a region of size 2147483641 [-Werror=format-overflow=] - 27 | #define UUID_PREFIX "mpath-" - | ^~~~~~~~ -devmapper.c:484:53: note: format string is defined here - 484 | sprintf(prefixed_uuid, UUID_PREFIX "%s", mpp->wwid); - | ^~ - -Signed-off-by: Benjamin Marzinski ---- - libmultipath/devmapper.c | 7 ++----- - 1 file changed, 2 insertions(+), 5 deletions(-) - -diff --git a/libmultipath/devmapper.c b/libmultipath/devmapper.c -index c05dc201..bae07125 100644 ---- a/libmultipath/devmapper.c -+++ b/libmultipath/devmapper.c -@@ -474,14 +474,11 @@ dm_addmap (int task, const char *target, struct multipath *mpp, - dm_task_set_ro(dmt); - - if (task == DM_DEVICE_CREATE) { -- prefixed_uuid = MALLOC(UUID_PREFIX_LEN + -- strlen(mpp->wwid) + 1); -- if (!prefixed_uuid) { -+ if (asprintf(&prefixed_uuid, UUID_PREFIX "%s", mpp->wwid) < 0) { - condlog(0, "cannot create prefixed uuid : %s", - strerror(errno)); - goto addout; - } -- sprintf(prefixed_uuid, UUID_PREFIX "%s", mpp->wwid); - if (!dm_task_set_uuid(dmt, prefixed_uuid)) - goto freeout; - dm_task_skip_lockfs(dmt); -@@ -517,7 +514,7 @@ dm_addmap (int task, const char *target, struct multipath *mpp, - libmp_udev_wait(cookie); - freeout: - if (prefixed_uuid) -- FREE(prefixed_uuid); -+ free(prefixed_uuid); - - addout: - dm_task_destroy (dmt); diff --git a/0036-RH-add-support-to-mpathconf-for-setting-arbitrary-de.patch b/0036-RH-add-support-to-mpathconf-for-setting-arbitrary-de.patch deleted file mode 100644 index dff41f8..0000000 --- a/0036-RH-add-support-to-mpathconf-for-setting-arbitrary-de.patch +++ /dev/null @@ -1,149 +0,0 @@ -From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 -From: Benjamin Marzinski -Date: Wed, 2 Feb 2022 17:00:21 -0600 -Subject: [PATCH] RH: add support to mpathconf for setting arbitrary default - options - -mpathconf now supports --option :[] for setting, changing, -or removing options from the defaults section of multipath.conf. - -Signed-off-by: Benjamin Marzinski ---- - multipath/mpathconf | 58 ++++++++++++++++++++++++++++++++++++++++--- - multipath/mpathconf.8 | 7 ++++++ - 2 files changed, 62 insertions(+), 3 deletions(-) - -diff --git a/multipath/mpathconf b/multipath/mpathconf -index 0de6b121..6e33fb99 100644 ---- a/multipath/mpathconf -+++ b/multipath/mpathconf -@@ -17,7 +17,7 @@ - # This program was largely ripped off from lvmconf - # - --unset ENABLE FIND FRIENDLY PROPERTY FOREIGN MODULE MULTIPATHD HAVE_DISABLE HAVE_WWID_DISABLE HAVE_FIND HAVE_BLACKLIST HAVE_EXCEPTIONS HAVE_DEFAULTS HAVE_FRIENDLY HAVE_PROPERTY HAVE_FOREIGN HAVE_MULTIPATHD HAVE_MODULE HAVE_OUTFILE SHOW_STATUS CHANGED_CONFIG WWID_LIST -+unset ENABLE FIND FRIENDLY PROPERTY FOREIGN MODULE MULTIPATHD HAVE_DISABLE HAVE_WWID_DISABLE HAVE_FIND HAVE_BLACKLIST HAVE_EXCEPTIONS HAVE_DEFAULTS HAVE_FRIENDLY HAVE_PROPERTY HAVE_FOREIGN HAVE_MULTIPATHD HAVE_MODULE HAVE_OUTFILE SHOW_STATUS CHANGED_CONFIG WWID_LIST HAVE_OPTION OPTION_NAME OPTION_VALUE - - DEFAULT_CONFIG="# device-mapper-multipath configuration file - -@@ -52,6 +52,7 @@ function usage - echo "Set find_multipaths (Default y): --find_multipaths " - echo "Set default property blacklist (Default n): --property_blacklist " - echo "Set enable_foreign to show foreign devices (Default n): --enable_foreign " -+ echo "Add/Change/Remove option in defaults section: --option :" - echo "Load the dm-multipath modules on enable (Default y): --with_module " - echo "start/stop/reload multipathd (Default n): --with_multipathd " - echo "select output file (Default /etc/multipath.conf): --outfile " -@@ -162,6 +163,20 @@ function parse_args - exit 1 - fi - ;; -+ --option) -+ if [ -n "$2" ]; then -+ OPTION_NAME=$(echo $2 | cut -s -f1 -d:) -+ OPTION_VALUE=$(echo $2 | cut -s -f2 -d:) -+ if [ -z "$OPTION_NAME" ]; then -+ usage -+ exit 1 -+ fi -+ shift 2 -+ else -+ usage -+ exit 1 -+ fi -+ ;; - --enable_foreign) - if [ -n "$2" ]; then - FOREIGN=$2 -@@ -208,12 +223,15 @@ function parse_args - - function validate_args - { -- if [ "$ENABLE" = "0" ] && [ -n "$FRIENDLY" -o -n "$FIND" -o -n "$PROPERTY" -o -n "$MODULE" ]; then -+ if [ "$ENABLE" = "0" ] && [ -n "$FRIENDLY" -o -n "$FIND" -o -n "$PROPERTY" -o -n "$MODULE" -o -n "$FOREIGN" -o -n "$OPTION_NAME" ]; then - echo "ignoring extra parameters on disable" - FRIENDLY="" - FIND="" - PROPERTY="" - MODULE="" -+ FOREIGN="" -+ OPTION_NAME="" -+ OPTION_VALUE="" - fi - if [ -n "$FRIENDLY" ] && [ "$FRIENDLY" != "y" -a "$FRIENDLY" != "n" ]; then - echo "--user_friendly_names must be either 'y' or 'n'" -@@ -235,7 +253,19 @@ function validate_args - echo "--enable_foreign must be either 'y' or 'n'" - exit 1 - fi -- if [ -z "$ENABLE" -a -z "$FIND" -a -z "$FRIENDLY" -a -z "$PROPERTY" -a -z "$FOREIGN" ]; then -+ if [ -n "$OPTION_NAME" ]; then -+ if [[ $OPTION_NAME =~ [[:space:]]|#|\"|!|\{|\} ]]; then -+ echo "--option name \"$OPTION_NAME\" is invalid" -+ exit 1 -+ elif [[ $OPTION_VALUE =~ \"|#|!|\{|\} ]]; then -+ echo "--option value \"$OPTION_VALUE\" is invalid" -+ exit 1 -+ fi -+ if [[ $OPTION_VALUE =~ [[:space:]] ]]; then -+ OPTION_VALUE=\"$OPTION_VALUE\" -+ fi -+ fi -+ if [ -z "$ENABLE" -a -z "$FIND" -a -z "$FRIENDLY" -a -z "$PROPERTY" -a -z "$FOREIGN" -a -z "$OPTION_NAME" ]; then - SHOW_STATUS=1 - fi - if [ -n "$MODULE" ] && [ "$MODULE" != "y" -a "$MODULE" != "n" ]; then -@@ -348,6 +378,13 @@ if [ "$HAVE_DEFAULTS" = "1" ]; then - elif sed -n '/^defaults[[:space:]]*{/,/^}/ p' $TMPFILE | grep -q "^[[:space:]]*enable_foreign" ; then - HAVE_FOREIGN=3 - fi -+ if [ -n "$OPTION_NAME" ]; then -+ if sed -n '/^defaults[[:space:]]*{/,/^}/ p' $TMPFILE | grep -q '^[[:space:]]*'"$OPTION_NAME"'[[:space:]][[:space:]]*'"$OPTION_VALUE" ; then -+ HAVE_OPTION=1 -+ elif sed -n '/^defaults[[:space:]]*{/,/^}/ p' $TMPFILE | grep -q '^[[:space:]]*'"$OPTION_NAME"'\([[:space:]].*\)\?$' ; then -+ HAVE_OPTION=0 -+ fi -+ fi - fi - - if [ "$HAVE_EXCEPTIONS" = "1" ]; then -@@ -532,6 +569,21 @@ elif [ "$FOREIGN" = "y" ]; then - fi - fi - -+if [ -n "$OPTION_NAME" -a -n "$OPTION_VALUE" ]; then -+ if [ -z "$HAVE_OPTION" ]; then -+ sed -i '/^defaults[[:space:]]*{/ a\ -+ '"$OPTION_NAME"' '"$OPTION_VALUE"' -+' $TMPFILE -+ CHANGED_CONFIG=1 -+ elif [ "$HAVE_OPTION" = 0 ]; then -+ sed -i '/^defaults[[:space:]]*{/,/^}/ s/^[[:space:]]*'"$OPTION_NAME"'\([[:space:]].*\)\?$/ '"$OPTION_NAME"' '"$OPTION_VALUE"'/' $TMPFILE -+ CHANGED_CONFIG=1 -+ fi -+elif [ -n "$OPTION_NAME" -a -n "$HAVE_OPTION" ]; then -+ sed -i '/^defaults[[:space:]]*{/,/^}/{/^[[:space:]]*'"$OPTION_NAME"'\([[:space:]].*\)\?$/d}' $TMPFILE -+ CHANGED_CONFIG=1 -+fi -+ - if [ -f "$OUTPUTFILE" ]; then - cp $OUTPUTFILE $OUTPUTFILE.old - if [ $? != 0 ]; then -diff --git a/multipath/mpathconf.8 b/multipath/mpathconf.8 -index a14d831e..496383b7 100644 ---- a/multipath/mpathconf.8 -+++ b/multipath/mpathconf.8 -@@ -101,6 +101,13 @@ to the - defaults section. if set to \fBn\fP, this removes the line, if present. This - command can be used along with any other command. - .TP -+.B --option \fB:[]\fP -+Sets the defaults section option \fB\fP to \fB\fP. If the -+option was not previously set in the defaults section, it is added. If it was -+set, its value is changed to \fB\fP. If \fB\fP is left blank, -+then the option is removed from the defaults section, if was set there. This -+command can be used along with any other command. -+.TP - .B --outfile \fB\fP - Write the resulting multipath configuration to \fB\fP instead of - \fB/etc/multipath.conf\fP. diff --git a/0037-RH-add-support-to-mpathconf-for-setting-recheck_wwid.patch b/0037-RH-add-support-to-mpathconf-for-setting-recheck_wwid.patch deleted file mode 100644 index 5330d38..0000000 --- a/0037-RH-add-support-to-mpathconf-for-setting-recheck_wwid.patch +++ /dev/null @@ -1,154 +0,0 @@ -From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 -From: Benjamin Marzinski -Date: Thu, 3 Feb 2022 13:26:18 -0600 -Subject: [PATCH] RH: add support to mpathconf for setting recheck_wwid - -mpathconf now supports --recheck_wwid for setthing the -recheck_wwid option - -Signed-off-by: Benjamin Marzinski ---- - multipath/mpathconf | 48 ++++++++++++++++++++++++++++++++++++++++--- - multipath/mpathconf.8 | 9 ++++++++ - 2 files changed, 54 insertions(+), 3 deletions(-) - -diff --git a/multipath/mpathconf b/multipath/mpathconf -index 6e33fb99..319664b1 100644 ---- a/multipath/mpathconf -+++ b/multipath/mpathconf -@@ -17,7 +17,7 @@ - # This program was largely ripped off from lvmconf - # - --unset ENABLE FIND FRIENDLY PROPERTY FOREIGN MODULE MULTIPATHD HAVE_DISABLE HAVE_WWID_DISABLE HAVE_FIND HAVE_BLACKLIST HAVE_EXCEPTIONS HAVE_DEFAULTS HAVE_FRIENDLY HAVE_PROPERTY HAVE_FOREIGN HAVE_MULTIPATHD HAVE_MODULE HAVE_OUTFILE SHOW_STATUS CHANGED_CONFIG WWID_LIST HAVE_OPTION OPTION_NAME OPTION_VALUE -+unset ENABLE FIND FRIENDLY PROPERTY FOREIGN MODULE MULTIPATHD HAVE_DISABLE HAVE_WWID_DISABLE HAVE_FIND HAVE_BLACKLIST HAVE_EXCEPTIONS HAVE_DEFAULTS HAVE_FRIENDLY HAVE_PROPERTY HAVE_FOREIGN HAVE_MULTIPATHD HAVE_MODULE HAVE_OUTFILE SHOW_STATUS CHANGED_CONFIG WWID_LIST HAVE_OPTION OPTION_NAME OPTION_VALUE HAVE_RECHECK_WWID RECHECK_WWID - - DEFAULT_CONFIG="# device-mapper-multipath configuration file - -@@ -52,6 +52,7 @@ function usage - echo "Set find_multipaths (Default y): --find_multipaths " - echo "Set default property blacklist (Default n): --property_blacklist " - echo "Set enable_foreign to show foreign devices (Default n): --enable_foreign " -+ echo "Set recheck_wwid (Defaut n): --recheck_wwid " - echo "Add/Change/Remove option in defaults section: --option :" - echo "Load the dm-multipath modules on enable (Default y): --with_module " - echo "start/stop/reload multipathd (Default n): --with_multipathd " -@@ -145,6 +146,15 @@ function parse_args - exit 1 - fi - ;; -+ --recheck_wwid) -+ if [ -n "$2" ]; then -+ RECHECK_WWID=$2 -+ shift 2 -+ else -+ usage -+ exit 1 -+ fi -+ ;; - --find_multipaths) - if [ -n "$2" ]; then - FIND=$2 -@@ -223,7 +233,7 @@ function parse_args - - function validate_args - { -- if [ "$ENABLE" = "0" ] && [ -n "$FRIENDLY" -o -n "$FIND" -o -n "$PROPERTY" -o -n "$MODULE" -o -n "$FOREIGN" -o -n "$OPTION_NAME" ]; then -+ if [ "$ENABLE" = "0" ] && [ -n "$FRIENDLY" -o -n "$FIND" -o -n "$PROPERTY" -o -n "$MODULE" -o -n "$FOREIGN" -o -n "$OPTION_NAME" -o -n "$RECHECK_WWID" ]; then - echo "ignoring extra parameters on disable" - FRIENDLY="" - FIND="" -@@ -232,11 +242,16 @@ function validate_args - FOREIGN="" - OPTION_NAME="" - OPTION_VALUE="" -+ RECHECK_WWID="" - fi - if [ -n "$FRIENDLY" ] && [ "$FRIENDLY" != "y" -a "$FRIENDLY" != "n" ]; then - echo "--user_friendly_names must be either 'y' or 'n'" - exit 1 - fi -+ if [ -n "$RECHECK_WWID" ] && [ "$RECHECK_WWID" != "y" -a "$RECHECK_WWID" != "n" ]; then -+ echo "--recheck_wwid must be either 'y' or 'n'" -+ exit 1 -+ fi - if [ "$FIND" = "y" ]; then - FIND="yes" - elif [ "$FIND" = "n" ]; then -@@ -265,7 +280,7 @@ function validate_args - OPTION_VALUE=\"$OPTION_VALUE\" - fi - fi -- if [ -z "$ENABLE" -a -z "$FIND" -a -z "$FRIENDLY" -a -z "$PROPERTY" -a -z "$FOREIGN" -a -z "$OPTION_NAME" ]; then -+ if [ -z "$ENABLE" -a -z "$FIND" -a -z "$FRIENDLY" -a -z "$PROPERTY" -a -z "$FOREIGN" -a -z "$OPTION_NAME" -a -z "$RECHECK_WWID" ]; then - SHOW_STATUS=1 - fi - if [ -n "$MODULE" ] && [ "$MODULE" != "y" -a "$MODULE" != "n" ]; then -@@ -367,6 +382,11 @@ if [ "$HAVE_DEFAULTS" = "1" ]; then - elif sed -n '/^defaults[[:space:]]*{/,/^}/ p' $TMPFILE | grep -q "^[[:space:]]*user_friendly_names[[:space:]][[:space:]]*\(no\|0\)" ; then - HAVE_FRIENDLY=0 - fi -+ if sed -n '/^defaults[[:space:]]*{/,/^}/ p' $TMPFILE | grep -q "^[[:space:]]*recheck_wwid[[:space:]][[:space:]]*\(yes\|1\)" ; then -+ HAVE_RECHECK_WWID=1 -+ elif sed -n '/^defaults[[:space:]]*{/,/^}/ p' $TMPFILE | grep -q "^[[:space:]]*recheck_wwid[[:space:]][[:space:]]*\(no\|0\)" ; then -+ HAVE_RECHECK_WWID=0 -+ fi - if sed -n '/^defaults[[:space:]]*{/,/^}/ p' $TMPFILE | grep -q "^[[:space:]]*#[[:space:]]*enable_foreign" ; then - HAVE_FOREIGN=0 - elif sed -n '/^defaults[[:space:]]*{/,/^}/ p' $TMPFILE | grep -q "^[[:space:]]*enable_foreign[[:space:]][[:space:]]*\"\.\*\"" ; then -@@ -411,6 +431,11 @@ if [ -n "$SHOW_STATUS" ]; then - else - echo "user_friendly_names is enabled" - fi -+ if [ -z "$HAVE_RECHECK_WWID" -o "$HAVE_RECHECK_WWID" = 0 ]; then -+ echo "recheck_wwid is disabled" -+ else -+ echo "recheck_wwid is enabled" -+ fi - if [ -z "$HAVE_PROPERTY" -o "$HAVE_PROPERTY" = 0 ]; then - echo "default property blacklist is disabled" - else -@@ -527,6 +552,23 @@ elif [ "$FRIENDLY" = "y" ]; then - fi - fi - -+if [ "$RECHECK_WWID" = "n" ]; then -+ if [ "$HAVE_RECHECK_WWID" = 1 ]; then -+ sed -i '/^defaults[[:space:]]*{/,/^}/ s/^[[:space:]]*recheck_wwid[[:space:]][[:space:]]*\(yes\|1\)/ recheck_wwid no/' $TMPFILE -+ CHANGED_CONFIG=1 -+ fi -+elif [ "$RECHECK_WWID" = "y" ]; then -+ if [ -z "$HAVE_RECHECK_WWID" ]; then -+ sed -i '/^defaults[[:space:]]*{/ a\ -+ recheck_wwid yes -+' $TMPFILE -+ CHANGED_CONFIG=1 -+ elif [ "$HAVE_RECHECK_WWID" = 0 ]; then -+ sed -i '/^defaults[[:space:]]*{/,/^}/ s/^[[:space:]]*recheck_wwid[[:space:]][[:space:]]*\(no\|0\)/ recheck_wwid yes/' $TMPFILE -+ CHANGED_CONFIG=1 -+ fi -+fi -+ - if [ "$PROPERTY" = "n" ]; then - if [ "$HAVE_PROPERTY" = 1 ]; then - sed -i '/^blacklist_exceptions[[:space:]]*{/,/^}/ s/^[[:space:]]*property[[:space:]][[:space:]]*\"(SCSI_IDENT_|ID_WWN)\"/# property \"(SCSI_IDENT_|ID_WWN)\"/' $TMPFILE -diff --git a/multipath/mpathconf.8 b/multipath/mpathconf.8 -index 496383b7..9c2fb835 100644 ---- a/multipath/mpathconf.8 -+++ b/multipath/mpathconf.8 -@@ -77,6 +77,15 @@ to the - defaults section. If set to \fBn\fP, this removes the line, if present. This - command can be used along with any other command. - .TP -+.B --recheck_wwid \fP { \fBy\fP | \fBn\fP } -+If set to \fBy\fP, this adds the line -+.B recheck_wwid yes -+to the -+.B /etc/multipath.conf -+defaults section, or sets an existing line to \fByes\fP. If set to \fBn\fP, this -+sets an existing \fBrecheck_wwid\fP line to \fBno\fP. This command can be used -+along with any other command. -+.TP - .B --find_multipaths\fP { \fByes\fP | \fBno\fP | \fBstrict\fP | \fBgreedy\fP | \fBsmart\fP } - If set to \fB\fP, this adds the line - .B find_multipaths diff --git a/device-mapper-multipath.spec b/device-mapper-multipath.spec index 195cd07..97d7dfc 100644 --- a/device-mapper-multipath.spec +++ b/device-mapper-multipath.spec @@ -1,52 +1,31 @@ Name: device-mapper-multipath -Version: 0.8.7 -Release: 8%{?dist} +Version: 0.8.9 +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.8.7.tar.gz -o multipath-tools-0.8.7.tgz -Source0: multipath-tools-0.8.7.tgz +# curl -L https://github.com/opensvc/multipath-tools/archive/0.8.9.tar.gz -o multipath-tools-0.8.9.tgz +Source0: multipath-tools-0.8.9.tgz Source1: multipath.conf -Patch0001: 0001-multipath-tools-add-info-about-IO-affinity-path-sele.patch -Patch0002: 0002-multipathd-fix-missing-persistent-reseravtion-for-ac.patch -Patch0003: 0003-multipath-tools-minor-fixes-to-multipath.conf.5-man-.patch -Patch0004: 0004-multipath-tools-make-IBM-XIV-config-work-with-alua-a.patch -Patch0005: 0005-multipathd.socket-add-missing-conditions-from-servic.patch -Patch0006: 0006-multipath-tools-make-IBM-2107900-DS8000-config-work-.patch -Patch0007: 0007-multipath-tools-make-EMC-SYMMETRIX-config-work-with-.patch -Patch0008: 0008-multipath-tools-make-EMC-Invista-config-work-with-al.patch -Patch0009: 0009-multipath-tools-make-COMPELNT-Compellent-Vol-config-.patch -Patch0010: 0010-multipath-tools-remove-Compellent-maintainer.patch -Patch0011: 0011-Revert-multipath-tools-make-EMC-Invista-config-work-.patch -Patch0012: 0012-Revert-multipath-tools-make-EMC-SYMMETRIX-config-wor.patch -Patch0013: 0013-multipath-fix-exit-status-of-multipath-T.patch -Patch0014: 0014-libmultipath-add-section-name-to-invalid-keyword-out.patch -Patch0015: 0015-libmultipath-use-typedef-for-keyword-handler-functio.patch -Patch0016: 0016-libmultipath-print-the-correct-file-when-parsing-fai.patch -Patch0017: 0017-libmultipath-pass-file-and-line-number-to-keyword-ha.patch -Patch0018: 0018-libmultipath-make-set_int-take-a-range-for-valid-val.patch -Patch0019: 0019-libmultipath-improve-checks-for-set_str.patch -Patch0020: 0020-libmultipath-deprecate-file-and-directory-config-opt.patch -Patch0021: 0021-libmultipath-split-set_int-to-enable-reuse.patch -Patch0022: 0022-libmultipath-cleanup-invalid-config-handling.patch -Patch0023: 0023-libmultipath-don-t-return-error-on-invalid-values.patch -Patch0024: 0024-multipathd-avoid-unnecessary-path-read-only-reloads.patch -Patch0025: 0025-RH-fixup-udev-rules-for-redhat.patch -Patch0026: 0026-RH-Remove-the-property-blacklist-exception-builtin.patch -Patch0027: 0027-RH-don-t-start-without-a-config-file.patch -Patch0028: 0028-RH-Fix-nvme-function-missing-argument.patch -Patch0029: 0029-RH-use-rpm-optflags-if-present.patch -Patch0030: 0030-RH-add-mpathconf.patch -Patch0031: 0031-RH-add-wwids-from-kernel-cmdline-mpath.wwids-with-A.patch -Patch0032: 0032-RH-reset-default-find_mutipaths-value-to-off.patch -Patch0033: 0033-RH-attempt-to-get-ANA-info-via-sysfs-first.patch -Patch0034: 0034-RH-make-parse_vpd_pg83-match-scsi_id-output.patch -Patch0035: 0035-libmultipath-use-asprintf-to-allocate-prefixed_uuid.patch -Patch0036: 0036-RH-add-support-to-mpathconf-for-setting-arbitrary-de.patch -Patch0037: 0037-RH-add-support-to-mpathconf-for-setting-recheck_wwid.patch +Patch0001: 0001-multipath-tools-identify-more-arrays-under-IBM-2145-.patch +Patch0002: 0002-multipath-tools-add-HPE-as-vendor-for-OPEN-XP8-array.patch +Patch0003: 0003-multipath-tools-add-HP-HSVX740-to-hwtable.patch +Patch0004: 0004-multipath-tools-add-DellEMC-ME5-PowerVault-ME5-to-ha.patch +Patch0005: 0005-multipath-tools-update-mpp-force_readonly-in-ev_add_.patch +Patch0006: 0006-RH-fixup-udev-rules-for-redhat.patch +Patch0007: 0007-RH-Remove-the-property-blacklist-exception-builtin.patch +Patch0008: 0008-RH-don-t-start-without-a-config-file.patch +Patch0009: 0009-RH-Fix-nvme-function-missing-argument.patch +Patch0010: 0010-RH-use-rpm-optflags-if-present.patch +Patch0011: 0011-RH-add-mpathconf.patch +Patch0012: 0012-RH-add-wwids-from-kernel-cmdline-mpath.wwids-with-A.patch +Patch0013: 0013-RH-reset-default-find_mutipaths-value-to-off.patch +Patch0014: 0014-RH-attempt-to-get-ANA-info-via-sysfs-first.patch +Patch0015: 0015-RH-make-parse_vpd_pg83-match-scsi_id-output.patch +Patch0016: 0016-RH-add-scsi-device-handlers-to-modules-load.d.patch # runtime Requires: %{name}-libs = %{version}-%{release} @@ -130,7 +109,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.8.7 -p1 +%autosetup -n multipath-tools-0.8.9 -p1 cp %{SOURCE1} . %build @@ -188,6 +167,9 @@ fi %{_mandir}/man8/mpathpersist.8.gz %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 %doc README.md %doc README.alua %doc multipath.conf @@ -244,6 +226,19 @@ fi %{_pkgconfdir}/libdmmp.pc %changelog +* Mon Mar 28 2022 Benjamin Marzinski - 0.8.9-1 +- Update source to upstream version 0.8.9 + * Previous patches 0001-0024 & 0035 are included in the commit. +- Add patches from upstream staging branch + * Patches 0001-0005 are from the upstream staging branch +- Rename redhat patches + * Previous patches 0025-0034 are now patches 0006-0015 +- Combine redhat patches + * Previous patches 0036 & 0037 are now part of patch 0011 +- Add 0016-RH-add-scsi-device-handlers-to-modules-load.d.patch +- Spec file changes + * Install multipath.conf and scsi_dh.conf to /usr/lib/modules-load.d + * Mon Feb 7 2022 Benjamin Marzinski - 0.8.7-8 - Add 0036-RH-add-support-to-mpathconf-for-setting-arbitrary-de.patch * add the ability for mpathconf to set arbitray options with --option diff --git a/sources b/sources index ba0504a..7a7f2cd 100644 --- a/sources +++ b/sources @@ -1,2 +1,2 @@ -SHA512 (multipath-tools-0.8.7.tgz) = c01aea837b13429d17688455b813947342ca1cabba19b22e13ce640c77e68335a6d410280a8298595e239131e6fcbb655fa6de5ff9857eac99aa175046a450cd +SHA512 (multipath-tools-0.8.9.tgz) = 25f2a5d436af6a343804988cef45ca1574d4a981655a2b91563ddb89138619158befdf5af92d836a17c95d6dcf901072b614473c2129274e5dcdb1a1d64edb4d SHA512 (multipath.conf) = 71953dce5a68adcf60a942305f5a66023e6f4c4baf53b1bfdb4edf65ed5b8e03db804363c36d1dcfd85591f4766f52b515269904c53b84d7b076da0b80b09942