diff options
author | Lennart Poettering <lennart@poettering.net> | 2013-09-23 21:56:05 -0500 |
---|---|---|
committer | Lennart Poettering <lennart@poettering.net> | 2013-09-25 03:38:17 +0200 |
commit | 13b84ec7df103ce388910a2b868fe1668c1e27ef (patch) | |
tree | 773d34a85343a61b3368ef5a67a156ffcf14689a /src/core | |
parent | 8bd94f7a03032ac9218e88e8e099e974627a3bcb (diff) |
cgroup: if we do a cgroup operation then do something on all supported controllers
Previously we did operations like attach, trim or migrate only on the
controllers that were enabled for a specific unit. With this changes we
will now do them for all supproted controllers, and fall back to all
possible prefix paths if the specified paths do not exist.
This fixes issues if a controller is being disabled for a unit where it
was previously enabled, and makes sure that all processes stay as "far
down" the tree as groups exist.
Diffstat (limited to 'src/core')
-rw-r--r-- | src/core/cgroup.c | 8 | ||||
-rw-r--r-- | src/core/execute.c | 4 | ||||
-rw-r--r-- | src/core/mount.c | 2 | ||||
-rw-r--r-- | src/core/scope.c | 2 | ||||
-rw-r--r-- | src/core/service.c | 2 | ||||
-rw-r--r-- | src/core/socket.c | 2 | ||||
-rw-r--r-- | src/core/swap.c | 2 |
7 files changed, 11 insertions, 11 deletions
diff --git a/src/core/cgroup.c b/src/core/cgroup.c index e66b8f4851..8bf4d896de 100644 --- a/src/core/cgroup.c +++ b/src/core/cgroup.c @@ -397,13 +397,13 @@ static int unit_create_cgroups(Unit *u, CGroupControllerMask mask) { } /* First, create our own group */ - r = cg_create_with_mask(mask, path); + r = cg_create_everywhere(u->manager->cgroup_supported, mask, path); if (r < 0) log_error("Failed to create cgroup %s: %s", path, strerror(-r)); /* Then, possibly move things over */ - if (u->cgroup_path && !streq(path, u->cgroup_path)) { - r = cg_migrate_with_mask(mask, u->cgroup_path, path); + if (u->cgroup_path) { + r = cg_migrate_everywhere(u->manager->cgroup_supported, u->cgroup_path, path); if (r < 0) log_error("Failed to migrate cgroup %s: %s", path, strerror(-r)); } @@ -537,7 +537,7 @@ void unit_destroy_cgroup(Unit *u) { if (!u->cgroup_path) return; - r = cg_trim_with_mask(u->cgroup_mask, u->cgroup_path, !unit_has_name(u, SPECIAL_ROOT_SLICE)); + r = cg_trim_everywhere(u->manager->cgroup_supported, u->cgroup_path, !unit_has_name(u, SPECIAL_ROOT_SLICE)); if (r < 0) log_debug("Failed to destroy cgroup %s: %s", u->cgroup_path, strerror(-r)); diff --git a/src/core/execute.c b/src/core/execute.c index f840642d14..0bfa41836a 100644 --- a/src/core/execute.c +++ b/src/core/execute.c @@ -1017,7 +1017,7 @@ int exec_spawn(ExecCommand *command, bool apply_chroot, bool apply_tty_stdin, bool confirm_spawn, - CGroupControllerMask cgroup_mask, + CGroupControllerMask cgroup_supported, const char *cgroup_path, const char *unit_id, int idle_pipe[4], @@ -1198,7 +1198,7 @@ int exec_spawn(ExecCommand *command, } if (cgroup_path) { - err = cg_attach_with_mask(cgroup_mask, cgroup_path, 0); + err = cg_attach_everywhere(cgroup_supported, cgroup_path, 0); if (err < 0) { r = EXIT_CGROUP; goto fail_child; diff --git a/src/core/mount.c b/src/core/mount.c index 5c18d4e463..78c5c1e6d6 100644 --- a/src/core/mount.c +++ b/src/core/mount.c @@ -888,7 +888,7 @@ static int mount_spawn(Mount *m, ExecCommand *c, pid_t *_pid) { true, true, UNIT(m)->manager->confirm_spawn, - UNIT(m)->cgroup_mask, + UNIT(m)->manager->cgroup_supported, UNIT(m)->cgroup_path, UNIT(m)->id, NULL, diff --git a/src/core/scope.c b/src/core/scope.c index b94f3ff7ba..50e5dbacb4 100644 --- a/src/core/scope.c +++ b/src/core/scope.c @@ -257,7 +257,7 @@ static int scope_start(Unit *u) { return r; } - r = cg_attach_many_with_mask(u->cgroup_mask, u->cgroup_path, s->pids); + r = cg_attach_many_everywhere(u->manager->cgroup_supported, u->cgroup_path, s->pids); if (r < 0) return r; diff --git a/src/core/service.c b/src/core/service.c index cc61b546fc..24b7bef287 100644 --- a/src/core/service.c +++ b/src/core/service.c @@ -1820,7 +1820,7 @@ static int service_spawn( apply_chroot, apply_tty_stdin, UNIT(s)->manager->confirm_spawn, - UNIT(s)->cgroup_mask, + UNIT(s)->manager->cgroup_supported, path, UNIT(s)->id, s->type == SERVICE_IDLE ? UNIT(s)->manager->idle_pipe : NULL, diff --git a/src/core/socket.c b/src/core/socket.c index 46a73e0108..190b36c3ca 100644 --- a/src/core/socket.c +++ b/src/core/socket.c @@ -1239,7 +1239,7 @@ static int socket_spawn(Socket *s, ExecCommand *c, pid_t *_pid) { true, true, UNIT(s)->manager->confirm_spawn, - UNIT(s)->cgroup_mask, + UNIT(s)->manager->cgroup_supported, UNIT(s)->cgroup_path, UNIT(s)->id, NULL, diff --git a/src/core/swap.c b/src/core/swap.c index 82bfad187e..dc6731ab30 100644 --- a/src/core/swap.c +++ b/src/core/swap.c @@ -625,7 +625,7 @@ static int swap_spawn(Swap *s, ExecCommand *c, pid_t *_pid) { true, true, UNIT(s)->manager->confirm_spawn, - UNIT(s)->cgroup_mask, + UNIT(s)->manager->cgroup_supported, UNIT(s)->cgroup_path, UNIT(s)->id, NULL, |