The old code passed an absolute path to virCgroupNewFromParent() which is not necessary. The code can take the current placement of parent cgroup and append a relative path. Signed-off-by: Pavel Hrdina <phrdina@xxxxxxxxxx> --- src/util/vircgroup.c | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/src/util/vircgroup.c b/src/util/vircgroup.c index 6caeb2d7f4..e0fe1dbf3e 100644 --- a/src/util/vircgroup.c +++ b/src/util/vircgroup.c @@ -896,6 +896,7 @@ virCgroupNewPartition(const char *path, g_autofree char *newPath = NULL; g_autoptr(virCgroup) parent = NULL; g_autoptr(virCgroup) newGroup = NULL; + char *partition = NULL; VIR_DEBUG("path=%s create=%d controllers=%x", path, create, controllers); @@ -914,17 +915,26 @@ virCgroupNewPartition(const char *path, if (STRNEQ(newPath, "/")) { char *tmp; - g_autofree char *parentPath = g_strdup(newPath); + const char *parentPath; - tmp = strrchr(parentPath, '/'); - tmp++; + tmp = strrchr(newPath, '/'); *tmp = '\0'; + if (tmp == newPath) { + parentPath = "/"; + } else { + parentPath = newPath; + } + if (virCgroupNew(parentPath, controllers, &parent) < 0) return -1; + + partition = tmp + 1; + } else { + partition = newPath; } - if (virCgroupNewFromParent(parent, newPath, controllers, &newGroup) < 0) + if (virCgroupNewFromParent(parent, partition, controllers, &newGroup) < 0) return -1; if (parent) { -- 2.26.2