938e745304
Add 0008-multipathd-add-failures-path-format-wildcard.patch Add 0009-multipathd-fix-reservation_key-check.patch Rename files * Previous patches 0008-0015 are now patches 0010-0017
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 61f68f8..81b0bc4 100644
|
|
--- a/libmultipath/configure.c
|
|
+++ b/libmultipath/configure.c
|
|
@@ -444,6 +444,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)
|
|
{
|
|
@@ -842,8 +864,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 27a7e6f..545cbc2 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,
|
|
vector pathvec, char **wwid);
|
|
int reload_map(struct vectors *vecs, struct multipath *mpp, int refresh, int is_daemon);
|
|
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 82cef12..6c88a3b 100644
|
|
--- a/libmultipath/wwids.c
|
|
+++ b/libmultipath/wwids.c
|
|
@@ -321,7 +321,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)
|
|
@@ -355,7 +355,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 baf6759..12d6f15 100644
|
|
--- a/multipath/main.c
|
|
+++ b/multipath/main.c
|
|
@@ -427,7 +427,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",
|
|
@@ -782,16 +782,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 84af946..b3f319a 100644
|
|
--- a/multipathd/main.c
|
|
+++ b/multipathd/main.c
|
|
@@ -2323,7 +2323,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);
|
|
}
|
|
|
|
@@ -2403,10 +2404,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
|
|
|