device-mapper-multipath-0.8.7-4
Add 0035-RH-mpathconf-fix-setting-property_blacklist.patch Add 0036-libmultipath-fix-disassemble-status-for-historical-s.patch * Fixes bz #2042032 Add 0037-libmultipath-make-helper-function-to-trigger-path-ue.patch Add 0038-multipathd-trigger-udev-change-on-path-addition.patch * Fixes bz #2028835 Resolves: bz #2028835, #2042032
This commit is contained in:
parent
b335d16aab
commit
f9d1421d55
34
0035-RH-mpathconf-fix-setting-property_blacklist.patch
Normal file
34
0035-RH-mpathconf-fix-setting-property_blacklist.patch
Normal file
@ -0,0 +1,34 @@
|
|||||||
|
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Benjamin Marzinski <bmarzins@redhat.com>
|
||||||
|
Date: Mon, 13 Dec 2021 14:26:30 -0600
|
||||||
|
Subject: [PATCH] RH: mpathconf: fix setting property_blacklist
|
||||||
|
|
||||||
|
If there was no blacklist_exceptions section, setting property_blacklist
|
||||||
|
didn't work correctly. Fix it.
|
||||||
|
|
||||||
|
Signed-off-by: Benjamin Marzinski <bmarzins@redhat.com>
|
||||||
|
---
|
||||||
|
multipath/mpathconf | 10 +++++++++-
|
||||||
|
1 file changed, 9 insertions(+), 1 deletion(-)
|
||||||
|
|
||||||
|
diff --git a/multipath/mpathconf b/multipath/mpathconf
|
||||||
|
index c00d2555..0de6b121 100644
|
||||||
|
--- a/multipath/mpathconf
|
||||||
|
+++ b/multipath/mpathconf
|
||||||
|
@@ -496,7 +496,15 @@ if [ "$PROPERTY" = "n" ]; then
|
||||||
|
CHANGED_CONFIG=1
|
||||||
|
fi
|
||||||
|
elif [ "$PROPERTY" = "y" ]; then
|
||||||
|
- if [ -z "$HAVE_PROPERTY" ]; then
|
||||||
|
+ if [ -z "$HAVE_PROPERTY" -a -z "$HAVE_EXCEPTIONS" ]; then
|
||||||
|
+ cat >> $TMPFILE << _EOF_
|
||||||
|
+
|
||||||
|
+blacklist_exceptions {
|
||||||
|
+ property "(SCSI_IDENT_|ID_WWN)"
|
||||||
|
+}
|
||||||
|
+_EOF_
|
||||||
|
+ CHANGED_CONFIG=1
|
||||||
|
+ elif [ -z "$HAVE_PROPERTY" ]; then
|
||||||
|
sed -i '/^blacklist_exceptions[[:space:]]*{/ a\
|
||||||
|
property "(SCSI_IDENT_|ID_WWN)"
|
||||||
|
' $TMPFILE
|
@ -0,0 +1,45 @@
|
|||||||
|
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Benjamin Marzinski <bmarzins@redhat.com>
|
||||||
|
Date: Wed, 12 Jan 2022 12:26:12 -0600
|
||||||
|
Subject: [PATCH] libmultipath: fix disassemble status for
|
||||||
|
historical-service-time PS
|
||||||
|
|
||||||
|
The historical-service-time path selector prints out 2 path group status
|
||||||
|
arguments. This is the only path selector that uses the group status
|
||||||
|
arguments. All the others only have path status arguments.
|
||||||
|
disassemble_status() was expecting the number of group status arguments
|
||||||
|
to always be zero, causing it to fail at disassembling the status of
|
||||||
|
devices that use historical-service-time path selector. Now multipath
|
||||||
|
actually checks the number of group arguments, and skips them.
|
||||||
|
|
||||||
|
Signed-off-by: Benjamin Marzinski <bmarzins@redhat.com>
|
||||||
|
---
|
||||||
|
libmultipath/dmparser.c | 14 ++++++++++++--
|
||||||
|
1 file changed, 12 insertions(+), 2 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/libmultipath/dmparser.c b/libmultipath/dmparser.c
|
||||||
|
index 4ba7f339..bc311421 100644
|
||||||
|
--- a/libmultipath/dmparser.c
|
||||||
|
+++ b/libmultipath/dmparser.c
|
||||||
|
@@ -437,9 +437,19 @@ int disassemble_status(const char *params, struct multipath *mpp)
|
||||||
|
FREE(word);
|
||||||
|
|
||||||
|
/*
|
||||||
|
- * PG Status (discarded, would be '0' anyway)
|
||||||
|
+ * Path Selector Group Arguments
|
||||||
|
*/
|
||||||
|
- p += get_word(p, NULL);
|
||||||
|
+ p += get_word(p, &word);
|
||||||
|
+
|
||||||
|
+ if (!word)
|
||||||
|
+ return 1;
|
||||||
|
+
|
||||||
|
+ num_pg_args = atoi(word);
|
||||||
|
+ free(word);
|
||||||
|
+
|
||||||
|
+ /* Ignore ps group arguments */
|
||||||
|
+ for (j = 0; j < num_pg_args; j++)
|
||||||
|
+ p += get_word(p, NULL);
|
||||||
|
|
||||||
|
p += get_word(p, &word);
|
||||||
|
|
133
0037-libmultipath-make-helper-function-to-trigger-path-ue.patch
Normal file
133
0037-libmultipath-make-helper-function-to-trigger-path-ue.patch
Normal file
@ -0,0 +1,133 @@
|
|||||||
|
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Benjamin Marzinski <bmarzins@redhat.com>
|
||||||
|
Date: Mon, 17 Jan 2022 14:45:38 -0600
|
||||||
|
Subject: [PATCH] libmultipath: make helper function to trigger path uevents
|
||||||
|
|
||||||
|
Pull the code that checks if a path needs to trigger a uevent, and
|
||||||
|
triggers, out of trigger_paths_udev_change() and into a new function,
|
||||||
|
trigger_path_udev_change(). This function will be used separately by
|
||||||
|
a future patch. No functional changes.
|
||||||
|
|
||||||
|
Signed-off-by: Benjamin Marzinski <bmarzins@redhat.com>
|
||||||
|
---
|
||||||
|
libmultipath/configure.c | 79 +++++++++++++++++++++-------------------
|
||||||
|
libmultipath/configure.h | 1 +
|
||||||
|
2 files changed, 43 insertions(+), 37 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/libmultipath/configure.c b/libmultipath/configure.c
|
||||||
|
index 7edb355b..043e4232 100644
|
||||||
|
--- a/libmultipath/configure.c
|
||||||
|
+++ b/libmultipath/configure.c
|
||||||
|
@@ -565,11 +565,8 @@ unref:
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
-trigger_paths_udev_change(struct multipath *mpp, bool is_mpath)
|
||||||
|
+trigger_path_udev_change(struct path *pp, bool is_mpath)
|
||||||
|
{
|
||||||
|
- struct pathgroup *pgp;
|
||||||
|
- struct path *pp;
|
||||||
|
- int i, j;
|
||||||
|
/*
|
||||||
|
* If a path changes from multipath to non-multipath, we must
|
||||||
|
* synthesize an artificial "add" event, otherwise the LVM2 rules
|
||||||
|
@@ -577,6 +574,45 @@ trigger_paths_udev_change(struct multipath *mpp, bool is_mpath)
|
||||||
|
* irritate ourselves with an "add", so use "change".
|
||||||
|
*/
|
||||||
|
const char *action = is_mpath ? "change" : "add";
|
||||||
|
+ const char *env;
|
||||||
|
+
|
||||||
|
+ if (!pp->udev)
|
||||||
|
+ return;
|
||||||
|
+ /*
|
||||||
|
+ * Paths that are already classified as multipath
|
||||||
|
+ * members don't need another uevent.
|
||||||
|
+ */
|
||||||
|
+ env = udev_device_get_property_value(
|
||||||
|
+ pp->udev, "DM_MULTIPATH_DEVICE_PATH");
|
||||||
|
+
|
||||||
|
+ if (is_mpath && env != NULL && !strcmp(env, "1")) {
|
||||||
|
+ /*
|
||||||
|
+ * If FIND_MULTIPATHS_WAIT_UNTIL is not "0",
|
||||||
|
+ * path is in "maybe" state and timer is running
|
||||||
|
+ * Send uevent now (see multipath.rules).
|
||||||
|
+ */
|
||||||
|
+ env = udev_device_get_property_value(
|
||||||
|
+ pp->udev, "FIND_MULTIPATHS_WAIT_UNTIL");
|
||||||
|
+ if (env == NULL || !strcmp(env, "0"))
|
||||||
|
+ return;
|
||||||
|
+ } else if (!is_mpath &&
|
||||||
|
+ (env == NULL || !strcmp(env, "0")))
|
||||||
|
+ return;
|
||||||
|
+
|
||||||
|
+ condlog(3, "triggering %s uevent for %s (is %smultipath member)",
|
||||||
|
+ action, pp->dev, is_mpath ? "" : "no ");
|
||||||
|
+ sysfs_attr_set_value(pp->udev, "uevent",
|
||||||
|
+ action, strlen(action));
|
||||||
|
+ trigger_partitions_udev_change(pp->udev, action,
|
||||||
|
+ strlen(action));
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+void
|
||||||
|
+trigger_paths_udev_change(struct multipath *mpp, bool is_mpath)
|
||||||
|
+{
|
||||||
|
+ struct pathgroup *pgp;
|
||||||
|
+ struct path *pp;
|
||||||
|
+ int i, j;
|
||||||
|
|
||||||
|
if (!mpp || !mpp->pg)
|
||||||
|
return;
|
||||||
|
@@ -584,39 +620,8 @@ trigger_paths_udev_change(struct multipath *mpp, bool is_mpath)
|
||||||
|
vector_foreach_slot (mpp->pg, pgp, i) {
|
||||||
|
if (!pgp->paths)
|
||||||
|
continue;
|
||||||
|
- vector_foreach_slot(pgp->paths, pp, j) {
|
||||||
|
- const char *env;
|
||||||
|
-
|
||||||
|
- if (!pp->udev)
|
||||||
|
- continue;
|
||||||
|
- /*
|
||||||
|
- * Paths that are already classified as multipath
|
||||||
|
- * members don't need another uevent.
|
||||||
|
- */
|
||||||
|
- env = udev_device_get_property_value(
|
||||||
|
- pp->udev, "DM_MULTIPATH_DEVICE_PATH");
|
||||||
|
-
|
||||||
|
- if (is_mpath && env != NULL && !strcmp(env, "1")) {
|
||||||
|
- /*
|
||||||
|
- * If FIND_MULTIPATHS_WAIT_UNTIL is not "0",
|
||||||
|
- * path is in "maybe" state and timer is running
|
||||||
|
- * Send uevent now (see multipath.rules).
|
||||||
|
- */
|
||||||
|
- env = udev_device_get_property_value(
|
||||||
|
- pp->udev, "FIND_MULTIPATHS_WAIT_UNTIL");
|
||||||
|
- if (env == NULL || !strcmp(env, "0"))
|
||||||
|
- continue;
|
||||||
|
- } else if (!is_mpath &&
|
||||||
|
- (env == NULL || !strcmp(env, "0")))
|
||||||
|
- continue;
|
||||||
|
-
|
||||||
|
- condlog(3, "triggering %s uevent for %s (is %smultipath member)",
|
||||||
|
- action, pp->dev, is_mpath ? "" : "no ");
|
||||||
|
- sysfs_attr_set_value(pp->udev, "uevent",
|
||||||
|
- action, strlen(action));
|
||||||
|
- trigger_partitions_udev_change(pp->udev, action,
|
||||||
|
- strlen(action));
|
||||||
|
- }
|
||||||
|
+ vector_foreach_slot(pgp->paths, pp, j)
|
||||||
|
+ trigger_path_udev_change(pp, is_mpath);
|
||||||
|
}
|
||||||
|
|
||||||
|
mpp->needs_paths_uevent = 0;
|
||||||
|
diff --git a/libmultipath/configure.h b/libmultipath/configure.h
|
||||||
|
index efe18b7d..2bf73e65 100644
|
||||||
|
--- a/libmultipath/configure.h
|
||||||
|
+++ b/libmultipath/configure.h
|
||||||
|
@@ -56,6 +56,7 @@ int coalesce_paths (struct vectors *vecs, vector curmp, char * refwwid, int forc
|
||||||
|
int get_refwwid (enum mpath_cmds cmd, const char *dev, enum devtypes dev_type,
|
||||||
|
vector pathvec, char **wwid);
|
||||||
|
struct udev_device *get_udev_device(const char *dev, enum devtypes dev_type);
|
||||||
|
+void trigger_path_udev_change(struct path *pp, bool is_mpath);
|
||||||
|
void trigger_paths_udev_change(struct multipath *mpp, bool is_mpath);
|
||||||
|
void trigger_partitions_udev_change(struct udev_device *dev, const char *action,
|
||||||
|
int len);
|
54
0038-multipathd-trigger-udev-change-on-path-addition.patch
Normal file
54
0038-multipathd-trigger-udev-change-on-path-addition.patch
Normal file
@ -0,0 +1,54 @@
|
|||||||
|
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Benjamin Marzinski <bmarzins@redhat.com>
|
||||||
|
Date: Mon, 17 Jan 2022 16:46:18 -0600
|
||||||
|
Subject: [PATCH] multipathd: trigger udev change on path addition
|
||||||
|
|
||||||
|
When a multipath device is created for the first time, there is a window
|
||||||
|
where some path devices way be added to the multipath device, but never
|
||||||
|
claimed in udev. This can allow other device owners, like lvm, to think
|
||||||
|
they can use the device.
|
||||||
|
|
||||||
|
When a multipath device is first created, all the existing paths that
|
||||||
|
are not claimed by multipath have a uevent triggered so that they can
|
||||||
|
get claimed. After that, multipath assumes all future paths added to the
|
||||||
|
multipath device will have been claimed by multipath, since the device's
|
||||||
|
WWID is now in the wwids file. This doesn't work for any paths that
|
||||||
|
have already been processed by the multipath.rules udev rules before
|
||||||
|
the multipath device was created.
|
||||||
|
|
||||||
|
To close this window, when path device is added, and a matching
|
||||||
|
multipath device already exists, multipathd now checks if the device is
|
||||||
|
claimed by multipath, and if not, triggers a uevent to claim it.
|
||||||
|
|
||||||
|
Signed-off-by: Benjamin Marzinski <bmarzins@redhat.com>
|
||||||
|
---
|
||||||
|
libmultipath/libmultipath.version | 5 +++++
|
||||||
|
multipathd/main.c | 2 ++
|
||||||
|
2 files changed, 7 insertions(+)
|
||||||
|
|
||||||
|
diff --git a/libmultipath/libmultipath.version b/libmultipath/libmultipath.version
|
||||||
|
index dd1b4122..0d89e9e1 100644
|
||||||
|
--- a/libmultipath/libmultipath.version
|
||||||
|
+++ b/libmultipath/libmultipath.version
|
||||||
|
@@ -292,3 +292,8 @@ LIBMULTIPATH_9.1.0 {
|
||||||
|
global:
|
||||||
|
sysfs_get_ro;
|
||||||
|
} LIBMULTIPATH_9.0.0;
|
||||||
|
+
|
||||||
|
+LIBMULTIPATH_9.1.1 {
|
||||||
|
+global:
|
||||||
|
+ trigger_path_udev_change;
|
||||||
|
+} LIBMULTIPATH_9.1.0;
|
||||||
|
diff --git a/multipathd/main.c b/multipathd/main.c
|
||||||
|
index 6145e512..5def5301 100644
|
||||||
|
--- a/multipathd/main.c
|
||||||
|
+++ b/multipathd/main.c
|
||||||
|
@@ -1062,6 +1062,8 @@ ev_add_path (struct path * pp, struct vectors * vecs, int need_do_map)
|
||||||
|
free_path(pp);
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
+ if (mpp)
|
||||||
|
+ trigger_path_udev_change(pp, true);
|
||||||
|
if (mpp && mpp->wait_for_udev &&
|
||||||
|
(pathcount(mpp, PATH_UP) > 0 ||
|
||||||
|
(pathcount(mpp, PATH_GHOST) > 0 &&
|
@ -1,6 +1,6 @@
|
|||||||
Name: device-mapper-multipath
|
Name: device-mapper-multipath
|
||||||
Version: 0.8.7
|
Version: 0.8.7
|
||||||
Release: 3%{?dist}
|
Release: 4%{?dist}
|
||||||
Summary: Tools to manage multipath devices using device-mapper
|
Summary: Tools to manage multipath devices using device-mapper
|
||||||
License: GPLv2
|
License: GPLv2
|
||||||
URL: http://christophe.varoqui.free.fr/
|
URL: http://christophe.varoqui.free.fr/
|
||||||
@ -44,6 +44,10 @@ Patch0031: 0031-libmultipath-cleanup-invalid-config-handling.patch
|
|||||||
Patch0032: 0032-libmultipath-don-t-return-error-on-invalid-values.patch
|
Patch0032: 0032-libmultipath-don-t-return-error-on-invalid-values.patch
|
||||||
Patch0033: 0033-multipathd-avoid-unnecessary-path-read-only-reloads.patch
|
Patch0033: 0033-multipathd-avoid-unnecessary-path-read-only-reloads.patch
|
||||||
Patch0034: 0034-multipath-fix-exit-status-of-multipath-T.patch
|
Patch0034: 0034-multipath-fix-exit-status-of-multipath-T.patch
|
||||||
|
Patch0035: 0035-RH-mpathconf-fix-setting-property_blacklist.patch
|
||||||
|
Patch0036: 0036-libmultipath-fix-disassemble-status-for-historical-s.patch
|
||||||
|
Patch0037: 0037-libmultipath-make-helper-function-to-trigger-path-ue.patch
|
||||||
|
Patch0038: 0038-multipathd-trigger-udev-change-on-path-addition.patch
|
||||||
|
|
||||||
|
|
||||||
# runtime
|
# runtime
|
||||||
@ -243,6 +247,15 @@ fi
|
|||||||
%{_pkgconfdir}/libdmmp.pc
|
%{_pkgconfdir}/libdmmp.pc
|
||||||
|
|
||||||
%changelog
|
%changelog
|
||||||
|
* Tue Jan 18 2022 Benjamin Marzinski <bmarzins@redhat.com> - 0.8.7-4
|
||||||
|
- Add 0035-RH-mpathconf-fix-setting-property_blacklist.patch
|
||||||
|
- Add 0036-libmultipath-fix-disassemble-status-for-historical-s.patch
|
||||||
|
* Fixes bz #2042032
|
||||||
|
- Add 0037-libmultipath-make-helper-function-to-trigger-path-ue.patch
|
||||||
|
- Add 0038-multipathd-trigger-udev-change-on-path-addition.patch
|
||||||
|
* Fixes bz #2028835
|
||||||
|
- Resolves: bz #2028835, #2042032
|
||||||
|
|
||||||
* Fri Nov 19 2021 Benjamin Marzinski <bmarzins@redhat.com> - 0.8.7-3
|
* Fri Nov 19 2021 Benjamin Marzinski <bmarzins@redhat.com> - 0.8.7-3
|
||||||
- Add 0024-libmultipath-use-typedef-for-keyword-handler-functio.patch
|
- Add 0024-libmultipath-use-typedef-for-keyword-handler-functio.patch
|
||||||
- Add 0025-libmultipath-print-the-correct-file-when-parsing-fai.patch
|
- Add 0025-libmultipath-print-the-correct-file-when-parsing-fai.patch
|
||||||
|
Loading…
Reference in New Issue
Block a user