From f65b874bda9f8b12d41c1f07826f584a8f5dcf6d Mon Sep 17 00:00:00 2001
From: Colin Guthrie <colin@mageia.org>
Date: Sat, 31 Dec 2011 13:30:58 +0000
Subject: [PATCH] resume: Fix failure when invalid device passed via 'resume='
This commit allows the waiting for a device to be cancelled.
When the resume partition does not exist, it becomes quite hard
to work out what to do (you have to either create the
/dev/resume symlink manually, or remove the 'finished' job
that is waiting for it). Additionally dracut incorrectly
displays a message about not being able to find the root
device, which is bogus and misleading.
This commit should just bail on the whole resume thing
if the device cannot be found and proceed with a normal boot.
---
modules.d/95resume/resume-genrules.sh | 3 +++
modules.d/99base/dracut-lib.sh | 8 ++++++++
2 files changed, 11 insertions(+), 0 deletions(-)
diff --git a/modules.d/95resume/resume-genrules.sh b/modules.d/95resume/resume-genrules.sh
index 16df877..ee4eacb 100755
--- a/modules.d/95resume/resume-genrules.sh
+++ b/modules.d/95resume/resume-genrules.sh
@@ -35,6 +35,9 @@ if [ -n "$resume" ]; then
printf '[ -e "%s" ] && { ln -s "%s" /dev/resume; rm "$job"; }\n' \
"$resume" "$resume" >> $hookdir/initqueue/settled/resume.sh
+ printf 'warn "Cancelling resume operation. Device not found."; cancel_wait_for_dev /dev/resume; rm "$job" "%s/initqueue/settled/resume.sh";' \
+ "$hookdir" >> $hookdir/initqueue/timeout/resume.sh
+
wait_for_dev "/dev/resume"
elif ! getarg noresume; then
diff --git a/modules.d/99base/dracut-lib.sh b/modules.d/99base/dracut-lib.sh
index 9eae4d9..b4fb435 100755
--- a/modules.d/99base/dracut-lib.sh
+++ b/modules.d/99base/dracut-lib.sh
@@ -717,6 +717,14 @@ wait_for_dev()
} >> "$hookdir/emergency/80-${_name}.sh"
}
+cancel_wait_for_dev()
+{
+ local _name
+ _name="$(str_replace "$1" '/' '\\x2f')"
+ rm -f "$hookdir/initqueue/finished/devexists-${_name}.sh"
+ rm -f "$hookdir/emergency/80-${_name}.sh"
+}
+
killproc() {
local _exe="$(command -v $1)"
local _sig=$2