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 <phrd...@redhat.com>
---
 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

Reply via email to