Package: libvirt / 0.8.3-5+squeeze5

0009-Don-t-fail-lxc-domain-start-when-memory-controller-s.patch Patch series | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
From: =?UTF-8?q?Guido=20G=C3=BCnther?= <agx@sigxcpu.org>
Date: Fri, 15 Oct 2010 18:10:47 +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.

[1] http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=534964

Closes: #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 7dc51a5..6204763 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;
     }
 
     rc = virCgroupDenyAllDevices(cgroup);
diff --git a/src/lxc/lxc_driver.c b/src/lxc/lxc_driver.c
index 6fe20b1..4439a98 100644
--- a/src/lxc/lxc_driver.c
+++ b/src/lxc/lxc_driver.c
@@ -483,7 +483,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);
@@ -513,10 +513,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;
         }
     }
 
--