[dm-devel] [PATCH 01/11] libmultipath: add merge_id in "struct uevent" for uevents merging

tang.junhui at zte.com.cn tang.junhui at zte.com.cn
Thu Jan 12 05:52:17 UTC 2017


From: tang.junhui <tang.junhui at zte.com.cn>

merge_id is used for uevents merging, it is expected to be same with wwid,
uevents with the same merge_id will be merged, and if it is same with
wwid, only the last uevent will call domap(). now we only merge uevents
with label ID_SERIAL or ID_UID in uevent, which usually comming from SCSI
or DASD device.

Change-Id: Ie6b076363b3735dc7de10184b27fa799b499af0e
Signed-off-by: tang.junhui <tang.junhui at zte.com.cn>
---
 libmultipath/uevent.c | 16 ++++++++++++++++
 libmultipath/uevent.h |  1 +
 2 files changed, 17 insertions(+)

diff --git a/libmultipath/uevent.c b/libmultipath/uevent.c
index 7edcce1..5bde864 100644
--- a/libmultipath/uevent.c
+++ b/libmultipath/uevent.c
@@ -424,6 +424,22 @@ struct uevent *uevent_from_udev_device(struct udev_device *dev)
 			uev->devpath = uev->envp[i] + 8;
 		if (strcmp(name, "ACTION") == 0)
 			uev->action = uev->envp[i] + 7;
+
+		/*
+		 * merge_id used for uevents merging
+		 * it is expected to be same with wwid, 
+		 * uevents with the same merge_id
+		 * will be merged, and if it is same with wwid
+		 * only the last uevent will call domap()
+		 * now we only merge uevents with
+		 * label ID_SERIAL or ID_UID, which usually comming
+		 * from SCSI or DASD device
+		 */
+		if (strcmp(name, "ID_SERIAL") == 0)
+			uev->merge_id = uev->envp[i] + 10;
+		else if (strcmp(name, "ID_UID") == 0)	
+			uev->merge_id = uev->envp[i] + 7;
+
 		i++;
 		if (i == HOTPLUG_NUM_ENVP - 1)
 			break;
diff --git a/libmultipath/uevent.h b/libmultipath/uevent.h
index 9d22dcd..3f83bab 100644
--- a/libmultipath/uevent.h
+++ b/libmultipath/uevent.h
@@ -22,6 +22,7 @@ struct uevent {
 	char *devpath;
 	char *action;
 	char *kernel;
+	char *merge_id;
 	unsigned long seqnum;
 	char *envp[HOTPLUG_NUM_ENVP];
 };
-- 
2.8.1.windows.1





More information about the dm-devel mailing list