chiark / gitweb /
Cleaned up more unneeded functions and types in:
[elogind.git] / src / core / cgroup.c
index b517415ced6c7802d27e74d9ed99b3c1e3291e06..1733521cd9aa01600aef820129a765e9f4d8fe1a 100644 (file)
@@ -30,6 +30,8 @@
 
 #define CGROUP_CPU_QUOTA_PERIOD_USEC ((usec_t) 100 * USEC_PER_MSEC)
 
+// UNNEEDED by elogind
+#if 0
 void cgroup_context_init(CGroupContext *c) {
         assert(c);
 
@@ -85,8 +87,6 @@ void cgroup_context_done(CGroupContext *c) {
                 cgroup_context_free_device_allow(c, c->device_allow);
 }
 
-/// UNNEEDED by elogind
-#if 0
 void cgroup_context_dump(CGroupContext *c, FILE* f, const char *prefix) {
         CGroupBlockIODeviceBandwidth *b;
         CGroupBlockIODeviceWeight *w;
@@ -469,7 +469,6 @@ void cgroup_context_apply(CGroupContext *c, CGroupMask mask, const char *path, M
                 }
         }
 }
-#endif // 0
 
 CGroupMask cgroup_context_get_mask(CGroupContext *c) {
         CGroupMask mask = 0;
@@ -500,8 +499,6 @@ CGroupMask cgroup_context_get_mask(CGroupContext *c) {
         return mask;
 }
 
-/// UNNEEDED by elogind
-#if 0
 CGroupMask unit_get_own_mask(Unit *u) {
         CGroupContext *c;
 
@@ -1232,7 +1229,6 @@ int manager_setup_cgroup(Manager *m) {
         r = cg_pid_get_path(ELOGIND_CGROUP_CONTROLLER, 0, &m->cgroup_root);
         if (r < 0)
                 return log_error_errno(r, "Cannot determine cgroup we are running in: %m");
-
 /// elogind does not support systemd scopes and slices
 #if 0
         /* Chop off the init scope, if we are already located in it */
@@ -1256,6 +1252,8 @@ int manager_setup_cgroup(Manager *m) {
          * it everywhere. */
         while ((e = endswith(m->cgroup_root, "/")))
                 *e = 0;
+        log_debug_elogind("Cgroup Controller \"%s\" -> root \"%s\"",
+                          ELOGIND_CGROUP_CONTROLLER, m->cgroup_root);
 
         /* 2. Show data */
         r = cg_get_path(ELOGIND_CGROUP_CONTROLLER, m->cgroup_root, NULL, &path);
@@ -1322,17 +1320,25 @@ int manager_setup_cgroup(Manager *m) {
                 scope_path = strjoina(m->cgroup_root, "/" SPECIAL_INIT_SCOPE);
                 r = cg_create_and_attach(ELOGIND_CGROUP_CONTROLLER, scope_path, 0);
 #else
-                scope_path = strjoina(m->cgroup_root, "/elogind");
+                if (streq(m->cgroup_root, "/elogind"))
+                        // root already is our cgroup
+                        scope_path = strjoina(m->cgroup_root);
+                else
+                        // we have to create our own group
+                        scope_path = strjoina(m->cgroup_root, "/elogind");
                 r = cg_create_and_attach(ELOGIND_CGROUP_CONTROLLER, scope_path, 0);
 #endif // 0
                 if (r < 0)
                         return log_error_errno(r, "Failed to create %s control group: %m", scope_path);
+                log_debug_elogind("Created control group \"%s\"", scope_path);
 
                 /* also, move all other userspace processes remaining
                  * in the root cgroup into that scope. */
-                r = cg_migrate(ELOGIND_CGROUP_CONTROLLER, m->cgroup_root, ELOGIND_CGROUP_CONTROLLER, scope_path, false);
-                if (r < 0)
-                        log_warning_errno(r, "Couldn't move remaining userspace processes, ignoring: %m");
+                if (!streq(m->cgroup_root, scope_path)) {
+                        r = cg_migrate(ELOGIND_CGROUP_CONTROLLER, m->cgroup_root, ELOGIND_CGROUP_CONTROLLER, scope_path, false);
+                        if (r < 0)
+                                log_warning_errno(r, "Couldn't move remaining userspace processes, ignoring: %m");
+                }
 
                 /* 5. And pin it, so that it cannot be unmounted */
                 safe_close(m->pin_cgroupfs_fd);
@@ -1554,7 +1560,6 @@ bool unit_cgroup_delegate(Unit *u) {
 
         return c->delegate;
 }
-#endif // 0
 
 static const char* const cgroup_device_policy_table[_CGROUP_DEVICE_POLICY_MAX] = {
         [CGROUP_AUTO] = "auto",
@@ -1563,3 +1568,4 @@ static const char* const cgroup_device_policy_table[_CGROUP_DEVICE_POLICY_MAX] =
 };
 
 DEFINE_STRING_TABLE_LOOKUP(cgroup_device_policy, CGroupDevicePolicy);
+#endif // 0