Blame SOURCES/0272-base-Don-t-wait-for-swap-devices-in-host-only-mode.patch

18971c
From 589b4e61e2db2a5835b5aa425268f6f0f67c14e4 Mon Sep 17 00:00:00 2001
18971c
From: Colin Guthrie <colin@mageia.org>
18971c
Date: Fri, 15 May 2015 14:53:40 +0100
18971c
Subject: [PATCH] base: Don't wait for swap devices in host-only mode.
18971c
18971c
The only reason we add swap devices to host-only mode (added in
18971c
dd5875499ece9dbc90e10eafd0073ee15d0c86a4) is to allow us to process
18971c
resume= arguments passed on the kernel command line when the swap
18971c
partition lives on something slightly more complex than a normal
18971c
partion (e.g. in an LVM or RAID setup).
18971c
18971c
By adding the device to host_devs, the necessary LVM and RAID hooks
18971c
are added and thus the underlying storage will be initialised OK, and
18971c
the 95resume module handles the waiting for the device (via udev rules
18971c
creating the /dev/resume symlink).
18971c
18971c
So ultimately, we do not need to hard-code the waiting for the swap
18971c
devices into the initramfs at build time as the waiting part can be
18971c
dynamic.
18971c
18971c
This makes things more resiliant to swap partitions disappearing and
18971c
being reformatted etc.
18971c
18971c
Inspired by a patch by Martin Whitaker on Mageia bug:
18971c
https://bugs.mageia.org/show_bug.cgi?id=12305
18971c
18971c
(cherry picked from commit 3e3ed34f036a833ccc2150c6224d0a954e841e39)
18971c
---
18971c
 dracut.sh                        | 6 ++++--
18971c
 modules.d/99base/module-setup.sh | 8 ++++++++
18971c
 2 files changed, 12 insertions(+), 2 deletions(-)
18971c
18971c
diff --git a/dracut.sh b/dracut.sh
18971c
index a214f810..90ac1fe9 100755
18971c
--- a/dracut.sh
18971c
+++ b/dracut.sh
18971c
@@ -1056,7 +1056,9 @@ if [[ $hostonly ]]; then
18971c
                     done < /etc/crypttab
18971c
                 fi
18971c
 
18971c
-                push host_devs "$(readlink -f "$dev")"
18971c
+                _dev="$(readlink -f "$dev")"
18971c
+                push host_devs "$_dev"
18971c
+                push swap_devs "$_dev"
18971c
                 break
18971c
             done < /etc/fstab
18971c
         done < /proc/swaps
18971c
@@ -1181,7 +1183,7 @@ export initdir dracutbasedir \
18971c
     omit_drivers mdadmconf lvmconf root_dev \
18971c
     use_fstab fstab_lines libdirs fscks nofscks ro_mnt \
18971c
     stdloglvl sysloglvl fileloglvl kmsgloglvl logfile \
18971c
-    debug host_fs_types host_devs sshkey add_fstab \
18971c
+    debug host_fs_types host_devs swap_devs sshkey add_fstab \
18971c
     DRACUT_VERSION udevdir prefix filesystems drivers \
18971c
     systemdutildir systemdsystemunitdir systemdsystemconfdir \
18971c
     host_modalias host_modules hostonly_cmdline loginstall \
18971c
diff --git a/modules.d/99base/module-setup.sh b/modules.d/99base/module-setup.sh
18971c
index fddf4b06..d5e78613 100755
18971c
--- a/modules.d/99base/module-setup.sh
18971c
+++ b/modules.d/99base/module-setup.sh
18971c
@@ -104,6 +104,14 @@ install() {
18971c
 
18971c
                 for _dev in ${host_devs[@]}; do
18971c
                     [[ "$_dev" == "$root_dev" ]] && continue
18971c
+
18971c
+                    # We only actually wait for real devs - swap is only needed
18971c
+                    # for resume and udev rules generated when parsing resume=
18971c
+                    # argument take care of the waiting for us
18971c
+                    for _dev2 in ${swap_devs[@]}; do
18971c
+                      [[ "$_dev" == "$_dev2" ]] && continue 2
18971c
+                    done
18971c
+
18971c
                     _pdev=$(get_persistent_dev $_dev)
18971c
 
18971c
                     case "$_pdev" in