diff options
author | Tejun Heo <htejun@fb.com> | 2016-05-14 15:56:53 -0400 |
---|---|---|
committer | Zbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl> | 2016-05-14 15:56:53 -0400 |
commit | 99e66921c86bce77d0d3587c201c7d1b611a7d99 (patch) | |
tree | ea02e79efac1588dd58adb9d277215ddcaeafe2d | |
parent | 4b653dd2b3f07f9f8bc4b197b369b742178afd76 (diff) |
core: allow slice to be overriden if cgroups aren't realized (#3246)
unit_set_slice() fails with -EBUSY if the unit already has a slice associated
with it. This makes it impossible to override slice through dropin config or
over dbus. There's no reason to disallow slice changes as long as cgroups
aren't realized. Fix it.
Fixes #3240.
Signed-off-by: Tejun Heo <htejun@fb.com>
Reported-by: Davide Cavalca <dcavalca@fb.com>
-rw-r--r-- | src/core/unit.c | 4 |
1 files changed, 3 insertions, 1 deletions
diff --git a/src/core/unit.c b/src/core/unit.c index d8ab5781b0..dc8325515c 100644 --- a/src/core/unit.c +++ b/src/core/unit.c @@ -2400,9 +2400,11 @@ int unit_set_slice(Unit *u, Unit *slice) { if (UNIT_DEREF(u->slice) == slice) return 0; - if (UNIT_ISSET(u->slice)) + /* Disallow slice changes if @u is already bound to cgroups */ + if (UNIT_ISSET(u->slice) && u->cgroup_realized) return -EBUSY; + unit_ref_unset(&u->slice); unit_ref_set(&u->slice, slice); return 1; } |