Skip to content

Commit

Permalink
hibernate-util: if asked to bypass space check, accept the case when we
Browse files Browse the repository at this point in the history
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 systemd#30083
  • Loading branch information
YHNdnzj authored and ssahani committed Nov 23, 2023
1 parent 0b9b270 commit 6140c22
Showing 1 changed file with 10 additions and 2 deletions.
12 changes: 10 additions & 2 deletions src/shared/hibernate-util.c
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -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);
Expand Down

0 comments on commit 6140c22

Please sign in to comment.