diff options
author | Lennart Poettering <lennart@poettering.net> | 2013-10-02 04:54:07 +0200 |
---|---|---|
committer | Lennart Poettering <lennart@poettering.net> | 2013-10-02 04:59:05 +0200 |
commit | 1434ae6fd49f8377b0ddbd4c675736e0d3226ea6 (patch) | |
tree | 4668e8216999e5f64dcddfad930ca46b8d55320f /src/shared/cgroup-util.c | |
parent | fbd8ebddbe43f55f76d6d6dc681b342ca2dd4376 (diff) |
cgroup: there's no point in labelling cgroupfs dirs, so let's not do thatsystemd/v208
This allows us to get rid of the dep on libsystemd-label for cgroup
management.
https://bugs.freedesktop.org/show_bug.cgi?id=69966
Diffstat (limited to 'src/shared/cgroup-util.c')
-rw-r--r-- | src/shared/cgroup-util.c | 41 |
1 files changed, 41 insertions, 0 deletions
diff --git a/src/shared/cgroup-util.c b/src/shared/cgroup-util.c index f57f2b2c42..8a4eddab7a 100644 --- a/src/shared/cgroup-util.c +++ b/src/shared/cgroup-util.c @@ -39,6 +39,7 @@ #include "unit-name.h" #include "fileio.h" #include "special.h" +#include "mkdir.h" int cg_enumerate_processes(const char *controller, const char *path, FILE **_f) { _cleanup_free_ char *fs = NULL; @@ -618,6 +619,46 @@ int cg_delete(const char *controller, const char *path) { return r == -ENOENT ? 0 : r; } +int cg_create(const char *controller, const char *path) { + _cleanup_free_ char *fs = NULL; + int r; + + r = cg_get_path_and_check(controller, path, NULL, &fs); + if (r < 0) + return r; + + r = mkdir_parents(fs, 0755); + if (r < 0) + return r; + + if (mkdir(fs, 0755) < 0) { + + if (errno == EEXIST) + return 0; + + return -errno; + } + + return 1; +} + +int cg_create_and_attach(const char *controller, const char *path, pid_t pid) { + int r, q; + + assert(pid >= 0); + + r = cg_create(controller, path); + if (r < 0) + return r; + + q = cg_attach(controller, path, pid); + if (q < 0) + return q; + + /* This does not remove the cgroup on failure */ + return r; +} + int cg_attach(const char *controller, const char *path, pid_t pid) { _cleanup_free_ char *fs = NULL; char c[DECIMAL_STR_MAX(pid_t) + 2]; |