[dm-devel] [PATCH 11/11] multipathd: proccess merged uevents
tang.junhui at zte.com.cn
tang.junhui at zte.com.cn
Thu Jan 12 05:52:27 UTC 2017
From: "tang.junhui" <tang.junhui at zte.com.cn>
After filtering and merging, then uevents are processed in
uev_trigger(), firstly, each of merged uevents would be processed one
by one with need_do_map in value of 0. Finally, the node “uev” itself
would be processed with need_do_map in value of 1, which would reload
kernel table, and create or remove the dm device.
Change-Id: Ifb4de0ca36180a8af16729c2f70bc250858877bd
Signed-off-by: tang.junhui <tang.junhui at zte.com.cn>
---
multipathd/main.c | 28 +++++++++++++++-------------
1 file changed, 15 insertions(+), 13 deletions(-)
diff --git a/multipathd/main.c b/multipathd/main.c
index 24116e3..5b63577 100644
--- a/multipathd/main.c
+++ b/multipathd/main.c
@@ -1120,6 +1120,7 @@ uev_trigger (struct uevent * uev, void * trigger_data)
{
int r = 0;
struct vectors * vecs;
+ struct uevent *merge_uev, *tmp;
vecs = (struct vectors *)trigger_data;
@@ -1151,20 +1152,21 @@ uev_trigger (struct uevent * uev, void * trigger_data)
}
/*
- * path add/remove event
+ * path add/remove/change event, add/remove maybe merged
*/
- if (!strncmp(uev->action, "add", 3)) {
- r = uev_add_path(uev, vecs, 1);
- goto out;
- }
- if (!strncmp(uev->action, "remove", 6)) {
- r = uev_remove_path(uev, vecs, 1);
- goto out;
- }
- if (!strncmp(uev->action, "change", 6)) {
- r = uev_update_path(uev, vecs);
- goto out;
- }
+ list_for_each_entry_safe(merge_uev, tmp, &uev->merge_node, node) {
+ if (!strncmp(merge_uev->action, "add", 3))
+ r += uev_add_path(merge_uev, vecs, 0);
+ if (!strncmp(merge_uev->action, "remove", 6))
+ r += uev_remove_path(merge_uev, vecs, 0);
+ }
+
+ if (!strncmp(uev->action, "add", 3))
+ r += uev_add_path(uev, vecs, 1);
+ if (!strncmp(uev->action, "remove", 6))
+ r += uev_remove_path(uev, vecs, 1);
+ if (!strncmp(uev->action, "change", 6))
+ r += uev_update_path(uev, vecs);
out:
return r;
--
2.8.1.windows.1
More information about the dm-devel
mailing list