int nrefs;
// The parent group
- struct pakfire_cgroup* parent;
+ pakfire_cgroup* parent;
// Flags
int flags;
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,
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;
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;
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;
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;
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;
/*
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
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
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;
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
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)
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;
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;
/*
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
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));
// Accounting
-int pakfire_cgroup_enable_accounting(struct pakfire_cgroup* cgroup) {
+int pakfire_cgroup_enable_accounting(pakfire_cgroup* cgroup) {
int r;
// CPU
// 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
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
// 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
// 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;
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;
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 },
{ 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;
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 },
};
// 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;
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
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;
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;
// 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 */