df3507c52f
Update Source to the latest upstream commit * Previous patches 0001 and 0010-0013 are included in this commit. Add 0001-libmultipath-update-3PARdata-builtin-config.patch * Change for building configuration. Posted upstream Modify 0006-RH-use-rpm-optflags-if-present.patch * Add missing lines to actually use RPM_OPT_FLAGS.
139 lines
4.2 KiB
Diff
139 lines
4.2 KiB
Diff
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 9dda21d..baae256 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 4be2c57..fc5b18a 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
|
|
|