]> xenbits.xensource.com Git - libvirt.git/commitdiff
util: vircgroupv2: separate return values of virCgroupV2EnableController
authorPavel Hrdina <phrdina@redhat.com>
Fri, 21 Jun 2019 12:47:47 +0000 (14:47 +0200)
committerPavel Hrdina <phrdina@redhat.com>
Wed, 26 Jun 2019 11:34:01 +0000 (13:34 +0200)
In order to skip controllers that we are not able to activate we need
to return different return value so the caller can decide what to do.

Signed-off-by: Pavel Hrdina <phrdina@redhat.com>
Reviewed-by: Peter Krempa <pkrempa@redhat.com>
src/util/vircgroupv2.c

index 3f4548b5324a3457566a6e4a81ec2a30b77d61a1..032f78ac8e7dd57fab5652801f4c5729f99ece06 100644 (file)
@@ -353,22 +353,40 @@ virCgroupV2PathOfController(virCgroupPtr group,
 }
 
 
+/**
+ * virCgroupV2EnableController:
+ *
+ * Returns: -1 on fatal error
+ *          -2 if we failed to write into cgroup.subtree_control
+ *          0 on success
+ */
 static int
 virCgroupV2EnableController(virCgroupPtr parent,
-                            int controller)
+                            int controller,
+                            bool report)
 {
     VIR_AUTOFREE(char *) val = NULL;
+    VIR_AUTOFREE(char *) path = NULL;
 
     if (virAsprintf(&val, "+%s",
                     virCgroupV2ControllerTypeToString(controller)) < 0) {
         return -1;
     }
 
-    if (virCgroupSetValueStr(parent, controller,
-                             "cgroup.subtree_control", val) < 0) {
+    if (virCgroupPathOfController(parent, controller,
+                                  "cgroup.subtree_control", &path) < 0) {
         return -1;
     }
 
+    if (virFileWriteStr(path, val, 0) < 0) {
+        if (report) {
+            virReportSystemError(errno,
+                                 _("Failed to enable controller '%s' for '%s'"),
+                                 val, path);
+        }
+        return -2;
+    }
+
     return 0;
 }
 
@@ -406,13 +424,15 @@ virCgroupV2MakeGroup(virCgroupPtr parent ATTRIBUTE_UNUSED,
 
             if (virCgroupV2HasController(parent, VIR_CGROUP_CONTROLLER_CPU) &&
                 virCgroupV2EnableController(parent,
-                                            VIR_CGROUP_CONTROLLER_CPU) < 0) {
+                                            VIR_CGROUP_CONTROLLER_CPU,
+                                            true) < 0) {
                 return -1;
             }
 
             if (virCgroupV2HasController(parent, VIR_CGROUP_CONTROLLER_CPUSET) &&
                 virCgroupV2EnableController(parent,
-                                            VIR_CGROUP_CONTROLLER_CPUSET) < 0) {
+                                            VIR_CGROUP_CONTROLLER_CPUSET,
+                                            true) < 0) {
                 return -1;
             }
         } else {
@@ -425,7 +445,7 @@ virCgroupV2MakeGroup(virCgroupPtr parent ATTRIBUTE_UNUSED,
                 if (i == VIR_CGROUP_CONTROLLER_CPUACCT)
                     continue;
 
-                if (virCgroupV2EnableController(parent, i) < 0)
+                if (virCgroupV2EnableController(parent, i, true) < 0)
                     return -1;
             }
         }