diff options
author | Michael Kralka <michael.kralka@gmail.com> | 2008-04-02 04:32:17 +0200 |
---|---|---|
committer | Kay Sievers <kay.sievers@vrfy.org> | 2008-04-02 04:32:17 +0200 |
commit | c3b145a381090f18c4c5f4149e19183343880ec2 (patch) | |
tree | 72e694881c1ef21301216bad354cfa7b4d3f68ff | |
parent | bdfcd075872d8086cd9e4e416f7793d4c78e8af8 (diff) |
udevd: serialize events if they refer to the same major:minor number
-rw-r--r-- | udevd.c | 20 |
1 files changed, 18 insertions, 2 deletions
@@ -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; |