From 5c7821b6c552bc43f88c6522729b6a7f087e8f60 Mon Sep 17 00:00:00 2001 From: Andrey Borzenkov Date: Wed, 13 Jan 2010 16:07:13 +0100 Subject: [PATCH] Add user suspend support This patch adds support for user mode suspend to disk. It is installed in parallel to kernel mode suspend module; either will fail if system was not suspended using correct tool so next one can be tried. Signed-off-by: Andrey Borzenkov --- dracut.spec | 1 + modules.d/95uswsusp/check | 2 ++ modules.d/95uswsusp/install | 6 ++++++ modules.d/95uswsusp/parse-uswsusp.sh | 20 ++++++++++++++++++++ modules.d/95uswsusp/resume-uswsusp.sh | 11 +++++++++++ 5 files changed, 40 insertions(+) create mode 100755 modules.d/95uswsusp/check create mode 100755 modules.d/95uswsusp/install create mode 100755 modules.d/95uswsusp/parse-uswsusp.sh create mode 100755 modules.d/95uswsusp/resume-uswsusp.sh diff --git a/dracut.spec b/dracut.spec index 326a3e7b..99446720 100644 --- a/dracut.spec +++ b/dracut.spec @@ -186,6 +186,7 @@ rm -rf $RPM_BUILD_ROOT %{_datadir}/dracut/modules.d/95znet %{_datadir}/dracut/modules.d/95terminfo %{_datadir}/dracut/modules.d/95udev-rules +%{_datadir}/dracut/modules.d/95uswsusp %{_datadir}/dracut/modules.d/98syslog %{_datadir}/dracut/modules.d/99base %attr(0644,root,root) %ghost %config(missingok,noreplace) %{_localstatedir}/log/dracut.log diff --git a/modules.d/95uswsusp/check b/modules.d/95uswsusp/check new file mode 100755 index 00000000..ba954795 --- /dev/null +++ b/modules.d/95uswsusp/check @@ -0,0 +1,2 @@ +#!/bin/sh +[ -x /usr/sbin/resume ] diff --git a/modules.d/95uswsusp/install b/modules.d/95uswsusp/install new file mode 100755 index 00000000..f8afe3ac --- /dev/null +++ b/modules.d/95uswsusp/install @@ -0,0 +1,6 @@ +#!/bin/bash +inst /usr/sbin/resume +[ -f /etc/suspend.conf ] && inst /etc/suspend.conf + +inst_hook cmdline 10 "$moddir/parse-uswsusp.sh" +inst_hook mount 10 "$moddir/resume-uswsusp.sh" diff --git a/modules.d/95uswsusp/parse-uswsusp.sh b/modules.d/95uswsusp/parse-uswsusp.sh new file mode 100755 index 00000000..7a0925f3 --- /dev/null +++ b/modules.d/95uswsusp/parse-uswsusp.sh @@ -0,0 +1,20 @@ +#!/bin/sh +if resume=$(getarg resume=) && ! getarg noresume; then + export resume +else + unset resume +fi + +case "$resume" in + LABEL=*) + resume="$(echo $resume | sed 's,/,\\x2f,g')" + resume="/dev/disk/by-label/${resume#LABEL=}" ;; + UUID=*) + resume="/dev/disk/by-uuid/${resume#UUID=}" ;; +esac + +if splash=$(getarg splash=); then + export splash +else + unset splash +fi diff --git a/modules.d/95uswsusp/resume-uswsusp.sh b/modules.d/95uswsusp/resume-uswsusp.sh new file mode 100755 index 00000000..9b185671 --- /dev/null +++ b/modules.d/95uswsusp/resume-uswsusp.sh @@ -0,0 +1,11 @@ +#!/bin/sh +case "$splash" in + quiet ) + a_splash="-P splash=y" + ;; + * ) + a_splash="-P splash=n" + ;; +esac + +/usr/sbin/resume $a_splash "$resume"