[libvirt] [PATCH 11/13] Convert LXC driver to use virCgroupNewMachine

Daniel P. Berrange berrange at redhat.com
Tue Jul 23 15:21:16 UTC 2013


From: "Daniel P. Berrange" <berrange at redhat.com>

Convert the LXC driver code to use the new atomic API
for setup of cgroups

Signed-off-by: Daniel P. Berrange <berrange at redhat.com>
---
 src/lxc/lxc_cgroup.c     | 53 +++++++++++++++---------------------------------
 src/lxc/lxc_controller.c |  2 +-
 2 files changed, 17 insertions(+), 38 deletions(-)

diff --git a/src/lxc/lxc_cgroup.c b/src/lxc/lxc_cgroup.c
index c230c25..af91b04 100644
--- a/src/lxc/lxc_cgroup.c
+++ b/src/lxc/lxc_cgroup.c
@@ -431,7 +431,6 @@ cleanup:
 
 virCgroupPtr virLXCCgroupCreate(virDomainDefPtr def)
 {
-    virCgroupPtr parent = NULL;
     virCgroupPtr cgroup = NULL;
 
     if (!def->resource) {
@@ -454,46 +453,26 @@ virCgroupPtr virLXCCgroupCreate(virDomainDefPtr def)
                        def->resource->partition);
         goto cleanup;
     }
-    /* We only auto-create the default partition. In other
-     * cases we expec the sysadmin/app to have done so */
-    if (virCgroupNewPartition(def->resource->partition,
-                              STREQ(def->resource->partition, "/machine"),
-                              -1,
-                              &parent) < 0)
-        goto cleanup;
 
-    if (virCgroupNewDomainPartition(parent,
-                                    "lxc",
-                                    def->name,
-                                    true,
-                                    &cgroup) < 0)
+    /*
+     * XXX
+     * We should pass the PID of the LXC init process
+     * not ourselves, but this requires some more
+     * refactoring. We should also pass the root dir
+     */
+    if (virCgroupNewMachine(def->name,
+                            "lxc",
+                            true,
+                            def->uuid,
+                            NULL,
+                            getpid(),
+                            true,
+                            def->resource->partition,
+                            -1,
+                            &cgroup) < 0)
         goto cleanup;
 
 cleanup:
-    virCgroupFree(&parent);
-    return cgroup;
-}
-
-
-virCgroupPtr virLXCCgroupJoin(virDomainDefPtr def)
-{
-    virCgroupPtr cgroup = NULL;
-    int ret = -1;
-
-    if (!(cgroup = virLXCCgroupCreate(def)))
-        return NULL;
-
-    if (virCgroupAddTask(cgroup, getpid()) < 0)
-        goto cleanup;
-
-    ret = 0;
-
-cleanup:
-    if (ret < 0) {
-        virCgroupFree(&cgroup);
-        return NULL;
-    }
-
     return cgroup;
 }
 
diff --git a/src/lxc/lxc_controller.c b/src/lxc/lxc_controller.c
index bbec344..124ab19 100644
--- a/src/lxc/lxc_controller.c
+++ b/src/lxc/lxc_controller.c
@@ -2388,7 +2388,7 @@ int main(int argc, char *argv[])
     if (virLXCControllerValidateConsoles(ctrl) < 0)
         goto cleanup;
 
-    if (!(ctrl->cgroup = virLXCCgroupJoin(ctrl->def)))
+    if (!(ctrl->cgroup = virLXCCgroupCreate(ctrl->def)))
         goto cleanup;
 
     if (virLXCControllerSetupServer(ctrl) < 0)
-- 
1.8.1.4




More information about the libvir-list mailing list