You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
133 lines
4.4 KiB
133 lines
4.4 KiB
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 |
|
From: Benjamin Marzinski <bmarzins@redhat.com> |
|
Date: Mon, 17 Jan 2022 14:45:38 -0600 |
|
Subject: [PATCH] libmultipath: make helper function to trigger path uevents |
|
|
|
Pull the code that checks if a path needs to trigger a uevent, and |
|
triggers, out of trigger_paths_udev_change() and into a new function, |
|
trigger_path_udev_change(). This function will be used separately by |
|
a future patch. No functional changes. |
|
|
|
Signed-off-by: Benjamin Marzinski <bmarzins@redhat.com> |
|
--- |
|
libmultipath/configure.c | 79 +++++++++++++++++++++------------------- |
|
libmultipath/configure.h | 1 + |
|
2 files changed, 43 insertions(+), 37 deletions(-) |
|
|
|
diff --git a/libmultipath/configure.c b/libmultipath/configure.c |
|
index 7edb355b..043e4232 100644 |
|
--- a/libmultipath/configure.c |
|
+++ b/libmultipath/configure.c |
|
@@ -565,11 +565,8 @@ unref: |
|
} |
|
|
|
void |
|
-trigger_paths_udev_change(struct multipath *mpp, bool is_mpath) |
|
+trigger_path_udev_change(struct path *pp, bool is_mpath) |
|
{ |
|
- struct pathgroup *pgp; |
|
- struct path *pp; |
|
- int i, j; |
|
/* |
|
* If a path changes from multipath to non-multipath, we must |
|
* synthesize an artificial "add" event, otherwise the LVM2 rules |
|
@@ -577,6 +574,45 @@ trigger_paths_udev_change(struct multipath *mpp, bool is_mpath) |
|
* irritate ourselves with an "add", so use "change". |
|
*/ |
|
const char *action = is_mpath ? "change" : "add"; |
|
+ const char *env; |
|
+ |
|
+ if (!pp->udev) |
|
+ return; |
|
+ /* |
|
+ * Paths that are already classified as multipath |
|
+ * members don't need another uevent. |
|
+ */ |
|
+ env = udev_device_get_property_value( |
|
+ pp->udev, "DM_MULTIPATH_DEVICE_PATH"); |
|
+ |
|
+ if (is_mpath && env != NULL && !strcmp(env, "1")) { |
|
+ /* |
|
+ * If FIND_MULTIPATHS_WAIT_UNTIL is not "0", |
|
+ * path is in "maybe" state and timer is running |
|
+ * Send uevent now (see multipath.rules). |
|
+ */ |
|
+ env = udev_device_get_property_value( |
|
+ pp->udev, "FIND_MULTIPATHS_WAIT_UNTIL"); |
|
+ if (env == NULL || !strcmp(env, "0")) |
|
+ return; |
|
+ } else if (!is_mpath && |
|
+ (env == NULL || !strcmp(env, "0"))) |
|
+ return; |
|
+ |
|
+ condlog(3, "triggering %s uevent for %s (is %smultipath member)", |
|
+ action, pp->dev, is_mpath ? "" : "no "); |
|
+ sysfs_attr_set_value(pp->udev, "uevent", |
|
+ action, strlen(action)); |
|
+ trigger_partitions_udev_change(pp->udev, action, |
|
+ strlen(action)); |
|
+} |
|
+ |
|
+void |
|
+trigger_paths_udev_change(struct multipath *mpp, bool is_mpath) |
|
+{ |
|
+ struct pathgroup *pgp; |
|
+ struct path *pp; |
|
+ int i, j; |
|
|
|
if (!mpp || !mpp->pg) |
|
return; |
|
@@ -584,39 +620,8 @@ trigger_paths_udev_change(struct multipath *mpp, bool is_mpath) |
|
vector_foreach_slot (mpp->pg, pgp, i) { |
|
if (!pgp->paths) |
|
continue; |
|
- vector_foreach_slot(pgp->paths, pp, j) { |
|
- const char *env; |
|
- |
|
- if (!pp->udev) |
|
- continue; |
|
- /* |
|
- * Paths that are already classified as multipath |
|
- * members don't need another uevent. |
|
- */ |
|
- env = udev_device_get_property_value( |
|
- pp->udev, "DM_MULTIPATH_DEVICE_PATH"); |
|
- |
|
- if (is_mpath && env != NULL && !strcmp(env, "1")) { |
|
- /* |
|
- * If FIND_MULTIPATHS_WAIT_UNTIL is not "0", |
|
- * path is in "maybe" state and timer is running |
|
- * Send uevent now (see multipath.rules). |
|
- */ |
|
- env = udev_device_get_property_value( |
|
- pp->udev, "FIND_MULTIPATHS_WAIT_UNTIL"); |
|
- if (env == NULL || !strcmp(env, "0")) |
|
- continue; |
|
- } else if (!is_mpath && |
|
- (env == NULL || !strcmp(env, "0"))) |
|
- continue; |
|
- |
|
- condlog(3, "triggering %s uevent for %s (is %smultipath member)", |
|
- action, pp->dev, is_mpath ? "" : "no "); |
|
- sysfs_attr_set_value(pp->udev, "uevent", |
|
- action, strlen(action)); |
|
- trigger_partitions_udev_change(pp->udev, action, |
|
- strlen(action)); |
|
- } |
|
+ vector_foreach_slot(pgp->paths, pp, j) |
|
+ trigger_path_udev_change(pp, is_mpath); |
|
} |
|
|
|
mpp->needs_paths_uevent = 0; |
|
diff --git a/libmultipath/configure.h b/libmultipath/configure.h |
|
index efe18b7d..2bf73e65 100644 |
|
--- a/libmultipath/configure.h |
|
+++ b/libmultipath/configure.h |
|
@@ -56,6 +56,7 @@ int coalesce_paths (struct vectors *vecs, vector curmp, char * refwwid, int forc |
|
int get_refwwid (enum mpath_cmds cmd, const char *dev, enum devtypes dev_type, |
|
vector pathvec, char **wwid); |
|
struct udev_device *get_udev_device(const char *dev, enum devtypes dev_type); |
|
+void trigger_path_udev_change(struct path *pp, bool is_mpath); |
|
void trigger_paths_udev_change(struct multipath *mpp, bool is_mpath); |
|
void trigger_partitions_udev_change(struct udev_device *dev, const char *action, |
|
int len);
|
|
|