add wait_for_dev() and wait_for_mount()

master
Harald Hoyer 2011-11-07 08:46:36 +01:00
parent 9549014694
commit b0692d0311
9 changed files with 43 additions and 27 deletions

View File

@ -4,13 +4,15 @@


type getarg >/dev/null 2>&1 || . /lib/dracut-lib.sh type getarg >/dev/null 2>&1 || . /lib/dracut-lib.sh


if [ -e /dev/root ]; then dev="${1:-/dev/root}"
if strstr "$(udevadm info --query=env --name=/dev/root)" "ID_FS_TYPE=btrfs"; then
if [ -e "$dev" ]; then
if strstr "$(udevadm info --query=env \"--name=$dev\")" "ID_FS_TYPE=btrfs"; then
info "Checking, if btrfs device complete" info "Checking, if btrfs device complete"
unset __btrfs_mount unset __btrfs_mount
mount -o ro /dev/root /tmp >/dev/null 2>&1 mount -o ro "$dev" /tmp >/dev/null 2>&1
__btrfs_mount=$? __btrfs_mount=$?
[ $__btrfs_mount -eq 0 ] && umount /dev/root >/dev/null 2>&1 [ $__btrfs_mount -eq 0 ] && umount "$dev" >/dev/null 2>&1
exit $__btrfs_mount exit $__btrfs_mount
fi fi
fi fi

View File

@ -9,12 +9,11 @@ case "$root" in
printf 'SYMLINK=="%s", RUN+="/sbin/initqueue --settled --onetime --unique /sbin/dmsquash-live-root $env{DEVNAME}"\n' \ printf 'SYMLINK=="%s", RUN+="/sbin/initqueue --settled --onetime --unique /sbin/dmsquash-live-root $env{DEVNAME}"\n' \
${root#live:/dev/} ${root#live:/dev/}
} >> /etc/udev/rules.d/99-live-squash.rules } >> /etc/udev/rules.d/99-live-squash.rules
echo '[ -e /dev/root ]' > $hookdir/initqueue/finished/dmsquash.sh wait_for_dev "${root#live:}"
;; ;;
live:*) live:*)
if [ -f "${root#live:}" ]; then if [ -f "${root#live:}" ]; then
/sbin/initqueue --settled --onetime --unique /sbin/dmsquash-live-root "${root#live:}" /sbin/initqueue --settled --onetime --unique /sbin/dmsquash-live-root "${root#live:}"
echo '[ -e /dev/root ]' > $hookdir/initqueue/finished/dmsquash.sh
fi fi
;; ;;
esac esac

View File

@ -6,5 +6,4 @@ if [ "${root%%:*}" = "liveiso" ]; then
printf 'KERNEL=="loop0", RUN+="/sbin/initqueue --settled --onetime --unique /sbin/dmsquash-live-root `/sbin/losetup -f --show %s`"\n' \ printf 'KERNEL=="loop0", RUN+="/sbin/initqueue --settled --onetime --unique /sbin/dmsquash-live-root `/sbin/losetup -f --show %s`"\n' \
${root#liveiso:} ${root#liveiso:}
} >> /etc/udev/rules.d/99-liveiso-mount.rules } >> /etc/udev/rules.d/99-liveiso-mount.rules
echo '[ -e /dev/root ]' > $hookdir/initqueue/finished/dmsquash.sh
fi fi

View File

@ -10,12 +10,7 @@ if ! getargbool 1 rd.lvm -n rd_NO_LVM; then
rm -f /etc/udev/rules.d/64-lvm*.rules rm -f /etc/udev/rules.d/64-lvm*.rules
else else
for dev in $(getargs rd.lvm.vg rd_LVM_VG=) $(getargs rd.lvm.lv rd_LVM_LV=); do for dev in $(getargs rd.lvm.vg rd_LVM_VG=) $(getargs rd.lvm.lv rd_LVM_LV=); do
printf '[ -e "/dev/%s" ] || return 1\n' $dev \ wait_for_dev "/dev/$dev"
>> $hookdir/initqueue/finished/lvm.sh
{
printf '[ -e "/dev/%s" ] || ' $dev
printf 'warn "LVM "%s" not found"\n' $dev
} >> $hookdir/emergency/90-lvm.sh
done done
fi fi



View File

@ -76,5 +76,3 @@ rootok=1
# Shut up init error check # Shut up init error check
[ -z "$root" ] && root="iscsi" [ -z "$root" ] && root="iscsi"


echo '[ -e /dev/root ]' > $hookdir/initqueue/finished/iscsi.sh


View File

@ -38,6 +38,7 @@ if [ "${root%%:*}" = "nbd" ] ; then


fi fi
netroot=$root netroot=$root
unset root
fi fi


# If it's not nbd we don't continue # If it's not nbd we don't continue
@ -55,7 +56,8 @@ incol2 /proc/devices nbd || modprobe nbd || die "nbdroot requested but kernel/in
rootok=1 rootok=1


# Shut up init error check # Shut up init error check
[ -z "$root" ] && root="nbd" if [ -z "$root" ]; then

root=block:/dev/root
echo '[ -e /dev/root ]' > $hookdir/initqueue/finished/nbd.sh wait_for_dev /dev/root
fi



View File

@ -35,13 +35,7 @@ if [ -n "$resume" ]; then
printf '[ -e "%s" ] && { ln -s "%s" /dev/resume; rm "$job"; }\n' \ printf '[ -e "%s" ] && { ln -s "%s" /dev/resume; rm "$job"; }\n' \
"$resume" "$resume" >> $hookdir/initqueue/settled/resume.sh "$resume" "$resume" >> $hookdir/initqueue/settled/resume.sh


echo '[ -e /dev/resume ]' > $hookdir/initqueue/finished/resume.sh wait_for_dev "/dev/resume"

{
printf '[ -e /dev/resume ] || '
printf 'warn "resume device "%s" not found"\n' "$resume"
} >> $hookdir/emergency/00-resume.sh



elif ! getarg noresume; then elif ! getarg noresume; then
{ {

View File

@ -13,5 +13,5 @@ if [ "${root%%:*}" = "block" ]; then
printf '[ -e "%s" ] && { ln -s "%s" /dev/root 2>/dev/null; rm "$job"; }\n' \ printf '[ -e "%s" ] && { ln -s "%s" /dev/root 2>/dev/null; rm "$job"; }\n' \
"${root#block:}" "${root#block:}" > $hookdir/initqueue/settled/blocksymlink.sh "${root#block:}" "${root#block:}" > $hookdir/initqueue/settled/blocksymlink.sh


echo '[ -e /dev/root ]' > $hookdir/initqueue/finished/block.sh wait_for_dev "${root#block:}"
fi fi

View File

@ -261,7 +261,10 @@ source_hook() {


check_finished() { check_finished() {
local f local f
for f in $hookdir/initqueue/finished/*.sh; do { [ -e "$f" ] && ( . "$f" ) ; } || return 1 ; done for f in $hookdir/initqueue/finished/*.sh; do
[ "$f" = "$hookdir/initqueue/finished/*.sh" ] && return 0
{ [ -e "$f" ] && ( . "$f" ) ; } || return 1
done
return 0 return 0
} }


@ -560,3 +563,27 @@ usable_root() {
done done
return 0 return 0
} }

wait_for_mount()
{
local _name
_name="$(str_replace "$1" '/' '\\x2f')"
printf '. /lib/dracut-lib.sh\nismounted "%s"\n' $1 \
>> "$hookdir/initqueue/finished/ismounted-${_name}.sh"
{
printf 'ismounted "%s" || ' $1
printf 'warn "\"%s\" is not mounted"\n' $1
} >> "$hookdir/emergency/90-${_name}.sh"
}

wait_for_dev()
{
local _name
_name="$(str_replace "$1" '/' '\\x2f')"
printf '[ -e "%s" ]\n' $1 \
>> "$hookdir/initqueue/finished/devexists-${_name}.sh"
{
printf '[ -e "%s" ] || ' $1
printf 'warn "\"%s\" does not exist"\n' $1
} >> "$hookdir/emergency/80-${_name}.sh"
}