Currently we don't wait for the resume device to appear, and will boot without resuming if it is too slow to appear (e.g. USB storage or, in the reported case, an NVMe device!). Use local_device_setup to wait for the device, the same as we do for the root and /usr devices. This also takes care of resolving UUID= and LABEL= syntax, and adds support for PARTUUID= and PARTLABEL=. Signed-off-by: Ben Hutchings <ben@decadent.org.uk> Closes: #854791 --- scripts/local-premount/resume | 41 +++++++---------------------------------- 1 file changed, 7 insertions(+), 34 deletions(-) diff --git a/scripts/local-premount/resume b/scripts/local-premount/resume index 6b3c7c311402..4cafcaafb0fa 100755 --- a/scripts/local-premount/resume +++ b/scripts/local-premount/resume @@ -19,43 +19,16 @@ if [ -z "${resume}" ] || [ ! -e /sys/power/resume ]; then exit 0 fi -case $resume in -LABEL=*) - resume="${resume#LABEL=}" +. /scripts/functions +. /scripts/local - # support any / in LABEL= path (escape to \x2f) - case "${resume}" in - */*) - if command -v sed >/dev/null 2>&1; then - resume="$(echo ${resume} | sed 's,/,\\x2f,g')" - else - if [ "${resume}" != "${resume#/}" ]; then - resume="\x2f${resume#/}" - fi - if [ "${resume}" != "${resume%/}" ]; then - resume="${resume%/}\x2f" - fi - IFS='/' - newresume= - for s in $resume; do - newresume="${newresume:+${newresume}\\x2f}${s}" - done - unset IFS - resume="${newresume}" - fi - esac - resume="/dev/disk/by-label/${resume}" - ;; -UUID=*) - resume="/dev/disk/by-uuid/${resume#UUID=}" - ;; -esac - -[ ! -e "${resume}" ] && exit 0 +if ! local_device_setup ${resume} "suspend/resume device" false; then + exit 0 +fi # hardcode path, uswsusp ships an resume binary too if [ -n "${resume_offset}" ]; then - /bin/resume ${resume} ${resume_offset} + /bin/resume ${DEV} ${resume_offset} else - /bin/resume ${resume} + /bin/resume ${DEV} fi
Attachment:
signature.asc
Description: Digital signature