4fbe94
From 069cf14150b55e6580cf1d482709a0e48c36ee84 Mon Sep 17 00:00:00 2001
4fbe94
From: Andrew Jorgensen <ajorgens@amazon.com>
4fbe94
Date: Wed, 25 Jul 2018 08:06:57 -0700
4fbe94
Subject: [PATCH] shared/sleep-config: exclude zram devices from hibernation
4fbe94
 candidates
4fbe94
4fbe94
On a host with sufficiently large zram but with no actual swap, logind will
4fbe94
respond to CanHibernate() with yes. With this patch, it will correctly respond
4fbe94
no, unless there are other swap devices to consider.
4fbe94
4fbe94
(cherry picked from commit 411ae92b407bd7b4549b205ad754bcd0e3dfd81f)
4fbe94
4fbe94
Resolves: #1763617
4fbe94
---
4fbe94
 src/shared/sleep-config.c | 16 +++++++++++++---
4fbe94
 1 file changed, 13 insertions(+), 3 deletions(-)
4fbe94
4fbe94
diff --git a/src/shared/sleep-config.c b/src/shared/sleep-config.c
4fbe94
index 9e4ce183d3..a1523e3f21 100644
4fbe94
--- a/src/shared/sleep-config.c
4fbe94
+++ b/src/shared/sleep-config.c
4fbe94
@@ -21,6 +21,7 @@
4fbe94
 #include "log.h"
4fbe94
 #include "macro.h"
4fbe94
 #include "parse-util.h"
4fbe94
+#include "path-util.h"
4fbe94
 #include "sleep-config.h"
4fbe94
 #include "string-util.h"
4fbe94
 #include "strv.h"
4fbe94
@@ -201,9 +202,18 @@ int find_hibernate_location(char **device, char **type, size_t *size, size_t *us
4fbe94
                         continue;
4fbe94
                 }
4fbe94
 
4fbe94
-                if (streq(type_field, "partition") && endswith(dev_field, "\\040(deleted)")) {
4fbe94
-                        log_warning("Ignoring deleted swapfile '%s'.", dev_field);
4fbe94
-                        continue;
4fbe94
+                if (streq(type_field, "partition")) {
4fbe94
+                        if (endswith(dev_field, "\\040(deleted)")) {
4fbe94
+                                log_warning("Ignoring deleted swapfile '%s'.", dev_field);
4fbe94
+                                continue;
4fbe94
+                        }
4fbe94
+
4fbe94
+                        const char *fn;
4fbe94
+                        fn = path_startswith(dev_field, "/dev/");
4fbe94
+                        if (fn && startswith(fn, "zram")) {
4fbe94
+                                log_debug("Ignoring compressed ram swap device '%s'.", dev_field);
4fbe94
+                                continue;
4fbe94
+                        }
4fbe94
                 }
4fbe94
                 if (device)
4fbe94
                         *device = TAKE_PTR(dev_field);