5bea53fe7e
Update Source to the latest upstream commit * Previous patches 0001-0006 are included in this commit * Previous patches 0007-0014 are now patches 0015-0022 Add 0001-libmultipath-fix-tur-checker-locking.patch * Fixed spinlock bug. posted upstream Add 0002-multipath-fix-DEF_TIMEOUT-use.patch * Add missing sec to ms conversion. posted upstream Add 0003-multipathd-remove-coalesce_paths-from-ev_add_map.patch * Remove unused code. posted upstream Add 0004-multipathd-remove-unused-configure-parameter.patch * Remove unused code. posted upstream Add 0005-Fix-set_no_path_retry-regression.patch * Fix issue with queueing and path addition. posted upstream Add 0006-multipathd-change-spurious-uevent-msg-priority.patch * Change message priority to Notice. posted upstream Add 0007-multipath-print-sysfs-state-in-fast-list-mode.patch * Show sysfs state correctly in fast list mode (-l). posted upstream Add 0008-libmultipath-move-remove_map-waiter-code-to-multipat.patch * Move code around. posted upstream Add 0009-move-waiter-code-from-libmultipath-to-multipathd.patch * Move code around. posted upstream Add 0010-call-start_waiter_thread-before-setup_multipath.patch * Fix race on multipath device creations. posted upstream Add 0011-libmultipath-add-helper-functions.patch * posted upstream Add 0012-multipathd-RFC-add-new-polling-dmevents-waiter-threa.patch * Add alternate method of getting dmevents, that doesn't require a thread per device. posted upstream Add 0013-libmultipath-condlog-log-to-stderr.patch * change condlog to log to stderr instead of stdout. posted upstream Add 0014-multipathd-fix-compiler-warning-for-uev_pathfail_che.patch * fix indentation issue. posted upstream
157 lines
4.7 KiB
Diff
157 lines
4.7 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 and
|
|
commit ffbb886a8a16cb063d669cd76a1e656fd3ec8c4b.
|
|
|
|
Signed-off-by: Benjamin Marzinski <bmarzins@redhat.com>
|
|
---
|
|
libmultipath/configure.c | 26 ++++++++++++++++++++++++--
|
|
libmultipath/configure.h | 1 +
|
|
libmultipath/wwids.c | 4 ++--
|
|
multipath/main.c | 12 +-----------
|
|
multipathd/main.c | 7 ++-----
|
|
5 files changed, 30 insertions(+), 20 deletions(-)
|
|
|
|
diff --git a/libmultipath/configure.c b/libmultipath/configure.c
|
|
index 22c11a2..7011ef7 100644
|
|
--- a/libmultipath/configure.c
|
|
+++ b/libmultipath/configure.c
|
|
@@ -427,6 +427,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)
|
|
{
|
|
@@ -821,8 +843,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 0ffc28e..09603ba 100644
|
|
--- a/libmultipath/configure.h
|
|
+++ b/libmultipath/configure.h
|
|
@@ -37,3 +37,4 @@ int get_refwwid (enum mpath_cmds cmd, char * dev, enum devtypes dev_type,
|
|
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);
|
|
struct udev_device *get_udev_device(const char *dev, enum devtypes dev_type);
|
|
+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 ff570ac..ae6b06e 100644
|
|
--- a/multipath/main.c
|
|
+++ b/multipath/main.c
|
|
@@ -416,7 +416,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",
|
|
@@ -712,16 +712,6 @@ main (int argc, char *argv[])
|
|
}
|
|
}
|
|
|
|
- /*
|
|
- * FIXME: new device detection with find_multipaths currently
|
|
- * doesn't work reliably.
|
|
- */
|
|
- if (cmd == CMD_VALID_PATH &&
|
|
- conf->find_multipaths && conf->ignore_wwids) {
|
|
- condlog(2, "ignoring -i flag because find_multipath is set in multipath.conf");
|
|
- conf->ignore_wwids = 0;
|
|
- }
|
|
-
|
|
if (getuid() != 0) {
|
|
fprintf(stderr, "need to be root\n");
|
|
exit(1);
|
|
diff --git a/multipathd/main.c b/multipathd/main.c
|
|
index 596654c..c860e88 100644
|
|
--- a/multipathd/main.c
|
|
+++ b/multipathd/main.c
|
|
@@ -2172,7 +2172,8 @@ configure (struct vectors * vecs)
|
|
|
|
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);
|
|
}
|
|
|
|
@@ -2251,10 +2252,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
|
|
|