2017-05-25 22:12:56 +00:00
|
|
|
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
|
2017-11-07 23:51:09 +00:00
|
|
|
index e2f393f..64d7751 100644
|
2017-05-25 22:12:56 +00:00
|
|
|
--- a/libmultipath/configure.c
|
|
|
|
+++ b/libmultipath/configure.c
|
2017-11-07 23:51:09 +00:00
|
|
|
@@ -423,6 +423,28 @@ trigger_udev_change(const struct multipath *mpp)
|
2017-05-25 22:12:56 +00:00
|
|
|
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)
|
|
|
|
{
|
2017-11-07 23:51:09 +00:00
|
|
|
@@ -814,8 +836,8 @@ int domap(struct multipath *mpp, char *params, int is_daemon)
|
2017-05-25 22:12:56 +00:00
|
|
|
* 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
|
2017-11-07 23:51:09 +00:00
|
|
|
index 0ffc28e..09603ba 100644
|
2017-05-25 22:12:56 +00:00
|
|
|
--- a/libmultipath/configure.h
|
|
|
|
+++ b/libmultipath/configure.h
|
2017-11-07 23:51:09 +00:00
|
|
|
@@ -37,3 +37,4 @@ int get_refwwid (enum mpath_cmds cmd, char * dev, enum devtypes dev_type,
|
2017-05-25 22:12:56 +00:00
|
|
|
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);
|
2017-11-07 23:51:09 +00:00
|
|
|
struct udev_device *get_udev_device(const char *dev, enum devtypes dev_type);
|
2017-05-25 22:12:56 +00:00
|
|
|
+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
|
2017-11-07 23:51:09 +00:00
|
|
|
index 2e69300..4dde5af 100644
|
2017-05-25 22:12:56 +00:00
|
|
|
--- a/multipath/main.c
|
|
|
|
+++ b/multipath/main.c
|
2017-11-07 23:51:09 +00:00
|
|
|
@@ -412,7 +412,7 @@ configure (struct config *conf, enum mpath_cmds cmd,
|
2017-05-25 22:12:56 +00:00
|
|
|
}
|
|
|
|
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
|
2017-11-07 23:51:09 +00:00
|
|
|
index c475fcd..50749a8 100644
|
2017-05-25 22:12:56 +00:00
|
|
|
--- a/multipathd/main.c
|
|
|
|
+++ b/multipathd/main.c
|
2017-11-07 23:51:09 +00:00
|
|
|
@@ -2138,7 +2138,8 @@ configure (struct vectors * vecs, int start_waiters)
|
2017-05-25 22:12:56 +00:00
|
|
|
|
|
|
|
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);
|
|
|
|
}
|
|
|
|
|
2017-11-07 23:51:09 +00:00
|
|
|
@@ -2220,10 +2221,6 @@ reconfigure (struct vectors * vecs)
|
2017-05-25 22:12:56 +00:00
|
|
|
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
|
|
|
|
|