All of lore.kernel.org
 help / color / mirror / Atom feed
From: Martin Wilck <mwilck@suse.com>
To: Christophe Varoqui <christophe.varoqui@opensvc.com>,
	dm-devel@redhat.com, Benjamin Marzinski <bmarzins@redhat.com>
Cc: Xose Vazquez Perez <xose.vazquez@gmail.com>,
	Martin Wilck <mwilck@suse.com>
Subject: [RFC PATCH 15/16] libmultipath: trigger change uevent on new device creation
Date: Fri, 19 Jan 2018 01:29:15 +0100	[thread overview]
Message-ID: <20180119002916.10323-16-mwilck@suse.com> (raw)
In-Reply-To: <20180119002916.10323-1-mwilck@suse.com>

From: Benjamin Marzinski <bmarzins@redhat.com>

When multipath first sees a path device with find_multipaths
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.

Signed-off-by: Benjamin Marzinski <bmarzins@redhat.com>
---
 libmultipath/configure.c | 26 ++++++++++++++++++++++++--
 libmultipath/configure.h |  1 +
 libmultipath/wwids.c     |  2 +-
 multipath/main.c         |  2 +-
 multipathd/main.c        |  3 ++-
 5 files changed, 29 insertions(+), 5 deletions(-)

diff --git a/libmultipath/configure.c b/libmultipath/configure.c
index 325018a78b95..c08ea5b8decc 100644
--- a/libmultipath/configure.c
+++ b/libmultipath/configure.c
@@ -433,6 +433,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)
 {
@@ -827,8 +849,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 0ffc28efdaf7..09603ba81733 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 655ccbe2c94a..098aa6f67b77 100644
--- a/libmultipath/wwids.c
+++ b/libmultipath/wwids.c
@@ -326,5 +326,5 @@ 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;
 }
diff --git a/multipath/main.c b/multipath/main.c
index c65793d5a9e9..528c3fe1f50f 100644
--- a/multipath/main.c
+++ b/multipath/main.c
@@ -419,7 +419,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 6f612f6d3d2f..5807b42c2b2c 100644
--- a/multipathd/main.c
+++ b/multipathd/main.c
@@ -2048,7 +2048,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);
 	}
 
-- 
2.15.1

  parent reply	other threads:[~2018-01-19  0:29 UTC|newest]

Thread overview: 30+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-01-19  0:29 [RFC PATCH 00/16] multipath path classification Martin Wilck
2018-01-19  0:29 ` [RFC PATCH 01/16] Revert "multipath: ignore -i if find_multipaths is set" Martin Wilck
2018-01-19  0:29 ` [RFC PATCH 02/16] Revert "multipathd: imply -n " Martin Wilck
2018-01-19  0:29 ` [RFC PATCH 03/16] libmultipath: add mpvec param to should_multipath() Martin Wilck
2018-01-19  0:29 ` [RFC PATCH 04/16] libmultipath: should_multipath: keep existing maps Martin Wilck
2018-01-19 16:06   ` Benjamin Marzinski
2018-01-19  0:29 ` [RFC PATCH 05/16] multipath -u -i: change logic for find_multipaths Martin Wilck
2018-01-19  0:29 ` [RFC PATCH 06/16] libmultipath: let ignore_wwids be set in config file Martin Wilck
2018-01-19  0:29 ` [RFC PATCH 07/16] multipathd: replace -n with !ignore_wwids Martin Wilck
2018-01-19  0:29 ` [RFC PATCH 08/16] multipath.conf.5: document "ignore_wwids" Martin Wilck
2018-01-19  0:29 ` [RFC PATCH 09/16] multipath.8: adapt documentation of '-i' Martin Wilck
2018-01-19  0:29 ` [RFC PATCH 10/16] multipathd.8: document that '-n' is now ignored Martin Wilck
2018-01-19  0:29 ` [RFC PATCH 11/16] multipath: common code path for CMD_VALID_PATH Martin Wilck
2018-01-19  0:29 ` [RFC PATCH 12/16] multipath -u/-c: change output to environment/key format Martin Wilck
2018-01-19  0:29 ` [RFC PATCH 13/16] multipath -u/-c: add "$DEV is maybe a valid path" Martin Wilck
2018-01-19  0:29 ` [RFC PATCH 14/16] multipath.rules: find_multipaths+ignore_wwids logic Martin Wilck
2018-01-19 18:12   ` Benjamin Marzinski
2018-01-20  1:20     ` Martin Wilck
2018-01-21  3:21       ` Benjamin Marzinski
2018-01-22 21:56         ` Martin Wilck
2018-01-25 13:40           ` Benjamin Marzinski
2018-01-26 17:29             ` Martin Wilck
2018-01-29 22:28               ` Benjamin Marzinski
2018-01-30 13:07                 ` Martin Wilck
2018-01-30 23:40                   ` Benjamin Marzinski
2018-01-20  0:27   ` [FIX for 14/16] multipath.rules: set job properties for systemd-run correctly Martin Wilck
2018-01-19  0:29 ` Martin Wilck [this message]
2018-01-19  0:29 ` [RFC PATCH 16/16] libmultipath: trigger path uevent only when necessary Martin Wilck
2018-03-07  8:53 ` [RFC PATCH 00/16] multipath path classification Christophe Varoqui
2018-03-07  9:26   ` Martin Wilck

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20180119002916.10323-16-mwilck@suse.com \
    --to=mwilck@suse.com \
    --cc=bmarzins@redhat.com \
    --cc=christophe.varoqui@opensvc.com \
    --cc=dm-devel@redhat.com \
    --cc=xose.vazquez@gmail.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.