chiark / gitweb /
core: hook up /proc queries for the root slice, too
authorLennart Poettering <lennart@poettering.net>
Fri, 9 Feb 2018 18:05:59 +0000 (19:05 +0100)
committerSven Eden <yamakuzure@gmx.net>
Wed, 30 May 2018 05:59:09 +0000 (07:59 +0200)
Do what we already prepped in cgtop for the root slice in PID 1 too:
consult /proc for the data we need.

src/core/cgroup.c

index 51f41e03b5aeace52e6828ab8b14f1caf6d6d425..c5ca9947ecb995728c368c3ce26d38c2a0b04b6a 100644 (file)
@@ -2355,6 +2355,10 @@ int unit_get_memory_current(Unit *u, uint64_t *ret) {
         if (!u->cgroup_path)
                 return -ENODATA;
 
+        /* The root cgroup doesn't expose this information, let's get it from /proc instead */
+        if (unit_has_root_cgroup(u))
+                return procfs_memory_get_current(ret);
+
         if ((u->cgroup_realized_mask & CGROUP_MASK_MEMORY) == 0)
                 return -ENODATA;
 
@@ -2386,13 +2390,13 @@ int unit_get_tasks_current(Unit *u, uint64_t *ret) {
         if (!u->cgroup_path)
                 return -ENODATA;
 
-        if ((u->cgroup_realized_mask & CGROUP_MASK_PIDS) == 0)
-                return -ENODATA;
-
         /* The root cgroup doesn't expose this information, let's get it from /proc instead */
         if (unit_has_root_cgroup(u))
                 return procfs_tasks_get_current(ret);
 
+        if ((u->cgroup_realized_mask & CGROUP_MASK_PIDS) == 0)
+                return -ENODATA;
+
         r = cg_get_attribute("pids", u->cgroup_path, "pids.current", &v);
         if (r == -ENOENT)
                 return -ENODATA;
@@ -2413,6 +2417,10 @@ static int unit_get_cpu_usage_raw(Unit *u, nsec_t *ret) {
         if (!u->cgroup_path)
                 return -ENODATA;
 
+        /* The root cgroup doesn't expose this information, let's get it from /proc instead */
+        if (unit_has_root_cgroup(u))
+                return procfs_cpu_get_usage(ret);
+
         r = cg_all_unified();
         if (r < 0)
                 return r;