On Tue, 2012-05-22 at 13:12 +0200, Lennart Poettering wrote: 
> 
> Hmm, this is misleading. THis has little to do with being ready, as the
> cgroup VFS are mounted synchronously very early in PID 1 and it is
> basically very hard to run in parallel with that.
> 
> So this check actually would check for something different: whether the
> system was booted with systemd at all, and whether the respective cgroup
> controller has been enabled in the kernel at all. But for the former an
> excplicit early check for sd_booted() would probably a nicer choice
> (though I must say I shiver at the idea that we add this to all our
> tools). And for the latter we should probably fix things so that the
> tool works fine even if cpuacct, memory and blkio (or any subset of them
> are not available), after all those controllers should be optional.
> 
> How did you start cgtop so that you ran into this problem?
> 
> Lennart
> 
Amazingly enough, cgtop works just fine if we just silently ignore the
missing ones here.


-- 
-Shawn Landden
>From f13e3be6ce9460016958f02877295fcfb2f1abf3 Mon Sep 17 00:00:00 2001
From: Shawn Landden <[email protected]>
Date: Mon, 21 May 2012 22:54:41 -0700
Subject: [PATCH] cgtop: work even if not all cgroups are available

cgtop quits on startup if all the cgroup mounts it expects are not available.
Just continue without nonexistant ones.
---
 src/cgtop/cgtop.c |   17 +++++++++++------
 1 file changed, 11 insertions(+), 6 deletions(-)

diff --git a/src/cgtop/cgtop.c b/src/cgtop/cgtop.c
index ddb5709..f988adb 100644
--- a/src/cgtop/cgtop.c
+++ b/src/cgtop/cgtop.c
@@ -341,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) {
-- 
1.7.9.5

_______________________________________________
systemd-devel mailing list
[email protected]
http://lists.freedesktop.org/mailman/listinfo/systemd-devel

Reply via email to