From: Michael Tremer Date: Fri, 27 Jun 2025 10:41:38 +0000 (+0000) Subject: cgroups: Create their own types X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=652916253ef1a51d9824e0cf55d5e444d86e9ca8;p=pakfire.git cgroups: Create their own types Signed-off-by: Michael Tremer --- diff --git a/src/pakfire/build.c b/src/pakfire/build.c index a6350bbb..f0eae9c7 100644 --- a/src/pakfire/build.c +++ b/src/pakfire/build.c @@ -82,7 +82,7 @@ struct pakfire_build { struct timespec time_start; // cgroup - struct pakfire_cgroup* cgroup; + pakfire_cgroup* cgroup; // Jail struct pakfire_jail* jail; diff --git a/src/pakfire/cgroup.c b/src/pakfire/cgroup.c index 4c7280e4..9137cc38 100644 --- a/src/pakfire/cgroup.c +++ b/src/pakfire/cgroup.c @@ -63,7 +63,7 @@ struct pakfire_cgroup { int nrefs; // The parent group - struct pakfire_cgroup* parent; + pakfire_cgroup* parent; // Flags int flags; @@ -82,14 +82,14 @@ struct pakfire_cgroup { int devicesfd; }; -static const char* pakfire_cgroup_path(struct pakfire_cgroup* cgroup) { +static const char* pakfire_cgroup_path(pakfire_cgroup* cgroup) { if (!*cgroup->path) return "(root)"; return cgroup->path; } -static int pakfire_cgroup_setup_devices(struct pakfire_cgroup* cgroup) { +static int pakfire_cgroup_setup_devices(pakfire_cgroup* cgroup) { static char bpf_log_buffer[BPF_LOG_BUF_SIZE]; LIBBPF_OPTS(bpf_prog_load_opts, opts, @@ -126,7 +126,7 @@ static int pakfire_cgroup_setup_devices(struct pakfire_cgroup* cgroup) { return 0; } -static int pakfire_cgroup_open_root(struct pakfire_cgroup* cgroup) { +static int pakfire_cgroup_open_root(pakfire_cgroup* cgroup) { const char* path = "/sys/fs/cgroup"; int fd; @@ -147,7 +147,7 @@ static int pakfire_cgroup_open_root(struct pakfire_cgroup* cgroup) { This function returns a negative value on error. */ -static int __pakfire_cgroup_open(struct pakfire_cgroup* cgroup) { +static int __pakfire_cgroup_open(pakfire_cgroup* cgroup) { int fd = -EBADF; int r; @@ -178,7 +178,7 @@ static int __pakfire_cgroup_open(struct pakfire_cgroup* cgroup) { return fd; } -static ssize_t pakfire_cgroup_read(struct pakfire_cgroup* cgroup, const char* path, +static ssize_t pakfire_cgroup_read(pakfire_cgroup* cgroup, const char* path, char* buffer, size_t length) { ssize_t bytes_read = -1; @@ -213,10 +213,10 @@ ERROR: return bytes_read; } -static int pakfire_cgroup_write(struct pakfire_cgroup* cgroup, +static int pakfire_cgroup_write(pakfire_cgroup* cgroup, const char* path, const char* format, ...) __attribute__((format(printf, 3, 4))); -static int pakfire_cgroup_write(struct pakfire_cgroup* cgroup, +static int pakfire_cgroup_write(pakfire_cgroup* cgroup, const char* path, const char* format, ...) { ssize_t bytes_written = 0; va_list args; @@ -293,7 +293,7 @@ static const char* pakfire_cgroup_controller_name(int controller) { return NULL; } -static int pakfire_cgroup_read_controllers(struct pakfire_cgroup* cgroup) { +static int pakfire_cgroup_read_controllers(pakfire_cgroup* cgroup) { char buffer[4096]; char* p = NULL; int r; @@ -319,7 +319,7 @@ static int pakfire_cgroup_read_controllers(struct pakfire_cgroup* cgroup) { /* Enables a cgroup controller. */ -static int pakfire_cgroup_enable_controller(struct pakfire_cgroup* cgroup, int controller) { +static int pakfire_cgroup_enable_controller(pakfire_cgroup* cgroup, int controller) { int r; // Do nothing if the controller is already enabled @@ -357,9 +357,9 @@ static int pakfire_cgroup_enable_controller(struct pakfire_cgroup* cgroup, int c If the cgroup doesn't exist, it will be created including any parent cgroups. */ -static int pakfire_cgroup_open(struct pakfire_cgroup** cgroup, - pakfire_ctx* ctx, struct pakfire_cgroup* parent, const char* name, int flags) { - struct pakfire_cgroup* c = NULL; +static int pakfire_cgroup_open(pakfire_cgroup** cgroup, + pakfire_ctx* ctx, pakfire_cgroup* parent, const char* name, int flags) { + pakfire_cgroup* c = NULL; int r; // Allocate the cgroup struct @@ -426,9 +426,9 @@ ERROR: return r; } -static int pakfire_cgroup_create_recursive(struct pakfire_cgroup** cgroup, - pakfire_ctx* ctx, struct pakfire_cgroup* parent, const char* name, int flags) { - struct pakfire_cgroup* child = NULL; +static int pakfire_cgroup_create_recursive(pakfire_cgroup** cgroup, + pakfire_ctx* ctx, pakfire_cgroup* parent, const char* name, int flags) { + pakfire_cgroup* child = NULL; char buffer[NAME_MAX]; char* p = NULL; int r; @@ -468,9 +468,9 @@ ERROR: return r; } -int pakfire_cgroup_create(struct pakfire_cgroup** cgroup, - pakfire_ctx* ctx, struct pakfire_cgroup* parent, const char* name, int flags) { - struct pakfire_cgroup* root = NULL; +int pakfire_cgroup_create(pakfire_cgroup** cgroup, + pakfire_ctx* ctx, pakfire_cgroup* parent, const char* name, int flags) { + pakfire_cgroup* root = NULL; int r; // Name must be set @@ -496,7 +496,7 @@ int pakfire_cgroup_create(struct pakfire_cgroup** cgroup, return r; } -static void pakfire_cgroup_free(struct pakfire_cgroup* cgroup) { +static void pakfire_cgroup_free(pakfire_cgroup* cgroup) { if (cgroup->fd >= 0) close(cgroup->fd); if (cgroup->devicesfd >= 0) @@ -508,13 +508,13 @@ static void pakfire_cgroup_free(struct pakfire_cgroup* cgroup) { free(cgroup); } -struct pakfire_cgroup* pakfire_cgroup_ref(struct pakfire_cgroup* cgroup) { +pakfire_cgroup* pakfire_cgroup_ref(pakfire_cgroup* cgroup) { ++cgroup->nrefs; return cgroup; } -struct pakfire_cgroup* pakfire_cgroup_unref(struct pakfire_cgroup* cgroup) { +pakfire_cgroup* pakfire_cgroup_unref(pakfire_cgroup* cgroup) { if (--cgroup->nrefs > 0) return cgroup; @@ -522,20 +522,20 @@ struct pakfire_cgroup* pakfire_cgroup_unref(struct pakfire_cgroup* cgroup) { return NULL; } -int pakfire_cgroup_is_valid(struct pakfire_cgroup* self) { +int pakfire_cgroup_is_valid(pakfire_cgroup* self) { if (self->controllers) return 1; return 0; } -int pakfire_cgroup_child(struct pakfire_cgroup** child, - struct pakfire_cgroup* cgroup, const char* path, int flags) { +int pakfire_cgroup_child(pakfire_cgroup** child, + pakfire_cgroup* cgroup, const char* path, int flags) { return pakfire_cgroup_open(child, cgroup->ctx, cgroup, path, flags); } -static int pakfire_cgroup_destroy_children(struct pakfire_cgroup* cgroup, int flags) { - struct pakfire_cgroup* child = NULL; +static int pakfire_cgroup_destroy_children(pakfire_cgroup* cgroup, int flags) { + pakfire_cgroup* child = NULL; struct dirent* entry = NULL; DIR* dir = NULL; int r = 0; @@ -595,7 +595,7 @@ ERROR: /* Immediately destroys this cgroup */ -int pakfire_cgroup_destroy(struct pakfire_cgroup* cgroup, int flags) { +int pakfire_cgroup_destroy(pakfire_cgroup* cgroup, int flags) { int r; // Cannot call this for the root group @@ -627,14 +627,14 @@ int pakfire_cgroup_destroy(struct pakfire_cgroup* cgroup, int flags) { return r; } -int pakfire_cgroup_fd(struct pakfire_cgroup* cgroup) { +int pakfire_cgroup_fd(pakfire_cgroup* cgroup) { return cgroup->fd; } /* Immediately kills all processes in this cgroup */ -int pakfire_cgroup_killall(struct pakfire_cgroup* cgroup) { +int pakfire_cgroup_killall(pakfire_cgroup* cgroup) { DEBUG(cgroup->ctx, "Killing all processes in %s\n", pakfire_cgroup_path(cgroup)); @@ -643,7 +643,7 @@ int pakfire_cgroup_killall(struct pakfire_cgroup* cgroup) { // Accounting -int pakfire_cgroup_enable_accounting(struct pakfire_cgroup* cgroup) { +int pakfire_cgroup_enable_accounting(pakfire_cgroup* cgroup) { int r; // CPU @@ -666,7 +666,7 @@ 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_guaranteed_memory(pakfire_cgroup* cgroup, size_t mem) { int r; // Enable the memory controller @@ -686,7 +686,7 @@ int pakfire_cgroup_set_guaranteed_memory(struct pakfire_cgroup* cgroup, size_t m return r; } -int pakfire_cgroup_set_memory_limit(struct pakfire_cgroup* cgroup, size_t mem) { +int pakfire_cgroup_set_memory_limit(pakfire_cgroup* cgroup, size_t mem) { int r; // Enable the memory controller @@ -708,7 +708,7 @@ int pakfire_cgroup_set_memory_limit(struct pakfire_cgroup* cgroup, size_t mem) { // PIDs -int pakfire_cgroup_set_pid_limit(struct pakfire_cgroup* cgroup, size_t limit) { +int pakfire_cgroup_set_pid_limit(pakfire_cgroup* cgroup, size_t limit) { int r; // Enable the PID controller @@ -730,8 +730,8 @@ int pakfire_cgroup_set_pid_limit(struct pakfire_cgroup* cgroup, size_t limit) { // Stats -static int __pakfire_cgroup_read_stats_line(struct pakfire_cgroup* cgroup, - int (*callback)(struct pakfire_cgroup* cgroup, const char* key, unsigned long val, void* data), +static int __pakfire_cgroup_read_stats_line(pakfire_cgroup* cgroup, + int (*callback)(pakfire_cgroup* cgroup, const char* key, unsigned long val, void* data), void* data, char* line) { char* p = NULL; int r; @@ -778,8 +778,8 @@ static int __pakfire_cgroup_read_stats_line(struct pakfire_cgroup* cgroup, return callback(cgroup, key, val, data); } -static int __pakfire_cgroup_read_stats(struct pakfire_cgroup* cgroup, const char* path, - int (*callback)(struct pakfire_cgroup* cgroup, const char* key, unsigned long val, void* data), +static int __pakfire_cgroup_read_stats(pakfire_cgroup* cgroup, const char* path, + int (*callback)(pakfire_cgroup* cgroup, const char* key, unsigned long val, void* data), void* data) { char buffer[BUFFER_SIZE]; char* p = NULL; @@ -807,16 +807,16 @@ ERROR: return r; } -struct pakfire_cgroup_stat_entry { +typedef struct pakfire_cgroup_stat_entry { const char* key; unsigned long* val; -}; +} pakfire_cgroup_stat_entry; -static int __pakfire_cgroup_parse_cpu_stats(struct pakfire_cgroup* cgroup, +static int __pakfire_cgroup_parse_cpu_stats(pakfire_cgroup* cgroup, const char* key, unsigned long val, void* data) { - struct pakfire_cgroup_cpu_stats* stats = (struct pakfire_cgroup_cpu_stats*)data; + struct pakfire_cgroup_cpu_stats* stats = data; - const struct pakfire_cgroup_stat_entry entries[] = { + const pakfire_cgroup_stat_entry entries[] = { { "system_usec", &stats->system_usec }, { "usage_usec", &stats->usage_usec }, { "user_usec", &stats->user_usec }, @@ -828,7 +828,7 @@ static int __pakfire_cgroup_parse_cpu_stats(struct pakfire_cgroup* cgroup, { NULL, NULL }, }; // Find and store value - for (const struct pakfire_cgroup_stat_entry* entry = entries; entry->key; entry++) { + for (const pakfire_cgroup_stat_entry* entry = entries; entry->key; entry++) { if (strcmp(entry->key, key) == 0) { *entry->val = val; return 0; @@ -840,11 +840,11 @@ static int __pakfire_cgroup_parse_cpu_stats(struct pakfire_cgroup* cgroup, return 0; } -static int __pakfire_cgroup_parse_memory_stats(struct pakfire_cgroup* cgroup, +static int __pakfire_cgroup_parse_memory_stats(pakfire_cgroup* cgroup, const char* key, unsigned long val, void* data) { - struct pakfire_cgroup_memory_stats* stats = (struct pakfire_cgroup_memory_stats*)data; + struct pakfire_cgroup_memory_stats* stats = data; - const struct pakfire_cgroup_stat_entry entries[] = { + const pakfire_cgroup_stat_entry entries[] = { { "anon", &stats->anon }, { "file", &stats->file }, { "kernel", &stats->kernel }, @@ -898,7 +898,7 @@ static int __pakfire_cgroup_parse_memory_stats(struct pakfire_cgroup* cgroup, }; // Find and store value - for (const struct pakfire_cgroup_stat_entry* entry = entries; entry->key; entry++) { + for (const pakfire_cgroup_stat_entry* entry = entries; entry->key; entry++) { if (strcmp(entry->key, key) == 0) { *entry->val = val; return 0; @@ -911,8 +911,8 @@ static int __pakfire_cgroup_parse_memory_stats(struct pakfire_cgroup* cgroup, return 0; } -int pakfire_cgroup_stat(struct pakfire_cgroup* cgroup, - struct pakfire_cgroup_stats* stats) { +int pakfire_cgroup_stat(pakfire_cgroup* cgroup, + pakfire_cgroup_stats* stats) { int r; // Check input @@ -941,8 +941,8 @@ ERROR: return r; } -int pakfire_cgroup_stat_dump(struct pakfire_cgroup* cgroup, - const struct pakfire_cgroup_stats* stats) { +int pakfire_cgroup_stat_dump(pakfire_cgroup* cgroup, + const pakfire_cgroup_stats* stats) { // Check input if (!stats) return -EINVAL; diff --git a/src/pakfire/cgroup.h b/src/pakfire/cgroup.h index 0cfd4789..089da68a 100644 --- a/src/pakfire/cgroup.h +++ b/src/pakfire/cgroup.h @@ -30,9 +30,9 @@ enum pakfire_cgroup_controllers { PAKFIRE_CGROUP_CONTROLLER_IO = (1 << 3), }; -struct pakfire_cgroup; +typedef struct pakfire_cgroup pakfire_cgroup; -struct pakfire_cgroup_stats { +typedef struct pakfire_cgroup_stats { // CPU struct pakfire_cgroup_cpu_stats { unsigned long system_usec; @@ -198,44 +198,44 @@ struct pakfire_cgroup_stats { // collapsing an existing range of pages. unsigned long thp_collapse_alloc; } memory; -}; +} pakfire_cgroup_stats; -int pakfire_cgroup_create(struct pakfire_cgroup** cgroup, - pakfire_ctx* ctx, struct pakfire_cgroup* parent, const char* name, int flags); +int pakfire_cgroup_create(pakfire_cgroup** cgroup, + pakfire_ctx* ctx, pakfire_cgroup* parent, const char* name, int flags); -struct pakfire_cgroup* pakfire_cgroup_ref(struct pakfire_cgroup* cgroup); -struct pakfire_cgroup* pakfire_cgroup_unref(struct pakfire_cgroup* cgroup); +pakfire_cgroup* pakfire_cgroup_ref(pakfire_cgroup* cgroup); +pakfire_cgroup* pakfire_cgroup_unref(pakfire_cgroup* cgroup); -int pakfire_cgroup_is_valid(struct pakfire_cgroup* self); +int pakfire_cgroup_is_valid(pakfire_cgroup* self); -int pakfire_cgroup_child(struct pakfire_cgroup** child, - struct pakfire_cgroup* cgroup, const char* path, int flags); +int pakfire_cgroup_child(pakfire_cgroup** child, + pakfire_cgroup* cgroup, const char* path, int flags); enum pakfire_cgroup_destroy_flags { PAKFIRE_CGROUP_DESTROY_RECURSIVE = (1 << 0), }; -int pakfire_cgroup_destroy(struct pakfire_cgroup* cgroup, int flags); +int pakfire_cgroup_destroy(pakfire_cgroup* cgroup, int flags); -int pakfire_cgroup_fd(struct pakfire_cgroup* cgroup); +int pakfire_cgroup_fd(pakfire_cgroup* cgroup); // Killall -int pakfire_cgroup_killall(struct pakfire_cgroup* cgroup); +int pakfire_cgroup_killall(pakfire_cgroup* cgroup); // Accounting -int pakfire_cgroup_enable_accounting(struct pakfire_cgroup* cgroup); +int pakfire_cgroup_enable_accounting(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); +int pakfire_cgroup_set_guaranteed_memory(pakfire_cgroup* cgroup, size_t mem); +int pakfire_cgroup_set_memory_limit(pakfire_cgroup* cgroup, size_t mem); // PIDs -int pakfire_cgroup_set_pid_limit(struct pakfire_cgroup* cgroup, size_t limit); +int pakfire_cgroup_set_pid_limit(pakfire_cgroup* cgroup, size_t limit); // Stats -int pakfire_cgroup_stat(struct pakfire_cgroup* cgroup, - struct pakfire_cgroup_stats* stats); -int pakfire_cgroup_stat_dump(struct pakfire_cgroup* cgroup, - const struct pakfire_cgroup_stats* stats); +int pakfire_cgroup_stat(pakfire_cgroup* cgroup, + pakfire_cgroup_stats* stats); +int pakfire_cgroup_stat_dump(pakfire_cgroup* cgroup, + const pakfire_cgroup_stats* stats); #endif /* PAKFIRE_CGROUP_H */ diff --git a/src/pakfire/daemon.c b/src/pakfire/daemon.c index 95090343..dce90b73 100644 --- a/src/pakfire/daemon.c +++ b/src/pakfire/daemon.c @@ -59,7 +59,7 @@ struct pakfire_daemon { int inhibitfd; // cgroup - struct pakfire_cgroup* cgroup; + pakfire_cgroup* cgroup; }; static int pakfire_daemon_terminate(sd_event_source* source, diff --git a/src/pakfire/jail.c b/src/pakfire/jail.c index 87b612d0..d28c037e 100644 --- a/src/pakfire/jail.c +++ b/src/pakfire/jail.c @@ -105,7 +105,7 @@ struct pakfire_jail { uint64_t timeout; // CGroup - struct pakfire_cgroup* cgroup; + pakfire_cgroup* cgroup; // Environment struct pakfire_env* env; @@ -160,8 +160,8 @@ struct pakfire_jail_exec { // Timeout sd_event_source* timeout; - struct pakfire_cgroup* cgroup; - struct pakfire_cgroup_stats cgroup_stats; + pakfire_cgroup* cgroup; + pakfire_cgroup_stats cgroup_stats; // Callbacks struct pakfire_jail_exec_callbacks { @@ -298,7 +298,7 @@ int pakfire_jail_nice(struct pakfire_jail* jail, int nice) { return 0; } -int pakfire_jail_set_cgroup(struct pakfire_jail* jail, struct pakfire_cgroup* cgroup) { +int pakfire_jail_set_cgroup(struct pakfire_jail* jail, pakfire_cgroup* cgroup) { // Free any previous cgroup if (jail->cgroup) { pakfire_cgroup_unref(jail->cgroup); diff --git a/src/pakfire/jail.h b/src/pakfire/jail.h index e86a6350..7255684f 100644 --- a/src/pakfire/jail.h +++ b/src/pakfire/jail.h @@ -74,7 +74,7 @@ int pakfire_jail_exec_capture_output(struct pakfire_jail* jail, const char* argv[], struct pakfire_env* env, int flags, char** output, size_t* length); // Resource limits -int pakfire_jail_set_cgroup(struct pakfire_jail* jail, struct pakfire_cgroup* cgroup); +int pakfire_jail_set_cgroup(struct pakfire_jail* jail, pakfire_cgroup* cgroup); int pakfire_jail_communicate( struct pakfire_jail* jail, const char* argv[], struct pakfire_env* env, int flags, diff --git a/tests/libpakfire/cgroup.c b/tests/libpakfire/cgroup.c index 15a97a3c..80b786f6 100644 --- a/tests/libpakfire/cgroup.c +++ b/tests/libpakfire/cgroup.c @@ -26,8 +26,8 @@ #include "../testsuite.h" static int test_create_and_destroy(const struct test* t) { - struct pakfire_cgroup* cgroup = NULL; - struct pakfire_cgroup* child = NULL; + pakfire_cgroup* cgroup = NULL; + pakfire_cgroup* child = NULL; int r = EXIT_FAILURE; // Open a new cgroup @@ -52,7 +52,7 @@ FAIL: } static int test_recursive(const struct test* t) { - struct pakfire_cgroup* cgroup = NULL; + pakfire_cgroup* cgroup = NULL; int r = EXIT_FAILURE; // Try to create some invalid cgroups @@ -76,8 +76,8 @@ FAIL: } static int test_child(const struct test* t) { - struct pakfire_cgroup* cgroup = NULL; - struct pakfire_cgroup* child = NULL; + pakfire_cgroup* cgroup = NULL; + pakfire_cgroup* child = NULL; int r = EXIT_FAILURE; // Open a new cgroup @@ -103,11 +103,11 @@ FAIL: } static int test_stats(const struct test* t) { - struct pakfire_cgroup* cgroup = NULL; + pakfire_cgroup* cgroup = NULL; struct pakfire_jail* jail = NULL; int r = EXIT_FAILURE; - struct pakfire_cgroup_stats stats; + pakfire_cgroup_stats stats; const char* argv[] = { "/command", "sleep", "1", NULL, diff --git a/tests/libpakfire/jail.c b/tests/libpakfire/jail.c index 7b878b82..a4e6989f 100644 --- a/tests/libpakfire/jail.c +++ b/tests/libpakfire/jail.c @@ -134,7 +134,7 @@ FAIL: } static int test_launch_into_cgroup(const struct test* t) { - struct pakfire_cgroup* cgroup = NULL; + pakfire_cgroup* cgroup = NULL; struct pakfire_jail* jail = NULL; int r = EXIT_FAILURE; @@ -200,7 +200,7 @@ FAIL: } static int test_memory_limit(const struct test* t) { - struct pakfire_cgroup* cgroup = NULL; + pakfire_cgroup* cgroup = NULL; struct pakfire_jail* jail = NULL; int r = EXIT_FAILURE; @@ -238,7 +238,7 @@ FAIL: } static int test_pid_limit(const struct test* t) { - struct pakfire_cgroup* cgroup = NULL; + pakfire_cgroup* cgroup = NULL; struct pakfire_jail* jail = NULL; int r = EXIT_FAILURE;