summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichael Kralka <michael.kralka@gmail.com>2008-04-02 04:32:17 +0200
committerKay Sievers <kay.sievers@vrfy.org>2008-04-02 04:32:17 +0200
commitc3b145a381090f18c4c5f4149e19183343880ec2 (patch)
tree72e694881c1ef21301216bad354cfa7b4d3f68ff
parentbdfcd075872d8086cd9e4e416f7793d4c78e8af8 (diff)
udevd: serialize events if they refer to the same major:minor number
-rw-r--r--udevd.c20
1 files changed, 18 insertions, 2 deletions
diff --git a/udevd.c b/udevd.c
index 7f32a2aa79..82ebd22dba 100644
--- a/udevd.c
+++ b/udevd.c
@@ -479,12 +479,20 @@ static int devpath_busy(struct udevd_uevent_msg *msg, int limit)
return 3;
}
+ /* check for our major:minor number */
+ if (msg->devt && loop_msg->devt == msg->devt &&
+ strcmp(msg->subsystem, loop_msg->subsystem) == 0) {
+ dbg("%llu, device event still pending %llu (%d:%d)", msg->seqnum,
+ loop_msg->seqnum, major(loop_msg->devt), minor(loop_msg->devt));
+ return 4;
+ }
+
/* check physical device event (special case of parent) */
if (msg->physdevpath && msg->action && strcmp(msg->action, "add") == 0)
if (compare_devpath(loop_msg->devpath, msg->physdevpath) != 0) {
dbg("%llu, physical device event still pending %llu (%s)",
msg->seqnum, loop_msg->seqnum, loop_msg->devpath);
- return 4;
+ return 5;
}
}
@@ -507,12 +515,20 @@ static int devpath_busy(struct udevd_uevent_msg *msg, int limit)
return 3;
}
+ /* check for our major:minor number */
+ if (msg->devt && loop_msg->devt == msg->devt &&
+ strcmp(msg->subsystem, loop_msg->subsystem) == 0) {
+ dbg("%llu, device event still running %llu (%d:%d)", msg->seqnum,
+ loop_msg->seqnum, major(loop_msg->devt), minor(loop_msg->devt));
+ return 4;
+ }
+
/* check physical device event (special case of parent) */
if (msg->physdevpath && msg->action && strcmp(msg->action, "add") == 0)
if (compare_devpath(loop_msg->devpath, msg->physdevpath) != 0) {
dbg("%llu, physical device event still running %llu (%s)",
msg->seqnum, loop_msg->seqnum, loop_msg->devpath);
- return 4;
+ return 5;
}
}
return 0;