[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]

Re: [libvirt] [PATCH] Don't fail lxc domain start when memory controller support is missing



On Fri, Oct 15, 2010 at 10:15:02AM +0200, Guido Günther wrote:
> Hi,
> starting of lxc domains currently fails if memory controller support is
> disabled in the kernel. Attached patch fixes this by ignoring the error
> in case the files don't exist in the cgroup filesystem. I didn't add the
> same exceptions for the recent hard and soft limit code since if somebody
> sets this values he probably wants them enforced. O.k. to apply?
In fact I missed one hunk. Here's a better patch with some commnents.
 -- Guido
>From b0f6c1628a3654c8a49382cd5b29577fddfe3f1c Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Guido=20G=C3=BCnther?= <agx sigxcpu org>
Date: Fri, 15 Oct 2010 10:01:38 +0200
Subject: [PATCH] Don't fail lxc domain start when memory controller support is missing

Debian stock kernel has CONFIG_CGROUP_MEM_RES_CTLR disabled due to the
overhead [1]. Allow to start containers if the corresponding files in
the cgroup filesystem are missing. This fixes Debian bug #566180 [2].

[1] http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=534964
[2] http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=566180
---
 src/lxc/lxc_controller.c |    4 +++-
 src/lxc/lxc_driver.c     |   11 ++++++++---
 2 files changed, 11 insertions(+), 4 deletions(-)

diff --git a/src/lxc/lxc_controller.c b/src/lxc/lxc_controller.c
index 20616b8..2a4f113 100644
--- a/src/lxc/lxc_controller.c
+++ b/src/lxc/lxc_controller.c
@@ -107,7 +107,9 @@ static int lxcSetContainerResources(virDomainDefPtr def)
         virReportSystemError(-rc,
                              _("Unable to set memory limit for domain %s"),
                              def->name);
-        goto cleanup;
+        /* Don't fail if we can't set memory due to lack of kernel support */
+        if (rc != -ENOENT)
+            goto cleanup;
     }
 
     if(def->mem.hard_limit) {
diff --git a/src/lxc/lxc_driver.c b/src/lxc/lxc_driver.c
index df814da..8085169 100644
--- a/src/lxc/lxc_driver.c
+++ b/src/lxc/lxc_driver.c
@@ -485,7 +485,7 @@ static int lxcDomainGetInfo(virDomainPtr dom,
     lxc_driver_t *driver = dom->conn->privateData;
     virDomainObjPtr vm;
     virCgroupPtr cgroup = NULL;
-    int ret = -1;
+    int ret = -1, rc;
 
     lxcDriverLock(driver);
     vm = virDomainFindByUUID(&driver->domains, dom->uuid);
@@ -515,10 +515,15 @@ static int lxcDomainGetInfo(virDomainPtr dom,
                      "%s", _("Cannot read cputime for domain"));
             goto cleanup;
         }
-        if (virCgroupGetMemoryUsage(cgroup, &(info->memory)) < 0) {
+        if ((rc = virCgroupGetMemoryUsage(cgroup, &(info->memory))) < 0) {
             lxcError(VIR_ERR_OPERATION_FAILED,
                      "%s", _("Cannot read memory usage for domain"));
-            goto cleanup;
+            if (rc == -ENOENT) {
+                /* Don't fail if we can't read memory usage due to a lack of
+                 * kernel support */
+                info->memory = 0;
+            } else
+                goto cleanup;
         }
     }
 
-- 
1.7.1


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]