hibernate-util: if asked to bypass space check, accept the case when we

have no swap space at all

But I shall still recommend
https://chrisdown.name/2018/01/02/in-defence-of-swap.html
to everyone ;-)

Fixes #30083
This commit is contained in:
Mike Yuan
2023-11-18 20:15:42 +08:00
parent 500ec22d09
commit 0e8f09561f
+10 -2
View File
@@ -425,10 +425,18 @@ static int get_proc_meminfo_active(unsigned long long *ret) {
int hibernation_is_safe(void) {
unsigned long long active;
uint64_t size, used;
bool resume_set;
bool resume_set, bypass_space_check;
int r;
bypass_space_check = getenv_bool("SYSTEMD_BYPASS_HIBERNATION_MEMORY_CHECK") > 0;
r = find_suitable_hibernation_device_full(NULL, &size, &used);
if (r == -ENOSPC && bypass_space_check)
/* If we don't have any available swap space at all, and SYSTEMD_BYPASS_HIBERNATION_MEMORY_CHECK
* is set, skip all remaining checks since we can't do that properly anyway. It is quite
* possible that the user is using a setup similar to #30083. When we actually perform
* hibernation in sleep.c we'll check everything again. */
return 0;
if (r < 0)
return r;
resume_set = r > 0;
@@ -437,7 +445,7 @@ int hibernation_is_safe(void) {
return log_debug_errno(SYNTHETIC_ERRNO(ENOTRECOVERABLE),
"Not running on EFI and resume= is not set. Hibernation is not safe.");
if (getenv_bool("SYSTEMD_BYPASS_HIBERNATION_MEMORY_CHECK") > 0)
if (bypass_space_check)
return true;
r = get_proc_meminfo_active(&active);