chiark / gitweb /
cgtop: work even if not all cgroups are available
[elogind.git] / src / cgtop / cgtop.c
index 1fe247c667afae1f5b0a7687411af5d771a8fa19..f988adb363f5d428828241396d8896fa3e176d54 100644 (file)
@@ -26,6 +26,7 @@
 #include <alloca.h>
 #include <getopt.h>
 
+#include "path-util.h"
 #include "util.h"
 #include "hashmap.h"
 #include "cgroup-util.h"
@@ -53,7 +54,7 @@ typedef struct Group {
         uint64_t io_input_bps, io_output_bps;
 } Group;
 
-static unsigned arg_depth = 2;
+static unsigned arg_depth = 3;
 static usec_t arg_delay = 1*USEC_PER_SEC;
 
 static enum {
@@ -340,17 +341,22 @@ static int refresh(Hashmap *a, Hashmap *b, unsigned iteration) {
 
         r = refresh_one("name=systemd", "/", a, b, iteration, 0);
         if (r < 0)
-                return r;
-
+                if (r != -ENOENT)
+                    return r;
         r = refresh_one("cpuacct", "/", a, b, iteration, 0);
         if (r < 0)
-                return r;
-
+                if (r != -ENOENT)
+                    return r;
         r = refresh_one("memory", "/", a, b, iteration, 0);
         if (r < 0)
-                return r;
+                if (r != -ENOENT)
+                    return r;
 
-        return refresh_one("blkio", "/", a, b, iteration, 0);
+        r = refresh_one("blkio", "/", a, b, iteration, 0);
+        if (r < 0)
+                if (r != -ENOENT)
+                    return r;
+        return 0;
 }
 
 static int group_compare(const void*a, const void *b) {