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>
This commit is contained in:
committed by
Zbigniew Jędrzejewski-Szmek
parent
4b653dd2b3
commit
99e66921c8
+3
-1
@@ -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;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user