From: Mike Yuan Date: Tue, 12 Dec 2023 08:20:32 +0000 (+0800) Subject: hibernate-resume: don't wait forever if hibernate info is from EFI X-Git-Tag: v256-rc1~1514 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=6cfce71b5034eb304eea82a31c400ff511cfa69e;p=thirdparty%2Fsystemd.git hibernate-resume: don't wait forever if hibernate info is from EFI --- diff --git a/src/hibernate-resume/hibernate-resume-generator.c b/src/hibernate-resume/hibernate-resume-generator.c index c1c21a2c13d..01684283942 100644 --- a/src/hibernate-resume/hibernate-resume-generator.c +++ b/src/hibernate-resume/hibernate-resume-generator.c @@ -54,26 +54,30 @@ static int parse_proc_cmdline_item(const char *key, const char *value, void *dat return 0; } -static int process_resume(const char *device) { +static int process_resume(const HibernateInfo *info) { _cleanup_free_ char *device_unit = NULL; int r; - assert(device); + assert(info); - r = unit_name_from_path(device, ".device", &device_unit); + r = unit_name_from_path(info->device, ".device", &device_unit); if (r < 0) - return log_error_errno(r, "Failed to generate device unit name from path '%s': %m", device); + return log_error_errno(r, "Failed to generate device unit name from path '%s': %m", info->device); - r = write_drop_in(arg_dest, device_unit, 40, "device-timeout", - "# Automatically generated by systemd-hibernate-resume-generator\n\n" - "[Unit]\n" - "JobTimeoutSec=infinity\n"); + /* If hibernate info is acquired from EFI variable, don't wait forever by default. Otherwise, if + * swap device is not present and HibernateLocation was not correctly cleared, we end up blocking + * the boot process infinitely. */ + r = write_drop_in_format(arg_dest, device_unit, 40, "device-timeout", + "# Automatically generated by systemd-hibernate-resume-generator\n\n" + "[Unit]\n" + "JobTimeoutSec=%s\n", + info->cmdline ? "infinity" : "2min"); if (r < 0) log_warning_errno(r, "Failed to write device timeout drop-in, ignoring: %m"); r = generator_write_timeouts(arg_dest, - device, - device, + info->device, + info->device, arg_resume_options ?: arg_root_options, NULL); if (r < 0) @@ -120,7 +124,7 @@ static int run(const char *dest, const char *dest_early, const char *dest_late) if (r < 0) return r; - return process_resume(info.device); + return process_resume(&info); } DEFINE_MAIN_GENERATOR_FUNCTION(run);