diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/shared/cgroup-label.c | 80 | ||||
| -rw-r--r-- | src/shared/cgroup-util.c | 41 | 
2 files changed, 41 insertions, 80 deletions
| diff --git a/src/shared/cgroup-label.c b/src/shared/cgroup-label.c deleted file mode 100644 index bae0a627d2..0000000000 --- a/src/shared/cgroup-label.c +++ /dev/null @@ -1,80 +0,0 @@ -/*-*- Mode: C; c-basic-offset: 8; indent-tabs-mode: nil -*-*/ - -/*** -  This file is part of systemd. - -  Copyright 2010 Lennart Poettering - -  systemd is free software; you can redistribute it and/or modify it -  under the terms of the GNU Lesser General Public License as published by -  the Free Software Foundation; either version 2.1 of the License, or -  (at your option) any later version. - -  systemd is distributed in the hope that it will be useful, but -  WITHOUT ANY WARRANTY; without even the implied warranty of -  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -  Lesser General Public License for more details. - -  You should have received a copy of the GNU Lesser General Public License -  along with systemd; If not, see <http://www.gnu.org/licenses/>. -***/ - -#include <errno.h> -#include <unistd.h> -#include <signal.h> -#include <string.h> -#include <stdlib.h> -#include <dirent.h> -#include <sys/stat.h> -#include <sys/types.h> -#include <ftw.h> - -#include "cgroup-util.h" -#include "log.h" -#include "set.h" -#include "macro.h" -#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) { -        _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_prefix_label("/sys/fs/cgroup", 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; -} 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]; | 
