From: Tejun Heo Date: Sat, 14 May 2016 19:56:53 +0000 (-0400) Subject: core: allow slice to be overriden if cgroups aren't realized (#3246) X-Git-Tag: v230~51 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=99e66921c86bce77d0d3587c201c7d1b611a7d99;p=thirdparty%2Fsystemd.git 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 Reported-by: Davide Cavalca --- diff --git a/src/core/unit.c b/src/core/unit.c index d8ab5781b06..dc8325515c7 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; }