diff --git a/dracut.sh b/dracut.sh index 6d487de4..2a13d2ea 100755 --- a/dracut.sh +++ b/dracut.sh @@ -1224,7 +1224,9 @@ if [[ $hostonly ]]; then done < /etc/crypttab fi - push_host_devs "$(readlink -f "$dev")" + _dev="$(readlink -f "$dev")" + push_host_devs "$_dev" + push swap_devs "$_dev" break done < /etc/fstab done < /proc/swaps @@ -1335,7 +1337,7 @@ export initdir dracutbasedir \ omit_drivers mdadmconf lvmconf root_dev \ use_fstab fstab_lines libdirs fscks nofscks ro_mnt \ stdloglvl sysloglvl fileloglvl kmsgloglvl logfile \ - debug host_fs_types host_devs sshkey add_fstab \ + debug host_fs_types host_devs swap_devs sshkey add_fstab \ DRACUT_VERSION udevdir prefix filesystems drivers \ systemdutildir systemdsystemunitdir systemdsystemconfdir \ host_modalias host_modules hostonly_cmdline loginstall \ diff --git a/modules.d/95resume/parse-resume.sh b/modules.d/95resume/parse-resume.sh index 92964298..3b97e51c 100755 --- a/modules.d/95resume/parse-resume.sh +++ b/modules.d/95resume/parse-resume.sh @@ -37,6 +37,8 @@ esac if ! getarg noresume; then if [ -n "$resume" ]; then + wait_for_dev /dev/resume + { printf "KERNEL==\"%s\", ACTION==\"add|change\", SYMLINK+=\"resume\"\n" \ ${resume#/dev/}; @@ -65,7 +67,7 @@ if ! getarg noresume; then printf -- '%s\n' ' RUN+="/sbin/initqueue --finished --unique --name 00resume echo %M:%m > /sys/power/resume"' } >> /etc/udev/rules.d/99-resume.rules - printf '[ -e "%s" ] && { ln -s "%s" /dev/resume; rm -f -- "$job" "%s/initqueue/timeout/resume.sh"; }\n' \ + printf '[ -e "%s" ] && { ln -s "%s" /dev/resume 2> /dev/null; rm -f -- "$job" "%s/initqueue/timeout/resume.sh"; }\n' \ "$resume" "$resume" "$hookdir" >> $hookdir/initqueue/settled/resume.sh { diff --git a/modules.d/99base/module-setup.sh b/modules.d/99base/module-setup.sh index fd65cdf6..bbc68ba1 100755 --- a/modules.d/99base/module-setup.sh +++ b/modules.d/99base/module-setup.sh @@ -103,6 +103,14 @@ install() { for _dev in ${host_devs[@]}; do [[ "$_dev" == "$root_dev" ]] && continue + + # We only actually wait for real devs - swap is only needed + # for resume and udev rules generated when parsing resume= + # argument take care of the waiting for us + for _dev2 in ${swap_devs[@]}; do + [[ "$_dev" == "$_dev2" ]] && continue 2 + done + _pdev=$(get_persistent_dev $_dev) case "$_pdev" in