$ sudo swapoff -av
swapoff /dev/vda4
$ sudo systemctl hibernate
Failed to hibernate system via logind: Not enough swap space for hibernation
Fixes #6729.
if (sleep_verb) {
#if 0 /// Within elogind the manager m must be provided, too
r = can_sleep(sleep_verb);
if (sleep_verb) {
#if 0 /// Within elogind the manager m must be provided, too
r = can_sleep(sleep_verb);
+ if (r == -ENOSPC)
+ return sd_bus_error_set(error, BUS_ERROR_SLEEP_VERB_NOT_SUPPORTED,
+ "Not enough swap space for hibernation");
+ if (r == 0)
+ return sd_bus_error_setf(error, BUS_ERROR_SLEEP_VERB_NOT_SUPPORTED,
+ "Sleep verb \"%s\" not supported", sleep_verb);
#else
r = can_sleep(m, sleep_verb);
#endif // 0
if (r < 0)
return r;
#else
r = can_sleep(m, sleep_verb);
#endif // 0
if (r < 0)
return r;
-
- if (r == 0)
- return sd_bus_error_setf(error, BUS_ERROR_SLEEP_VERB_NOT_SUPPORTED, "Sleep verb not supported");
}
#if 0 /// Within elogind it does not make sense to verify shutdown creds when suspending
}
#if 0 /// Within elogind it does not make sense to verify shutdown creds when suspending
if (sleep_verb) {
#if 0 /// elogind needs to have the manager being passed
r = can_sleep(sleep_verb);
if (sleep_verb) {
#if 0 /// elogind needs to have the manager being passed
r = can_sleep(sleep_verb);
+ if (IN_SET(r, 0, -ENOSPC))
+ return sd_bus_reply_method_return(message, "s", "na");
#else
r = can_sleep(m, sleep_verb);
#endif // 0
if (r < 0)
return r;
#else
r = can_sleep(m, sleep_verb);
#endif // 0
if (r < 0)
return r;
- if (r == 0)
- return sd_bus_reply_method_return(message, "s", "na");
}
r = sd_bus_query_sender_creds(message, SD_BUS_CREDS_EUID, &creds);
}
r = sd_bus_query_sender_creds(message, SD_BUS_CREDS_EUID, &creds);
FOREACH_STRING(p, "suspend", "hibernate") {
r = can_sleep(p);
FOREACH_STRING(p, "suspend", "hibernate") {
r = can_sleep(p);
- if (r < 0)
- return log_debug_errno(r, "Failed to check if %s is possible: %m", p);
- if (r == 0) {
+ if (IN_SET(r, 0, -ENOSPC)) {
log_debug("Unable to %s system.", p);
return false;
}
log_debug("Unable to %s system.", p);
return false;
}
+ if (r < 0)
+ return log_debug_errno(r, "Failed to check if %s is possible: %m", p);
return false;
return streq(verb, "suspend") || enough_memory_for_hibernation();
return false;
return streq(verb, "suspend") || enough_memory_for_hibernation();
+ if (streq(verb, "suspend"))
+ return true;
+
+ if (!enough_memory_for_hibernation())
+ return -ENOSPC;
+
+ return true;