]> git.ipfire.org Git - pakfire.git/commitdiff
cgroups: Bring back a function that enables accounting
authorMichael Tremer <michael.tremer@ipfire.org>
Sat, 14 Dec 2024 13:31:21 +0000 (13:31 +0000)
committerMichael Tremer <michael.tremer@ipfire.org>
Sat, 14 Dec 2024 13:31:21 +0000 (13:31 +0000)
Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>
src/libpakfire/cgroup.c
src/libpakfire/include/pakfire/cgroup.h
src/libpakfire/jail.c

index e86711f893951cf661af517cbb831a127f32887b..dbf769f4540f3f05e2e33a6c2283feff0b81eb35 100644 (file)
@@ -362,29 +362,6 @@ static int pakfire_cgroup_enable_controller(struct pakfire_cgroup* cgroup, int c
        return 0;
 }
 
-/*
-       Enables all controllers that we need.
-*/
-static int pakfire_cgroup_enable_controllers(struct pakfire_cgroup* cgroup) {
-       static const int controllers[] = {
-               PAKFIRE_CGROUP_CONTROLLER_CPU,
-               PAKFIRE_CGROUP_CONTROLLER_MEMORY,
-               PAKFIRE_CGROUP_CONTROLLER_PIDS,
-               PAKFIRE_CGROUP_CONTROLLER_IO,
-               0,
-       };
-       int r;
-
-       // Enable all controllers
-       for (int* controller = controllers; *controller; controller++) {
-               r = pakfire_cgroup_enable_controller(cgroup, *controller);
-               if (r < 0)
-                       return r;
-       }
-
-       return 0;
-}
-
 /*
        Entry function to open a new cgroup.
 
@@ -438,11 +415,6 @@ static int pakfire_cgroup_open(struct pakfire_cgroup** cgroup,
        if (r < 0)
                goto ERROR;
 
-       // Enable all controllers
-       r = pakfire_cgroup_enable_controllers(c);
-       if (r < 0)
-               goto ERROR;
-
 #if 0
        // Setup the devices filter
        r = pakfire_cgroup_setup_devices(c);
@@ -561,6 +533,29 @@ int pakfire_cgroup_fd(struct pakfire_cgroup* cgroup) {
        return cgroup->fd;
 }
 
+// Accounting
+
+int pakfire_cgroup_enable_accounting(struct pakfire_cgroup* cgroup) {
+       int r;
+
+       // CPU
+       r = pakfire_cgroup_enable_controller(cgroup, PAKFIRE_CGROUP_CONTROLLER_CPU);
+       if (r < 0)
+               return r;
+
+       // Memory
+       r = pakfire_cgroup_enable_controller(cgroup, PAKFIRE_CGROUP_CONTROLLER_MEMORY);
+       if (r < 0)
+               return r;
+
+       // IO
+       r = pakfire_cgroup_enable_controller(cgroup, PAKFIRE_CGROUP_CONTROLLER_IO);
+       if (r < 0)
+               return r;
+
+       return 0;
+}
+
 // Memory
 
 int pakfire_cgroup_set_guaranteed_memory(struct pakfire_cgroup* cgroup, size_t mem) {
index 6f86fbdcac2ca0864f48cc5d64768bb07dba3cbc..443f101ea206fcf3e87dad71bf73a6bbc1b6fa16 100644 (file)
@@ -218,6 +218,9 @@ int pakfire_cgroup_destroy(struct pakfire_cgroup* cgroup);
 
 int pakfire_cgroup_fd(struct pakfire_cgroup* cgroup);
 
+// Accounting
+int pakfire_cgroup_enable_accounting(struct pakfire_cgroup* cgroup);
+
 // Memory
 int pakfire_cgroup_set_guaranteed_memory(struct pakfire_cgroup* cgroup, size_t mem);
 int pakfire_cgroup_set_memory_limit(struct pakfire_cgroup* cgroup, size_t mem);
index 1260dd779d5f7be7ea5797371257e8571916945e..1c9676668b35701dbe15b54fd837fd902e26ce6d 100644 (file)
@@ -1512,6 +1512,11 @@ static int __pakfire_jail_exec(struct pakfire_jail* jail,
                        goto ERROR;
                }
 
+               // Enable accounting to collect stats
+               r = pakfire_cgroup_enable_accounting(ctx.cgroup);
+               if (r < 0)
+                       goto ERROR;
+
                // Clone into this cgroup
                args.cgroup = pakfire_cgroup_fd(ctx.cgroup);
        }