[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

[PATCH] Wait for udevsettle after $BOOT-top scripts ran



udev may be busy creating links for the root device by the time
mountroot is called. udevsettle makes sure these are processed. I thus
call udevsettle with a timeout of 10 seconds after the $BOOT-top
scripts have run and before the ROOTDELAY hack kicks in.

I thought about doing this with a local-top script instead, but there is
no way to ensure that it'll run last; cryptsetup uses a hack to make
sure it runs last, if we also use the same hack, there'll be
a dependency loop.

Signed-off-by: martin f. krafft <madduck@debian.org>
---
 scripts/functions |    9 +++++++++
 scripts/local     |    2 ++
 scripts/nfs       |    2 ++
 3 files changed, 13 insertions(+), 0 deletions(-)

diff --git a/scripts/functions b/scripts/functions
index d36884c..558f521 100644
--- a/scripts/functions
+++ b/scripts/functions
@@ -313,3 +313,12 @@ configure_networking()
 		. /tmp/net-*.conf
 	fi
 }
+
+wait_for_udev()
+{
+	if [ -x "$(command -v udevsettle)" ]; then
+		[ "$quiet" != "y" ] && log_begin_msg "Waiting for udev to process events"
+		udevsettle ${1:+--timeout=$1}
+		[ "$quiet" != "y" ] && log_end_msg
+	fi
+}
diff --git a/scripts/local b/scripts/local
index d28917b..dc0745d 100644
--- a/scripts/local
+++ b/scripts/local
@@ -31,6 +31,8 @@ mountroot ()
 	run_scripts /scripts/local-top
 	[ "$quiet" != "y" ] && log_end_msg
 
+	wait_for_udev 10
+
 	# If the root device hasn't shown up yet, give it a little while
 	# to deal with removable devices
 	if [ ! -e "${ROOT}" ] || ! $(get_fstype "${ROOT}" >/dev/null); then
diff --git a/scripts/nfs b/scripts/nfs
index b9c2522..435d2d0 100644
--- a/scripts/nfs
+++ b/scripts/nfs
@@ -59,6 +59,8 @@ mountroot()
 	# For DHCP
 	modprobe af_packet
 
+	wait_for_udev 10
+
 	# Default delay is around 180s
 	# FIXME: add usplash_write info
 	if [ -z "${ROOTDELAY}" ]; then
-- 
1.5.6


Reply to: