From: Pavel Hrdina Date: Mon, 2 Nov 2020 21:50:58 +0000 (+0100) Subject: vircgroup: refactor virCgroupNewPartition X-Git-Tag: v6.10.0-rc1~354 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=6f0aa96f4157d7302d7050ddcd7c40256b8ee1cc;p=thirdparty%2Flibvirt.git vircgroup: refactor virCgroupNewPartition 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 Reviewed-by: Michal Privoznik --- 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) {