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

[libvirt] [PATCH] Don't return an error if fail to create blkio controller



This patch enables cgroup controllers as much as possible by skipping
the creation of blkio controller when running with old kenels that
doesn't support multi-level directory for blkio controller.

Signed-off-by: Hu Tao <hutao cn fujitsu com>
---
 src/util/cgroup.c |   28 +++++++++++++++++++++++-----
 1 files changed, 23 insertions(+), 5 deletions(-)

diff --git a/src/util/cgroup.c b/src/util/cgroup.c
index c5b8cdd..3fad480 100644
--- a/src/util/cgroup.c
+++ b/src/util/cgroup.c
@@ -527,9 +527,19 @@ static int virCgroupMakeGroup(virCgroupPtr parent, virCgroupPtr group,
         if (access(path, F_OK) != 0) {
             if (!create ||
                 mkdir(path, 0755) < 0) {
-                rc = -errno;
-                VIR_FREE(path);
-                break;
+                /* With a kernel that doesn't support multi-level directory
+                 * for blkio controller, libvirt will fail and disable all
+                 * other controllers even though they are available. So skip
+                 * blkio here if mkdir fails. */
+                if (i == VIR_CGROUP_CONTROLLER_BLKIO) {
+                    rc = 0;
+                    VIR_FREE(path);
+                    continue;
+                } else {
+                    rc = -errno;
+                    VIR_FREE(path);
+                    break;
+                }
             }
             if (group->controllers[VIR_CGROUP_CONTROLLER_CPUSET].mountPoint != NULL &&
                 (i == VIR_CGROUP_CONTROLLER_CPUSET ||
@@ -751,8 +761,16 @@ int virCgroupAddTask(virCgroupPtr group, pid_t pid)
             continue;
 
         rc = virCgroupSetValueU64(group, i, "tasks", (unsigned long long)pid);
-        if (rc != 0)
-            break;
+
+        /* See virCgroupMakeGroup() for the reason why check BLKIO here */
+        if (rc != 0) {
+            if (i != VIR_CGROUP_CONTROLLER_BLKIO)
+                break;
+            else {
+                rc = 0;
+                continue;
+            }
+        }
     }
 
     return rc;
-- 
1.7.3.1


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