Blame 0012-added-initqueue-settled-and-refactored-code.patch

Harald Hoyer 3fb223
From 273b197d75da0165ce5ad22bcab6697bc22dbb04 Mon Sep 17 00:00:00 2001
Harald Hoyer 3fb223
From: Harald Hoyer <harald@redhat.com>
Harald Hoyer 3fb223
Date: Mon, 7 Sep 2009 17:40:04 +0200
Harald Hoyer 3fb223
Subject: [PATCH 12/12] added initqueue-settled and refactored code
Harald Hoyer 3fb223
Harald Hoyer 3fb223
---
Harald Hoyer 3fb223
 modules.d/90crypt/cryptroot-ask.sh                 |    2 -
Harald Hoyer 3fb223
 modules.d/90dmraid/61-dmraid-imsm.rules            |    4 +-
Harald Hoyer 3fb223
 modules.d/90dmraid/dmraid.sh                       |   45 +++++++--------
Harald Hoyer 3fb223
 .../90dmsquash-live/dmsquash-live-genrules.sh      |    4 +-
Harald Hoyer 3fb223
 modules.d/90lvm/64-lvm-vol_id.rules                |   22 -------
Harald Hoyer 3fb223
 modules.d/90lvm/64-lvm.rules                       |    9 ++-
Harald Hoyer 3fb223
 modules.d/90lvm/install                            |    7 +--
Harald Hoyer 3fb223
 modules.d/90lvm/lvm_scan.sh                        |   61 +++++++++----------
Harald Hoyer 3fb223
 modules.d/90mdraid/65-md-incremental-imsm.rules    |   42 ++++++++++++-
Harald Hoyer 3fb223
 modules.d/90mdraid/mdcontainer_start.sh            |    9 +--
Harald Hoyer 3fb223
 modules.d/90mdraid/mdraid_start.sh                 |   11 +--
Harald Hoyer 3fb223
 modules.d/95rootfs-block/block-genrules.sh         |    2 +-
Harald Hoyer 3fb223
 modules.d/99base/dracut-lib.sh                     |    7 ++
Harald Hoyer 3fb223
 modules.d/99base/init                              |   17 +++++-
Harald Hoyer 3fb223
 modules.d/99base/initqueue                         |   34 +++++++++--
Harald Hoyer 3fb223
 modules.d/99base/install                           |    1 +
Harald Hoyer 3fb223
 16 files changed, 160 insertions(+), 117 deletions(-)
Harald Hoyer 3fb223
 delete mode 100644 modules.d/90lvm/64-lvm-vol_id.rules
Harald Hoyer 3fb223
Harald Hoyer 3fb223
diff --git a/modules.d/90crypt/cryptroot-ask.sh b/modules.d/90crypt/cryptroot-ask.sh
Harald Hoyer 3fb223
index a2ebde6..7872d64 100755
Harald Hoyer 3fb223
--- a/modules.d/90crypt/cryptroot-ask.sh
Harald Hoyer 3fb223
+++ b/modules.d/90crypt/cryptroot-ask.sh
Harald Hoyer 3fb223
@@ -35,6 +35,4 @@ fi
Harald Hoyer 3fb223
 # mark device as asked
Harald Hoyer 3fb223
 >> /tmp/cryptroot-asked-$2
Harald Hoyer 3fb223
 
Harald Hoyer 3fb223
-udevsettle
Harald Hoyer 3fb223
-
Harald Hoyer 3fb223
 exit 0
Harald Hoyer 3fb223
diff --git a/modules.d/90dmraid/61-dmraid-imsm.rules b/modules.d/90dmraid/61-dmraid-imsm.rules
Harald Hoyer 3fb223
index 172e09f..d610643 100644
Harald Hoyer 3fb223
--- a/modules.d/90dmraid/61-dmraid-imsm.rules
Harald Hoyer 3fb223
+++ b/modules.d/90dmraid/61-dmraid-imsm.rules
Harald Hoyer 3fb223
@@ -11,7 +11,9 @@ ENV{ID_FS_TYPE}=="isw_raid_member", ENV{rd_NO_MDIMSM}!="?*", GOTO="dm_end"
Harald Hoyer 3fb223
 ENV{ID_FS_TYPE}!="*_raid_member", , GOTO="dm_end"
Harald Hoyer 3fb223
 TEST=="/tmp/.dmraid_scan-%k", GOTO="dm_end"
Harald Hoyer 3fb223
 
Harald Hoyer 3fb223
-RUN+="/bin/sh -c '>/tmp/.dmraid_scan-%k; /bin/ln -fs /sbin/dmraid_scan /initqueue/dmraid_scan.sh'"
Harald Hoyer 3fb223
+RUN+="/sbin/initqueue --onetime --unique --settled /sbin/dmraid_scan"
Harald Hoyer 3fb223
+
Harald Hoyer 3fb223
+ACTION=="change", RUN+="/bin/sh -c '>/tmp/.dmraid_scan-%k'"
Harald Hoyer 3fb223
 
Harald Hoyer 3fb223
 ENV{DEVTYPE}!="partition", \
Harald Hoyer 3fb223
     RUN+="/sbin/partx -d --nr 1-1024 $env{DEVNAME}"
Harald Hoyer 3fb223
diff --git a/modules.d/90dmraid/dmraid.sh b/modules.d/90dmraid/dmraid.sh
Harald Hoyer 3fb223
index 2cd6773..e382233 100755
Harald Hoyer 3fb223
--- a/modules.d/90dmraid/dmraid.sh
Harald Hoyer 3fb223
+++ b/modules.d/90dmraid/dmraid.sh
Harald Hoyer 3fb223
@@ -1,28 +1,25 @@
Harald Hoyer 3fb223
 #!/bin/sh
Harald Hoyer 3fb223
 
Harald Hoyer 3fb223
-if $UDEV_QUEUE_EMPTY >/dev/null 2>&1; then
Harald Hoyer 3fb223
-    [ -h "$job" ] && rm -f "$job"
Harald Hoyer 3fb223
-    DM_RAIDS=$(getargs rd_DM_UUID=)
Harald Hoyer 3fb223
-    # run dmraid if udev has settled
Harald Hoyer 3fb223
-    info "Scanning for dmraid devices $DM_RAIDS"
Harald Hoyer 3fb223
-    if [ -n "$DM_RAIDS" ]; then
Harald Hoyer 3fb223
-	# only activate specified DM RAIDS
Harald Hoyer 3fb223
-	SETS=$(dmraid -c -s)
Harald Hoyer 3fb223
-	info "Found dmraid sets:"
Harald Hoyer 3fb223
-	echo $SETS|vinfo
Harald Hoyer 3fb223
-	for r in $DM_RAIDS; do 
Harald Hoyer 3fb223
-	    for s in $SETS; do 
Harald Hoyer 3fb223
-		if [ "${s##$r}" != "$s" ]; then
Harald Hoyer 3fb223
-		    info "Activating $s"
Harald Hoyer 3fb223
-		    dmraid -ay $s 2>&1 | vinfo
Harald Hoyer 3fb223
-                    udevsettle
Harald Hoyer 3fb223
-		fi
Harald Hoyer 3fb223
-	    done
Harald Hoyer 3fb223
+. /lib/dracut-lib.sh
Harald Hoyer 3fb223
+
Harald Hoyer 3fb223
+DM_RAIDS=$(getargs rd_DM_UUID=)
Harald Hoyer 3fb223
+# run dmraid if udev has settled
Harald Hoyer 3fb223
+info "Scanning for dmraid devices $DM_RAIDS"
Harald Hoyer 3fb223
+if [ -n "$DM_RAIDS" ]; then
Harald Hoyer 3fb223
+    # only activate specified DM RAIDS
Harald Hoyer 3fb223
+    SETS=$(dmraid -c -s)
Harald Hoyer 3fb223
+    info "Found dmraid sets:"
Harald Hoyer 3fb223
+    echo $SETS|vinfo
Harald Hoyer 3fb223
+    for r in $DM_RAIDS; do 
Harald Hoyer 3fb223
+	for s in $SETS; do 
Harald Hoyer 3fb223
+	    if [ "${s##$r}" != "$s" ]; then
Harald Hoyer 3fb223
+		info "Activating $s"
Harald Hoyer 3fb223
+		dmraid -ay $s 2>&1 | vinfo
Harald Hoyer 3fb223
+                udevsettle
Harald Hoyer 3fb223
+	    fi
Harald Hoyer 3fb223
 	done
Harald Hoyer 3fb223
-    else 
Harald Hoyer 3fb223
-	# scan and activate all DM RAIDS
Harald Hoyer 3fb223
-	dmraid -ay 2>&1 | vinfo
Harald Hoyer 3fb223
-        udevsettle
Harald Hoyer 3fb223
-    fi
Harald Hoyer 3fb223
+    done
Harald Hoyer 3fb223
+else 
Harald Hoyer 3fb223
+    # scan and activate all DM RAIDS
Harald Hoyer 3fb223
+    dmraid -ay 2>&1 | vinfo
Harald Hoyer 3fb223
 fi
Harald Hoyer 3fb223
-
Harald Hoyer 3fb223
diff --git a/modules.d/90dmsquash-live/dmsquash-live-genrules.sh b/modules.d/90dmsquash-live/dmsquash-live-genrules.sh
Harald Hoyer 3fb223
index a3858e1..4bf993d 100644
Harald Hoyer 3fb223
--- a/modules.d/90dmsquash-live/dmsquash-live-genrules.sh
Harald Hoyer 3fb223
+++ b/modules.d/90dmsquash-live/dmsquash-live-genrules.sh
Harald Hoyer 3fb223
@@ -4,9 +4,9 @@ if [ "${root%%:*}" = "live" ]; then
Harald Hoyer 3fb223
     	${root#live:/dev/} 
Harald Hoyer 3fb223
     printf 'SYMLINK=="%s", SYMLINK+="live"\n' \
Harald Hoyer 3fb223
 	${root#live:/dev/} 
Harald Hoyer 3fb223
-    printf 'KERNEL=="%s", RUN+="/sbin/initqueue --onetime /sbin/dmsquash-live-root $env{DEVNAME}"\n' \
Harald Hoyer 3fb223
+    printf 'KERNEL=="%s", RUN+="/sbin/initqueue --onetime --unique /sbin/dmsquash-live-root $env{DEVNAME}"\n' \
Harald Hoyer 3fb223
     	${root#live:/dev/} 
Harald Hoyer 3fb223
-    printf 'SYMLINK=="%s", RUN+="/sbin/initqueue --onetime /sbin/dmsquash-live-root $env{DEVNAME}"\n' \
Harald Hoyer 3fb223
+    printf 'SYMLINK=="%s", RUN+="/sbin/initqueue --onetime --unique /sbin/dmsquash-live-root $env{DEVNAME}"\n' \
Harald Hoyer 3fb223
 	${root#live:/dev/} 
Harald Hoyer 3fb223
 
Harald Hoyer 3fb223
     ) >> /etc/udev/rules.d/99-live-mount.rules
Harald Hoyer 3fb223
diff --git a/modules.d/90lvm/64-lvm-vol_id.rules b/modules.d/90lvm/64-lvm-vol_id.rules
Harald Hoyer 3fb223
deleted file mode 100644
Harald Hoyer 3fb223
index 4f349a6..0000000
Harald Hoyer 3fb223
--- a/modules.d/90lvm/64-lvm-vol_id.rules
Harald Hoyer 3fb223
+++ /dev/null
Harald Hoyer 3fb223
@@ -1,22 +0,0 @@
Harald Hoyer 3fb223
-# hacky rules to try to activate lvm when we get new block devs...
Harald Hoyer 3fb223
-#
Harald Hoyer 3fb223
-# Copyright 2008, Red Hat, Inc.
Harald Hoyer 3fb223
-# Jeremy Katz <katzj@redhat.com>
Harald Hoyer 3fb223
-
Harald Hoyer 3fb223
-
Harald Hoyer 3fb223
-SUBSYSTEM!="block", GOTO="lvm_end"
Harald Hoyer 3fb223
-ACTION!="add|change", GOTO="lvm_end"
Harald Hoyer 3fb223
-KERNEL=="dm-[0-9]*", ACTION!="change", GOTO="lvm_end"
Harald Hoyer 3fb223
-
Harald Hoyer 3fb223
-ENV{ID_FS_TYPE}=="LVM2_member", \
Harald Hoyer 3fb223
-    TEST!="/tmp/.lvm_scan-%k", \
Harald Hoyer 3fb223
-    RUN+="/bin/sh -c '>/tmp/.lvm_scan-%k; /bin/ln -fs /sbin/lvm_scan /initqueue/lvm_scan.sh'"
Harald Hoyer 3fb223
-
Harald Hoyer 3fb223
-KERNEL!="dm-[0-9]*", GOTO="lvm_end"
Harald Hoyer 3fb223
-
Harald Hoyer 3fb223
-OPTIONS="link_priority=-100"
Harald Hoyer 3fb223
-ENV{ID_FS_USAGE}=="filesystem|other|crypto", ENV{ID_FS_UUID_ENC}=="?*", SYMLINK+="disk/by-uuid/$env{ID_FS_UUID_ENC}"
Harald Hoyer 3fb223
-ENV{ID_FS_USAGE}=="filesystem|other", ENV{ID_FS_LABEL_ENC}=="?*", SYMLINK+="disk/by-label/$env{ID_FS_LABEL_ENC}"
Harald Hoyer 3fb223
-
Harald Hoyer 3fb223
-
Harald Hoyer 3fb223
-LABEL="lvm_end"
Harald Hoyer 3fb223
diff --git a/modules.d/90lvm/64-lvm.rules b/modules.d/90lvm/64-lvm.rules
Harald Hoyer 3fb223
index 0a053ae..a200add 100644
Harald Hoyer 3fb223
--- a/modules.d/90lvm/64-lvm.rules
Harald Hoyer 3fb223
+++ b/modules.d/90lvm/64-lvm.rules
Harald Hoyer 3fb223
@@ -7,9 +7,12 @@
Harald Hoyer 3fb223
 SUBSYSTEM!="block", GOTO="lvm_end"
Harald Hoyer 3fb223
 ACTION!="add|change", GOTO="lvm_end"
Harald Hoyer 3fb223
 KERNEL=="dm-[0-9]*", ACTION=="add", GOTO="lvm_end"
Harald Hoyer 3fb223
+ENV{ID_FS_TYPE}!="LVM2_member", GOTO="lvm_end"
Harald Hoyer 3fb223
 
Harald Hoyer 3fb223
-ENV{ID_FS_TYPE}=="LVM2_member", \
Harald Hoyer 3fb223
-    TEST!="/tmp/.lvm_scan-%k", \
Harald Hoyer 3fb223
-    RUN+="/bin/sh -c '>/tmp/.lvm_scan-%k; /bin/ln -fs /sbin/lvm_scan /initqueue/lvm_scan.sh'"
Harald Hoyer 3fb223
+TEST!="/tmp/.lvm_change-%k", \
Harald Hoyer 3fb223
+    RUN+="/sbin/initqueue --settled --onetime --unique /sbin/lvm_scan"
Harald Hoyer 3fb223
+
Harald Hoyer 3fb223
+ACTION=="add", RUN+="/bin/sh -c '>/tmp/.lvm_scan-%k;'"
Harald Hoyer 3fb223
+ACTION=="change", RUN+="/bin/sh -c '>/tmp/.lvm_change-%k;>/tmp/.lvm_scan-%k;'"
Harald Hoyer 3fb223
 
Harald Hoyer 3fb223
 LABEL="lvm_end"
Harald Hoyer 3fb223
diff --git a/modules.d/90lvm/install b/modules.d/90lvm/install
Harald Hoyer 3fb223
index ad4d2e2..c0952e2 100755
Harald Hoyer 3fb223
--- a/modules.d/90lvm/install
Harald Hoyer 3fb223
+++ b/modules.d/90lvm/install
Harald Hoyer 3fb223
@@ -1,10 +1,7 @@
Harald Hoyer 3fb223
 #!/bin/bash
Harald Hoyer 3fb223
 inst lvm
Harald Hoyer 3fb223
-if [ -x /lib/udev/vol_id ]; then
Harald Hoyer 3fb223
-    inst_rules "$moddir/64-lvm-vol_id.rules" 64-device-mapper.rules
Harald Hoyer 3fb223
-else
Harald Hoyer 3fb223
-    inst_rules "$moddir/64-lvm.rules" 64-device-mapper.rules
Harald Hoyer 3fb223
-fi
Harald Hoyer 3fb223
+
Harald Hoyer 3fb223
+inst_rules "$moddir/64-lvm.rules" 64-lvm.rules
Harald Hoyer 3fb223
 
Harald Hoyer 3fb223
 if [[ $hostonly ]]; then 
Harald Hoyer 3fb223
     [ -f /etc/lvm/lvm.conf ] && inst /etc/lvm/lvm.conf
Harald Hoyer 3fb223
diff --git a/modules.d/90lvm/lvm_scan.sh b/modules.d/90lvm/lvm_scan.sh
Harald Hoyer 3fb223
index a40b677..f606055 100755
Harald Hoyer 3fb223
--- a/modules.d/90lvm/lvm_scan.sh
Harald Hoyer 3fb223
+++ b/modules.d/90lvm/lvm_scan.sh
Harald Hoyer 3fb223
@@ -1,38 +1,35 @@
Harald Hoyer 3fb223
 #!/bin/sh
Harald Hoyer 3fb223
 
Harald Hoyer 3fb223
-if $UDEV_QUEUE_EMPTY >/dev/null 2>&1; then
Harald Hoyer 3fb223
-    [ -h "$job" ] && rm -f "$job"
Harald Hoyer 3fb223
-    # run lvm scan if udev has settled
Harald Hoyer 3fb223
+# run lvm scan if udev has settled
Harald Hoyer 3fb223
 
Harald Hoyer 3fb223
-    VGS=$(getargs rd_LVM_VG=)
Harald Hoyer 3fb223
+. /lib/dracut-lib.sh
Harald Hoyer 3fb223
 
Harald Hoyer 3fb223
-    [ -d /etc/lvm ] || mkdir -p /etc/lvm
Harald Hoyer 3fb223
-    # build a list of devices to scan
Harald Hoyer 3fb223
-    lvmdevs=$(
Harald Hoyer 3fb223
-	for f in /tmp/.lvm_scan-*; do
Harald Hoyer 3fb223
-	    [ -e "$f" ] || continue
Harald Hoyer 3fb223
-	    echo -n "${f##/tmp/.lvm_scan-} "
Harald Hoyer 3fb223
-	done
Harald Hoyer 3fb223
-	)
Harald Hoyer 3fb223
+VGS=$(getargs rd_LVM_VG=)
Harald Hoyer 3fb223
 
Harald Hoyer 3fb223
-    if [ ! -e /etc/lvm/lvm.conf ]; then 
Harald Hoyer 3fb223
-        {
Harald Hoyer 3fb223
-	    echo 'devices {';
Harald Hoyer 3fb223
-	    echo -n '    filter = [ '
Harald Hoyer 3fb223
-	    for dev in $lvmdevs; do
Harald Hoyer 3fb223
-		printf '"a|^/dev/%s$|", ' $dev;
Harald Hoyer 3fb223
-	    done;
Harald Hoyer 3fb223
-	    echo '"r/.*/" ]';
Harald Hoyer 3fb223
-	    echo 'types = [ "blkext", 1024 , "cciss0", 1024 ]'
Harald Hoyer 3fb223
-	    echo '}';	  
Harald Hoyer 3fb223
-        } > /etc/lvm/lvm.conf
Harald Hoyer 3fb223
-	lvmwritten=1
Harald Hoyer 3fb223
-    fi
Harald Hoyer 3fb223
-    info "Scanning devices $lvmdevs for LVM volume groups $VGS"
Harald Hoyer 3fb223
-    lvm vgscan 2>&1 | vinfo
Harald Hoyer 3fb223
-    lvm vgchange -ay $VGS 2>&1 | vinfo
Harald Hoyer 3fb223
-    [ "$lvmwritten" ] && rm -f /etc/lvm/lvm.conf
Harald Hoyer 3fb223
-    unset lvmwritten
Harald Hoyer 3fb223
-    udevsettle
Harald Hoyer 3fb223
-fi
Harald Hoyer 3fb223
+[ -d /etc/lvm ] || mkdir -p /etc/lvm
Harald Hoyer 3fb223
+# build a list of devices to scan
Harald Hoyer 3fb223
+lvmdevs=$(
Harald Hoyer 3fb223
+    for f in /tmp/.lvm_scan-*; do
Harald Hoyer 3fb223
+	[ -e "$f" ] || continue
Harald Hoyer 3fb223
+	echo -n "${f##/tmp/.lvm_scan-} "
Harald Hoyer 3fb223
+    done
Harald Hoyer 3fb223
+)
Harald Hoyer 3fb223
 
Harald Hoyer 3fb223
+if [ ! -e /etc/lvm/lvm.conf ]; then 
Harald Hoyer 3fb223
+    {
Harald Hoyer 3fb223
+	echo 'devices {';
Harald Hoyer 3fb223
+	echo -n '    filter = [ '
Harald Hoyer 3fb223
+	for dev in $lvmdevs; do
Harald Hoyer 3fb223
+	    printf '"a|^/dev/%s$|", ' $dev;
Harald Hoyer 3fb223
+	done;
Harald Hoyer 3fb223
+	echo '"r/.*/" ]';
Harald Hoyer 3fb223
+	echo 'types = [ "blkext", 1024 , "cciss0", 1024 ]'
Harald Hoyer 3fb223
+	echo '}';	  
Harald Hoyer 3fb223
+    } > /etc/lvm/lvm.conf
Harald Hoyer 3fb223
+    lvmwritten=1
Harald Hoyer 3fb223
+fi
Harald Hoyer 3fb223
+info "Scanning devices $lvmdevs for LVM volume groups $VGS"
Harald Hoyer 3fb223
+lvm vgscan 2>&1 | vinfo
Harald Hoyer 3fb223
+lvm vgchange -ay $VGS 2>&1 | vinfo
Harald Hoyer 3fb223
+[ "$lvmwritten" ] && rm -f /etc/lvm/lvm.conf
Harald Hoyer 3fb223
+unset lvmwritten
Harald Hoyer 3fb223
diff --git a/modules.d/90mdraid/65-md-incremental-imsm.rules b/modules.d/90mdraid/65-md-incremental-imsm.rules
Harald Hoyer 3fb223
index 5104fc5..0a06988 100644
Harald Hoyer 3fb223
--- a/modules.d/90mdraid/65-md-incremental-imsm.rules
Harald Hoyer 3fb223
+++ b/modules.d/90mdraid/65-md-incremental-imsm.rules
Harald Hoyer 3fb223
@@ -20,12 +20,46 @@ ENV{DEVTYPE}!="partition", \
Harald Hoyer 3fb223
 
Harald Hoyer 3fb223
 RUN+="/sbin/mdadm -I --no-degraded $env{DEVNAME}"
Harald Hoyer 3fb223
 
Harald Hoyer 3fb223
-RUN+="/bin/sh -c '>/tmp/.mdraid_start-%k; /bin/ln -s /sbin/mdraid_start /initqueue/mdraid_start.sh'"
Harald Hoyer 3fb223
-
Harald Hoyer 3fb223
 LABEL="md_inc_end"
Harald Hoyer 3fb223
 
Harald Hoyer 3fb223
+#
Harald Hoyer 3fb223
+# Handle non-container raid arrays
Harald Hoyer 3fb223
+#
Harald Hoyer 3fb223
+ACTION=="add|change", \
Harald Hoyer 3fb223
+	KERNEL=="md[0-9]*|md/*", \
Harald Hoyer 3fb223
+	ENV{DEVTYPE}!="partition", \
Harald Hoyer 3fb223
+	ENV{MD_LEVEL}!="container", \
Harald Hoyer 3fb223
+	GOTO="do_raidstart"
Harald Hoyer 3fb223
+
Harald Hoyer 3fb223
+GOTO="end_raidstart"
Harald Hoyer 3fb223
+
Harald Hoyer 3fb223
+LABEL="do_raidstart"
Harald Hoyer 3fb223
+
Harald Hoyer 3fb223
+TEST!="/tmp/.mdraid_start-%k", \
Harald Hoyer 3fb223
+	RUN+="/sbin/initqueue --settled --onetime --unique /sbin/mdraid_start"
Harald Hoyer 3fb223
+
Harald Hoyer 3fb223
+ACTION=="change", \
Harald Hoyer 3fb223
+	RUN+="/bin/sh -c '>/tmp/.mdraid_start-%k'"
Harald Hoyer 3fb223
+
Harald Hoyer 3fb223
+LABEL="end_raidstart"
Harald Hoyer 3fb223
+
Harald Hoyer 3fb223
+#
Harald Hoyer 3fb223
+# Handle container raid arrays
Harald Hoyer 3fb223
+#
Harald Hoyer 3fb223
 ACTION=="add|change", \
Harald Hoyer 3fb223
+	KERNEL=="md[0-9]*|md/*", \
Harald Hoyer 3fb223
 	ENV{DEVTYPE}!="partition", \
Harald Hoyer 3fb223
 	ENV{MD_LEVEL}=="container", \
Harald Hoyer 3fb223
-	TEST!="/tmp/.mdcontainer_start-%k", \
Harald Hoyer 3fb223
-	RUN+="/bin/sh -c '>/tmp/.mdcontainer_start-%k; initqueue /sbin/mdcontainer_start $env{DEVNAME}'"
Harald Hoyer 3fb223
+	GOTO="do_container"
Harald Hoyer 3fb223
+
Harald Hoyer 3fb223
+GOTO="end_container"
Harald Hoyer 3fb223
+
Harald Hoyer 3fb223
+LABEL="do_container"
Harald Hoyer 3fb223
+
Harald Hoyer 3fb223
+TEST!="/tmp/.mdcontainer_start-%k", \
Harald Hoyer 3fb223
+	RUN+="/sbin/initqueue --settled --onetime /sbin/mdcontainer_start $env{DEVNAME}"
Harald Hoyer 3fb223
+
Harald Hoyer 3fb223
+ACTION=="change", \
Harald Hoyer 3fb223
+	RUN+="/bin/sh -c '>/tmp/.mdcontainer_start-%k'"
Harald Hoyer 3fb223
+
Harald Hoyer 3fb223
+LABEL="end_container"
Harald Hoyer 3fb223
diff --git a/modules.d/90mdraid/mdcontainer_start.sh b/modules.d/90mdraid/mdcontainer_start.sh
Harald Hoyer 3fb223
index 403b62b..4cb282d 100755
Harald Hoyer 3fb223
--- a/modules.d/90mdraid/mdcontainer_start.sh
Harald Hoyer 3fb223
+++ b/modules.d/90mdraid/mdcontainer_start.sh
Harald Hoyer 3fb223
@@ -1,9 +1,6 @@
Harald Hoyer 3fb223
 #!/bin/sh
Harald Hoyer 3fb223
 . /lib/dracut-lib.sh
Harald Hoyer 3fb223
 
Harald Hoyer 3fb223
-if $UDEV_QUEUE_EMPTY >/dev/null 2>&1; then
Harald Hoyer 3fb223
-    # run mdadm if udev has settled
Harald Hoyer 3fb223
-    md=$1
Harald Hoyer 3fb223
-    # and activate any containers
Harald Hoyer 3fb223
-    mdadm -IR $md 2>&1 | vinfo
Harald Hoyer 3fb223
-fi
Harald Hoyer 3fb223
+md=$1
Harald Hoyer 3fb223
+# and activate any containers
Harald Hoyer 3fb223
+mdadm -IR $md 2>&1 | vinfo
Harald Hoyer 3fb223
diff --git a/modules.d/90mdraid/mdraid_start.sh b/modules.d/90mdraid/mdraid_start.sh
Harald Hoyer 3fb223
index 55e7d9c..ee9362c 100755
Harald Hoyer 3fb223
--- a/modules.d/90mdraid/mdraid_start.sh
Harald Hoyer 3fb223
+++ b/modules.d/90mdraid/mdraid_start.sh
Harald Hoyer 3fb223
@@ -1,9 +1,6 @@
Harald Hoyer 3fb223
 #!/bin/sh
Harald Hoyer 3fb223
 
Harald Hoyer 3fb223
-if $UDEV_QUEUE_EMPTY >/dev/null 2>&1; then
Harald Hoyer 3fb223
-    [ -h "$job" ] && rm -f "$job"
Harald Hoyer 3fb223
-    # run mdadm if udev has settled
Harald Hoyer 3fb223
-    info "Assembling MD RAID arrays"
Harald Hoyer 3fb223
-    mdadm -IRs 2>&1 | vinfo
Harald Hoyer 3fb223
-    udevsettle 
Harald Hoyer 3fb223
-fi
Harald Hoyer 3fb223
+. /lib/dracut-lib.sh
Harald Hoyer 3fb223
+# run mdadm if udev has settled
Harald Hoyer 3fb223
+info "Assembling MD RAID arrays"
Harald Hoyer 3fb223
+mdadm -IRs 2>&1 | vinfo
Harald Hoyer 3fb223
diff --git a/modules.d/95rootfs-block/block-genrules.sh b/modules.d/95rootfs-block/block-genrules.sh
Harald Hoyer 3fb223
index 10471ea..f12a6b9 100644
Harald Hoyer 3fb223
--- a/modules.d/95rootfs-block/block-genrules.sh
Harald Hoyer 3fb223
+++ b/modules.d/95rootfs-block/block-genrules.sh
Harald Hoyer 3fb223
@@ -8,5 +8,5 @@ if [ "${root%%:*}" = "block" ]; then
Harald Hoyer 3fb223
     (
Harald Hoyer 3fb223
     printf '[ -e "%s" ] && { ln -s "%s" /dev/root; rm "$job"; }\n' \
Harald Hoyer 3fb223
 	"${root#block:}" "${root#block:}"
Harald Hoyer 3fb223
-    ) >> /initqueue/blocksymlink.sh
Harald Hoyer 3fb223
+    ) >> /initqueue-settled/blocksymlink.sh
Harald Hoyer 3fb223
 fi
Harald Hoyer 3fb223
diff --git a/modules.d/99base/dracut-lib.sh b/modules.d/99base/dracut-lib.sh
Harald Hoyer 3fb223
index a717bb4..9e33cf3 100644
Harald Hoyer 3fb223
--- a/modules.d/99base/dracut-lib.sh
Harald Hoyer 3fb223
+++ b/modules.d/99base/dracut-lib.sh
Harald Hoyer 3fb223
@@ -117,3 +117,10 @@ udevsettle() {
Harald Hoyer 3fb223
         udevadm settle --timeout=30
Harald Hoyer 3fb223
     fi
Harald Hoyer 3fb223
 }
Harald Hoyer 3fb223
+
Harald Hoyer 3fb223
+if [ -e /proc/cmdline ]; then
Harald Hoyer 3fb223
+	if getarg rdinitdebug; then
Harald Hoyer 3fb223
+	    set -x
Harald Hoyer 3fb223
+	fi
Harald Hoyer 3fb223
+fi
Harald Hoyer 3fb223
+
Harald Hoyer 3fb223
diff --git a/modules.d/99base/init b/modules.d/99base/init
Harald Hoyer 3fb223
index d94a3a2..14505ed 100755
Harald Hoyer 3fb223
--- a/modules.d/99base/init
Harald Hoyer 3fb223
+++ b/modules.d/99base/init
Harald Hoyer 3fb223
@@ -138,7 +138,22 @@ while :; do
Harald Hoyer 3fb223
     [ -n "$queuetriggered" ] && continue
Harald Hoyer 3fb223
 
Harald Hoyer 3fb223
     if $UDEV_QUEUE_EMPTY >/dev/null 2>&1; then
Harald Hoyer 3fb223
-        # no more udev jobs
Harald Hoyer 3fb223
+        unset queuetriggered
Harald Hoyer 3fb223
+	for job in /initqueue-settled/*.sh; do
Harald Hoyer 3fb223
+	    [ -e "$job" ] || break
Harald Hoyer 3fb223
+
Harald Hoyer 3fb223
+	    queuetriggered="1"
Harald Hoyer 3fb223
+
Harald Hoyer 3fb223
+            job=$job . $job
Harald Hoyer 3fb223
+	    
Harald Hoyer 3fb223
+            # bail out, if we have mounted the root filesystem
Harald Hoyer 3fb223
+            [ -d "$NEWROOT/proc" ] && break 2;
Harald Hoyer 3fb223
+
Harald Hoyer 3fb223
+            # check if root can be mounted
Harald Hoyer 3fb223
+            [ -e /dev/root ] && break 2;
Harald Hoyer 3fb223
+	done
Harald Hoyer 3fb223
+
Harald Hoyer 3fb223
+        # no more udev jobs and queues empty.
Harald Hoyer 3fb223
         sleep 0.5
Harald Hoyer 3fb223
         i=$(($i+1))
Harald Hoyer 3fb223
         [ $i -gt 20 ] \
Harald Hoyer 3fb223
diff --git a/modules.d/99base/initqueue b/modules.d/99base/initqueue
Harald Hoyer 3fb223
index a5c6ef6..b2d4406 100755
Harald Hoyer 3fb223
--- a/modules.d/99base/initqueue
Harald Hoyer 3fb223
+++ b/modules.d/99base/initqueue
Harald Hoyer 3fb223
@@ -1,12 +1,32 @@
Harald Hoyer 3fb223
 #!/bin/sh
Harald Hoyer 3fb223
 
Harald Hoyer 3fb223
-if [ "$1" = "--onetime" ]; then
Harald Hoyer 3fb223
-    onetime="yes"
Harald Hoyer 3fb223
-    shift
Harald Hoyer 3fb223
+. /lib/dracut-lib.sh
Harald Hoyer 3fb223
+
Harald Hoyer 3fb223
+while [ $# -gt 0 ]; do
Harald Hoyer 3fb223
+    case "$1" in
Harald Hoyer 3fb223
+	--onetime)
Harald Hoyer 3fb223
+	    onetime="yes"
Harald Hoyer 3fb223
+	    shift;;
Harald Hoyer 3fb223
+	--settled)
Harald Hoyer 3fb223
+	    settled="-settled"
Harald Hoyer 3fb223
+	    shift;;
Harald Hoyer 3fb223
+	--unique)
Harald Hoyer 3fb223
+	    unique="yes"
Harald Hoyer 3fb223
+	    shift;;
Harald Hoyer 3fb223
+	*)
Harald Hoyer 3fb223
+	    break;;
Harald Hoyer 3fb223
+    esac
Harald Hoyer 3fb223
+done
Harald Hoyer 3fb223
+
Harald Hoyer 3fb223
+if [ -z "$unique" ]; then
Harald Hoyer 3fb223
+	job=$$
Harald Hoyer 3fb223
+else
Harald Hoyer 3fb223
+	job=${1##*/}
Harald Hoyer 3fb223
 fi
Harald Hoyer 3fb223
-echo "$@" > /tmp/$$.sh
Harald Hoyer 3fb223
+
Harald Hoyer 3fb223
+echo "$@" > /tmp/${job}.sh
Harald Hoyer 3fb223
 if [ -n "$onetime" ]; then
Harald Hoyer 3fb223
-   echo '[ -e "$job" ] && rm "$job"' >> /tmp/$$.sh
Harald Hoyer 3fb223
+   echo '[ -e "$job" ] && rm "$job"' >> /tmp/${job}.sh
Harald Hoyer 3fb223
 fi
Harald Hoyer 3fb223
-mv /tmp/$$.sh /initqueue/
Harald Hoyer 3fb223
->> /initqueue/work
Harald Hoyer 3fb223
+mv -f /tmp/${job}.sh /initqueue${settled}/
Harald Hoyer 3fb223
+[ -z "$settled" ] && >> /initqueue/work
Harald Hoyer 3fb223
diff --git a/modules.d/99base/install b/modules.d/99base/install
Harald Hoyer 3fb223
index bc2336a..08ca8f0 100755
Harald Hoyer 3fb223
--- a/modules.d/99base/install
Harald Hoyer 3fb223
+++ b/modules.d/99base/install
Harald Hoyer 3fb223
@@ -9,6 +9,7 @@ fi
Harald Hoyer 3fb223
 inst "$moddir/init" "/init"
Harald Hoyer 3fb223
 inst "$moddir/initqueue" "/sbin/initqueue"
Harald Hoyer 3fb223
 mkdir -p ${initdir}/initqueue
Harald Hoyer 3fb223
+mkdir -p ${initdir}/initqueue-settled
Harald Hoyer 3fb223
 mkdir -p ${initdir}/tmp
Harald Hoyer 3fb223
 # Bail out if switch_root does not exist
Harald Hoyer 3fb223
 if which switch_root >/dev/null 2>&1; then
Harald Hoyer 3fb223
-- 
Harald Hoyer 3fb223
1.6.2.5
Harald Hoyer 3fb223