X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?p=elogind.git;a=blobdiff_plain;f=src%2Fcgroup-util.c;h=2f3fcb5981dac8a713bf5714992a285e608530bf;hp=828b30414a67a004eaf83243ea286b5daf462ac5;hb=4502d22cb8a96d9059b02861b8074e4fadf2cab2;hpb=4c633005eacdf964d22107f453ba804868f33a25 diff --git a/src/cgroup-util.c b/src/cgroup-util.c index 828b30414..2f3fcb598 100644 --- a/src/cgroup-util.c +++ b/src/cgroup-util.c @@ -25,6 +25,8 @@ #include #include #include +#include +#include #include "cgroup-util.h" #include "log.h" @@ -546,7 +548,17 @@ int cg_create(const char *controller, const char *path) { if ((r = cg_get_path(controller, path, NULL, &fs)) < 0) return r; - r = mkdir_p(fs, 0755); + r = mkdir_parents(fs, 0755); + + if (r >= 0) { + if (mkdir(fs, 0755) >= 0) + r = 1; + else if (errno == EEXIST) + r = 0; + else + r = -errno; + } + free(fs); return r; @@ -577,7 +589,7 @@ int cg_attach(const char *controller, const char *path, pid_t pid) { } int cg_create_and_attach(const char *controller, const char *path, pid_t pid) { - int r; + int r, q; assert(controller); assert(path); @@ -586,8 +598,8 @@ int cg_create_and_attach(const char *controller, const char *path, pid_t pid) { if ((r = cg_create(controller, path)) < 0) return r; - if ((r = cg_attach(controller, path, pid)) < 0) - return r; + if ((q = cg_attach(controller, path, pid)) < 0) + return q; /* This does not remove the cgroup on failure */