- list_for_each_entry(loop_msg, &running_list, list)
- if (strncmp(loop_msg->devpath, msg->devpath, sizeof(loop_msg->devpath)) == 0)
- return loop_msg;
+ int i;
+
+ list_for_each_entry(loop_msg, &running_list, list) {
+ if (loop_msg->devpath == NULL || msg->devpath == NULL)
+ continue;
+
+ /* is a parent or child device event still running */
+ for (i = 0; i < DEVPATH_SIZE; i++) {
+ if (loop_msg->devpath[i] == '\0' || msg->devpath[i] == '\0')
+ return loop_msg;
+
+ if (loop_msg->devpath[i] != msg->devpath[i])
+ break;
+ }
+
+ /* is the physical device event still running on an add sequence */
+ if (msg->physdevpath && msg->action && strcmp(msg->action, "add") == 0)
+ for (i = 0; i < DEVPATH_SIZE; i++) {
+ if (loop_msg->devpath[i] == '\0' || msg->physdevpath[i] == '\0')
+ return loop_msg;
+
+ if (loop_msg->devpath[i] != msg->physdevpath[i])
+ break;
+ }
+ }
+