Hello community,
here is the log from the commit of package udev
checked in at Wed Apr 5 17:42:59 CEST 2006.
--------
--- udev/udev.changes 2006-03-31 11:40:31.000000000 +0200
+++ udev/udev.changes 2006-04-04 23:37:35.000000000 +0200
@@ -1,0 +2,8 @@
+Tue Apr 4 18:00:21 CEST 2006 - kay.sievers@suse.de
+
+- export current seqnum to /dev/.udev/uevent_seqnum to
+ be able to compare against the kernel seqnum and make
+ sure that there are no more events to expect. Add
+ udevsettle to wait for events. (#163010).
+
+-------------------------------------------------------------------
Old:
----
udev.count_events
New:
----
udev-export-seqnum-02.patch
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ udev.spec ++++++
--- /var/tmp/diff_new_pack.8jS9BV/_old 2006-04-05 17:42:12.000000000 +0200
+++ /var/tmp/diff_new_pack.8jS9BV/_new 2006-04-05 17:42:12.000000000 +0200
@@ -13,7 +13,7 @@
Name: udev
URL: ftp://ftp.kernel.org/pub/linux/utils/kernel/hotplug/
Version: 085
-Release: 13
+Release: 14
License: GPL
Group: System/Kernel
Summary: A rule based device node and kernel event manager
@@ -26,6 +26,7 @@
Patch1: fix-queue-export-01.patch
Patch3: udevtrigger-01.patch
Patch4: allow-comma-01.patch
+Patch5: udev-export-seqnum-02.patch
#
Source1: path_id
#
@@ -38,7 +39,6 @@
#
# rule helper
Source26: load_floppy_module.sh
-Source27: udev.count_events
Source29: firmware.sh
#
# system
@@ -71,12 +71,14 @@
%patch1 -p1
%patch3 -p1
%patch4 -p1
+%patch5 -p1
%build
make V=1 EXTRAS=%{extras} STRIPCMD= OPTFLAGS="${RPM_OPT_FLAGS}" all
%install
make V=1 EXTRAS=%{extras} DESTDIR=$RPM_BUILD_ROOT install
+ln -sf /sbin/udevsettle ${RPM_BUILD_ROOT}/usr/bin/udev.count_events
install -m755 -D extras/eventrecorder.sh ${RPM_BUILD_ROOT}/lib/udev/eventrecorder.sh
install -m755 -D extras/path_id ${RPM_BUILD_ROOT}/sbin/path_id
install -m644 -D extras/scsi_id/README ../doc/scsi_id/README
@@ -104,7 +106,6 @@
# install stuff from package
install -m755 -D %{S:26} $RPM_BUILD_ROOT/lib/udev/load_floppy_module.sh
install -m755 -D %{S:29} $RPM_BUILD_ROOT/lib/udev/firmware.sh
-install -m755 -D %{S:27} $RPM_BUILD_ROOT/usr/bin/udev.count_events
#
install -m755 -D %{S:60} $RPM_BUILD_ROOT/etc/init.d/boot.udev
install -m755 -D %{S:61} $RPM_BUILD_ROOT/etc/init.d/boot.udev_retry
@@ -143,6 +144,7 @@
/sbin/udevd
/sbin/udevcontrol
/sbin/udevtrigger
+/sbin/udevsettle
/usr/bin/udev.count_events
/usr/bin/udevinfo
/usr/bin/udevtest
@@ -222,6 +224,11 @@
%attr(600,root,root) %dev(c,10,200) /lib/udev/devices/fwmonitor
%changelog -n udev
+* Tue Apr 04 2006 - kay.sievers@suse.de
+- export current seqnum to /dev/.udev/uevent_seqnum to
+ be able to compare against the kernel seqnum and make
+ sure that there are no more events to expect. Add
+ udevsettle to wait for events. (#163010).
* Fri Mar 31 2006 - olh@suse.de
- do not provide tty0-7, only tty1 (162365)
* Wed Mar 22 2006 - kay.sievers@suse.de
++++++ boot.udev ++++++
--- udev/boot.udev 2006-03-20 17:22:24.000000000 +0100
+++ udev/boot.udev 2006-04-05 13:58:22.000000000 +0200
@@ -29,6 +29,7 @@
# start udevd
echo -n "Starting udevd "
+ rm -rf /dev/.udev
startproc $DAEMON $udevd_args
# cleanup some stuff
@@ -42,17 +43,11 @@
fi
done
- # we may be faster than the first event
- mkdir -p /dev/.udev/queue
+ # trigger events for all devices
/sbin/udevtrigger
- # until we know how to do better, just wait for _all_ events to finish
- loop=300
- while test -d /dev/.udev/queue; do
- sleep 0.1;
- test "$loop" -gt 0 || break
- loop=$(($loop - 1))
- done
+ # wait for events to finish
+ /sbin/udevsettle --timeout=60
rc_status -v
;;
stop)
++++++ udev-export-seqnum-02.patch ++++++
diff --git a/Makefile b/Makefile
index 5e43224..1ce1abe 100644
--- a/Makefile
+++ b/Makefile
@@ -50,6 +50,7 @@ PROGRAMS = \
udev \
udevd \
udevtrigger \
+ udevsettle \
udevsend \
udevcontrol \
udevmonitor \
@@ -86,6 +87,7 @@ MAN_PAGES = \
udevmonitor.8 \
udevd.8 \
udevtrigger.8 \
+ udevsettle.8 \
udevsend.8 \
udevtest.8 \
udevinfo.8 \
@@ -261,6 +263,7 @@ install-man:
$(INSTALL_DATA) -D udevtest.8 $(DESTDIR)$(mandir)/man8/udevtest.8
$(INSTALL_DATA) -D udevd.8 $(DESTDIR)$(mandir)/man8/udevd.8
$(INSTALL_DATA) -D udevtrigger.8 $(DESTDIR)$(mandir)/man8/udevtrigger.8
+ $(INSTALL_DATA) -D udevsettle.8 $(DESTDIR)$(mandir)/man8/udevsettle.8
$(INSTALL_DATA) -D udevmonitor.8 $(DESTDIR)$(mandir)/man8/udevmonitor.8
- ln -f -s udevd.8 $(DESTDIR)$(mandir)/man8/udevcontrol.8
@extras="$(EXTRAS)"; for target in $$extras; do \
@@ -274,6 +277,7 @@ uninstall-man:
- rm -f $(DESTDIR)$(mandir)/man8/udevtest.8
- rm -f $(DESTDIR)$(mandir)/man8/udevd.8
- rm -f $(DESTDIR)$(mandir)/man8/udevtrigger.8
+ - rm -f $(DESTDIR)$(mandir)/man8/udevsettle.8
- rm -f $(DESTDIR)$(mandir)/man8/udevmonitor.8
- rm -f $(DESTDIR)$(mandir)/man8/udevcontrol.8
@ extras="$(EXTRAS)"; for target in $$extras; do \
@@ -285,6 +289,7 @@ install-bin:
$(INSTALL) -d $(DESTDIR)$(udevdir)
$(INSTALL_PROGRAM) -D udevd $(DESTDIR)$(sbindir)/udevd
$(INSTALL_PROGRAM) -D udevtrigger $(DESTDIR)$(sbindir)/udevtrigger
+ $(INSTALL_PROGRAM) -D udevsettle $(DESTDIR)$(sbindir)/udevsettle
$(INSTALL_PROGRAM) -D udevcontrol $(DESTDIR)$(sbindir)/udevcontrol
$(INSTALL_PROGRAM) -D udevmonitor $(DESTDIR)$(usrsbindir)/udevmonitor
$(INSTALL_PROGRAM) -D udevinfo $(DESTDIR)$(usrbindir)/udevinfo
@@ -302,6 +307,7 @@ endif
uninstall-bin:
- rm -f $(DESTDIR)$(sbindir)/udevd
- rm -f $(DESTDIR)$(sbindir)/udevtrigger
+ - rm -f $(DESTDIR)$(sbindir)/udevsettle
- rm -f $(DESTDIR)$(sbindir)/udevcontrol
- rm -f $(DESTDIR)$(usrsbindir)/udevmonitor
- rm -f $(DESTDIR)$(usrbindir)/udevinfo
diff --git a/udevd.c b/udevd.c
index 701165b..8741a09 100644
--- a/udevd.c
+++ b/udevd.c
@@ -279,8 +279,23 @@ static void udev_event_run(struct uevent
static void msg_queue_insert(struct uevent_msg *msg)
{
+ char filename[PATH_SIZE];
+ int fd;
+
msg->queue_time = time(NULL);
+ strlcpy(filename, udev_root, sizeof(filename));
+ strlcat(filename, "/" EVENT_SEQNUM, sizeof(filename));
+ fd = open(filename, O_WRONLY|O_TRUNC|O_CREAT, 0644);
+ if (fd > 0) {
+ char str[32];
+ int len;
+
+ len = sprintf(str, "%llu\n", msg->seqnum);
+ write(fd, str, len);
+ close(fd);
+ }
+
export_event_state(msg, EVENT_QUEUED);
/* run all events with a timeout set immediately */
diff --git a/udevd.h b/udevd.h
index 9ab6a44..e6ed58d 100644
--- a/udevd.h
+++ b/udevd.h
@@ -31,6 +31,7 @@
#define EVENT_QUEUE_DIR ".udev/queue"
#define EVENT_FAILED_DIR ".udev/failed"
+#define EVENT_SEQNUM ".udev/uevent_seqnum"
/* maximum limit of forked childs */
#define UDEVD_MAX_CHILDS 64
diff --git a/udevsettle.c b/udevsettle.c
new file mode 100644
index 0000000..f0f85ff
--- /dev/null
+++ b/udevsettle.c
@@ -0,0 +1,155 @@
+/*
+ * udevsettle.c
+ *
+ * Copyright (C) 2006 Kay Sievers