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)
if (r < 0)
return r;
- return process_resume(info.device);
+ return process_resume(&info);
}
DEFINE_MAIN_GENERATOR_FUNCTION(run);