]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
oom: log one-time warning if kernel doesn't provide memory.swap.current 19647/head
authorDan Streetman <ddstreet@canonical.com>
Fri, 14 May 2021 12:08:33 +0000 (08:08 -0400)
committerDan Streetman <ddstreet@canonical.com>
Thu, 20 May 2021 19:40:29 +0000 (15:40 -0400)
The kernel can be compiled without support for any memory.swap.* files, or
it can be disabled at boot time with the 'swapaccount=0' boot parameter,
so if the file doesn't exist log warning indicating the kernel doesn't
support the file and the user may need to try using the 'swapaccount=1'
boot param.

Note that the actual error from the call to fopen() is ENOENT, but
that is translated into ENODATA in cg_get_attribute_as_uint64()

src/oom/oomd-util.c

index 5bf81479c9f44b61acda229b2b1d279d55800151..0550ac6c74ea489e432032b078acfd38536c2140 100644 (file)
@@ -333,7 +333,11 @@ int oomd_cgroup_context_acquire(const char *path, OomdCGroupContext **ret) {
                         return log_debug_errno(r, "Error getting memory.low from %s: %m", path);
 
                 r = cg_get_attribute_as_uint64(SYSTEMD_CGROUP_CONTROLLER, path, "memory.swap.current", &ctx->swap_usage);
-                if (r < 0)
+                if (r == -ENODATA)
+                        /* The kernel can be compiled without support for memory.swap.* files,
+                         * or it can be disabled with boot param 'swapaccount=0' */
+                        log_once(LOG_WARNING, "No kernel support for memory.swap.current from %s (try boot param swapaccount=1), ignoring.", path);
+                else if (r < 0)
                         return log_debug_errno(r, "Error getting memory.swap.current from %s: %m", path);
 
                 r = cg_get_keyed_attribute(SYSTEMD_CGROUP_CONTROLLER, path, "memory.stat", STRV_MAKE("pgscan"), &val);