@@ -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;
@@ -22,6 +22,7 @@ struct uevent {
char *devpath;
char *action;
char *kernel;
+ char *merge_id;
unsigned long seqnum;
char *envp[HOTPLUG_NUM_ENVP];
};