X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=blobdiff_plain;f=src%2Fshared%2Fcgroup-label.c;h=bae0a627d24293cf785446f197632cd7a8c43b6a;hb=8b179a830a789746cce0be6671e2de235e3b0ea9;hp=f132d71e214dd774e5ef57d13284063ff637b2f5;hpb=5430f7f2bc7330f3088b894166bf3524a067e3d8;p=elogind.git diff --git a/src/shared/cgroup-label.c b/src/shared/cgroup-label.c index f132d71e2..bae0a627d 100644 --- a/src/shared/cgroup-label.c +++ b/src/shared/cgroup-label.c @@ -36,46 +36,45 @@ #include "util.h" #include "mkdir.h" +/* This is split out since it needs label calls, either directly or + * indirectly. */ + int cg_create(const char *controller, const char *path) { - char *fs; + _cleanup_free_ char *fs = NULL; int r; - assert(controller); - assert(path); + r = cg_get_path_and_check(controller, path, NULL, &fs); + if (r < 0) + return r; - if ((r = cg_get_path(controller, path, NULL, &fs)) < 0) + r = mkdir_parents_prefix_label("/sys/fs/cgroup", fs, 0755); + if (r < 0) return r; - r = mkdir_parents(fs, 0755); + if (mkdir(fs, 0755) < 0) { - if (r >= 0) { - if (mkdir(fs, 0755) >= 0) - r = 1; - else if (errno == EEXIST) - r = 0; - else - r = -errno; - } + if (errno == EEXIST) + return 0; - free(fs); + return -errno; + } - return r; + return 1; } int cg_create_and_attach(const char *controller, const char *path, pid_t pid) { int r, q; - assert(controller); - assert(path); assert(pid >= 0); - if ((r = cg_create(controller, path)) < 0) + r = cg_create(controller, path); + if (r < 0) return r; - if ((q = cg_attach(controller, path, pid)) < 0) + q = cg_attach(controller, path, pid); + if (q < 0) return q; /* This does not remove the cgroup on failure */ - return r; }