summaryrefslogtreecommitdiffstats
path: root/0009-RH-trigger-change-uevent-on-new-device-creation.patch
diff options
context:
space:
mode:
authorBenjamin Marzinski <bmarzins@redhat.com>2017-05-25 17:12:56 -0500
committerBenjamin Marzinski <bmarzins@redhat.com>2017-05-25 17:12:56 -0500
commita4bb435b339a71961c09722879c45649dec01057 (patch)
treed395b1874ed4e9fc7f4686e2581db05fab088ed1 /0009-RH-trigger-change-uevent-on-new-device-creation.patch
parent3591e72a603304adc6f8fb72fbe47ddbf8760eeb (diff)
downloaddevice-mapper-multipath-a4bb435b339a71961c09722879c45649dec01057.tar.gz
device-mapper-multipath-a4bb435b339a71961c09722879c45649dec01057.tar.xz
device-mapper-multipath-a4bb435b339a71961c09722879c45649dec01057.zip
device-mapper-multipath-0.7.1-1.gitf21166a
- Update Source to the latest upstream commit - Add 0001-libmultipath-add-comment-about-resuming.patch * posted upstream - Add 0002-multipath-attempt-at-common-multipath.rules.patch * under discussion upstream - Add 0003-RH-fixup-udev-rules-for-redhat.patch * Redhat uses different udev rules that some other distros, so multipath has run at a different time. Not all upstream distros link /sbin and /usr/sbin either. - Add 0004-RH-Remove-the-property-blacklist-exception-builtin.patch * Allow multipath to be used on devices without multiple paths. NAK'ed upstream, but requested by Red Hat - Add 0005-RH-don-t-start-without-a-config-file.patch * Don't start multipath unless a config file exists. NAK'ed upstream, but requested by Red Hat - Add 0006-RH-use-rpm-optflags-if-present.patch * Make the build system fedora friendly - Add 0007-RH-add-mpathconf.patch * Add tool to help configure multipath with Red Hat defaults. - Add 0008-RH-add-wwids-from-kernel-cmdline-mpath.wwids-with-A.patch * Make multipath able to claim devices based on the kernel command line NAK'ed upstream but requested by Red Hat - Add 0009-RH-trigger-change-uevent-on-new-device-creation.patch * under discussion upstream
Diffstat (limited to '0009-RH-trigger-change-uevent-on-new-device-creation.patch')
-rw-r--r--0009-RH-trigger-change-uevent-on-new-device-creation.patch138
1 files changed, 138 insertions, 0 deletions
diff --git a/0009-RH-trigger-change-uevent-on-new-device-creation.patch b/0009-RH-trigger-change-uevent-on-new-device-creation.patch
new file mode 100644
index 0000000..7b5b9fa
--- /dev/null
+++ b/0009-RH-trigger-change-uevent-on-new-device-creation.patch
@@ -0,0 +1,138 @@
+From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
+From: Benjamin Marzinski <bmarzins@redhat.com>
+Date: Mon, 24 Apr 2017 09:39:57 -0500
+Subject: [PATCH] RH: trigger change uevent on new device creation
+
+When multipath first sees a path device with user_friendly names
+enabled, it can't know if the device should be multipathed. This means
+that it will not claim the device in udev. If the device is eventually
+multipathed, multipath should trigger a change uevent to update the udev
+database to claim the device.
+
+This also reverts commit 64e27ec066a001012f44550f095c93443e91d845.
+
+Signed-off-by: Benjamin Marzinski <bmarzins@redhat.com>
+---
+ libmultipath/configure.c | 26 ++++++++++++++++++++++++--
+ libmultipath/configure.h | 1 +
+ libmultipath/wwids.c | 4 ++--
+ multipath/main.c | 2 +-
+ multipathd/main.c | 7 ++-----
+ 5 files changed, 30 insertions(+), 10 deletions(-)
+
+diff --git a/libmultipath/configure.c b/libmultipath/configure.c
+index bd090d9..843dd09 100644
+--- a/libmultipath/configure.c
++++ b/libmultipath/configure.c
+@@ -422,6 +422,28 @@ trigger_udev_change(const struct multipath *mpp)
+ udev_device_unref(udd);
+ }
+
++void
++trigger_paths_udev_change(const struct multipath *mpp)
++{
++ struct pathgroup * pgp;
++ struct path * pp;
++ int i, j;
++
++ if (!mpp || !mpp->pg)
++ return;
++
++ vector_foreach_slot (mpp->pg, pgp, i) {
++ if (!pgp->paths)
++ continue;
++ vector_foreach_slot(pgp->paths, pp, j) {
++ if (!pp->udev)
++ continue;
++ sysfs_attr_set_value(pp->udev, "uevent", "change",
++ strlen("change"));
++ }
++ }
++}
++
+ static int
+ is_mpp_known_to_udev(const struct multipath *mpp)
+ {
+@@ -802,8 +824,8 @@ int domap(struct multipath *mpp, char *params, int is_daemon)
+ * succeeded
+ */
+ mpp->force_udev_reload = 0;
+- if (mpp->action == ACT_CREATE)
+- remember_wwid(mpp->wwid);
++ if (mpp->action == ACT_CREATE && remember_wwid(mpp->wwid) == 1)
++ trigger_paths_udev_change(mpp);
+ if (!is_daemon) {
+ /* multipath client mode */
+ dm_switchgroup(mpp->alias, mpp->bestpg);
+diff --git a/libmultipath/configure.h b/libmultipath/configure.h
+index fd7f581..253e29b 100644
+--- a/libmultipath/configure.h
++++ b/libmultipath/configure.h
+@@ -36,3 +36,4 @@ int get_refwwid (enum mpath_cmds cmd, char * dev, enum devtypes dev_type,
+ vector pathvec, char **wwid);
+ int reload_map(struct vectors *vecs, struct multipath *mpp, int refresh, int is_daemon);
+ int sysfs_get_host_adapter_name(struct path *pp, char *adapter_name);
++void trigger_paths_udev_change(const struct multipath *mpp);
+diff --git a/libmultipath/wwids.c b/libmultipath/wwids.c
+index 88bb72b..249c6c1 100644
+--- a/libmultipath/wwids.c
++++ b/libmultipath/wwids.c
+@@ -319,7 +319,7 @@ remember_wwid(char *wwid)
+ condlog(3, "wrote wwid %s to wwids file", wwid);
+ else
+ condlog(4, "wwid %s already in wwids file", wwid);
+- return 0;
++ return ret;
+ }
+
+ int remember_cmdline_wwid(void)
+@@ -353,7 +353,7 @@ int remember_cmdline_wwid(void)
+ next++;
+ }
+ if (strlen(ptr)) {
+- if (remember_wwid(ptr) != 0)
++ if (remember_wwid(ptr) < 0)
+ ret = -1;
+ }
+ else {
+diff --git a/multipath/main.c b/multipath/main.c
+index 72585b0..2eda6a3 100644
+--- a/multipath/main.c
++++ b/multipath/main.c
+@@ -336,7 +336,7 @@ configure (struct config *conf, enum mpath_cmds cmd,
+ }
+ if (cmd == CMD_ADD_WWID) {
+ r = remember_wwid(refwwid);
+- if (r == 0)
++ if (r >= 0)
+ printf("wwid '%s' added\n", refwwid);
+ else
+ printf("failed adding '%s' to wwids file\n",
+diff --git a/multipathd/main.c b/multipathd/main.c
+index 81c76ca..874bcce 100644
+--- a/multipathd/main.c
++++ b/multipathd/main.c
+@@ -2093,7 +2093,8 @@ configure (struct vectors * vecs, int start_waiters)
+
+ sync_maps_state(mpvec);
+ vector_foreach_slot(mpvec, mpp, i){
+- remember_wwid(mpp->wwid);
++ if (remember_wwid(mpp->wwid) == 1)
++ trigger_paths_udev_change(mpp);
+ update_map_pr(mpp);
+ }
+
+@@ -2175,10 +2176,6 @@ reconfigure (struct vectors * vecs)
+ conf->verbosity = verbosity;
+ if (bindings_read_only)
+ conf->bindings_read_only = bindings_read_only;
+- if (conf->find_multipaths) {
+- condlog(2, "find_multipaths is set: -n is implied");
+- ignore_new_devs = 1;
+- }
+ if (ignore_new_devs)
+ conf->ignore_new_devs = ignore_new_devs;
+ uxsock_timeout = conf->uxsock_timeout;
+--
+2.7.4
+