Pablo Greco 40546a
From 3980cde103a2804abc62a2eb3bcea39cccf20286 Mon Sep 17 00:00:00 2001
Pablo Greco 40546a
Message-Id: <3980cde103a2804abc62a2eb3bcea39cccf20286@dist-git>
Pablo Greco 40546a
From: Pavel Hrdina <phrdina@redhat.com>
Pablo Greco 40546a
Date: Mon, 1 Jul 2019 17:08:20 +0200
Pablo Greco 40546a
Subject: [PATCH] util: vircgroupv2: separate return values of
Pablo Greco 40546a
 virCgroupV2EnableController
Pablo Greco 40546a
MIME-Version: 1.0
Pablo Greco 40546a
Content-Type: text/plain; charset=UTF-8
Pablo Greco 40546a
Content-Transfer-Encoding: 8bit
Pablo Greco 40546a
Pablo Greco 40546a
In order to skip controllers that we are not able to activate we need
Pablo Greco 40546a
to return different return value so the caller can decide what to do.
Pablo Greco 40546a
Pablo Greco 40546a
Signed-off-by: Pavel Hrdina <phrdina@redhat.com>
Pablo Greco 40546a
Reviewed-by: Peter Krempa <pkrempa@redhat.com>
Pablo Greco 40546a
(cherry picked from commit 29a94a3fefeea0fb29b0b9f485c83c49b5bdae71)
Pablo Greco 40546a
Pablo Greco 40546a
Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1689297
Pablo Greco 40546a
Pablo Greco 40546a
Signed-off-by: Pavel Hrdina <phrdina@redhat.com>
Pablo Greco 40546a
Message-Id: <d0356666404a39fd0d6499490f60df17f3ee90b5.1561993100.git.phrdina@redhat.com>
Pablo Greco 40546a
Reviewed-by: Ján Tomko <jtomko@redhat.com>
Pablo Greco 40546a
---
Pablo Greco 40546a
 src/util/vircgroupv2.c | 32 ++++++++++++++++++++++++++------
Pablo Greco 40546a
 1 file changed, 26 insertions(+), 6 deletions(-)
Pablo Greco 40546a
Pablo Greco 40546a
diff --git a/src/util/vircgroupv2.c b/src/util/vircgroupv2.c
Pablo Greco 40546a
index 98d313bf82..a67d5cfe04 100644
Pablo Greco 40546a
--- a/src/util/vircgroupv2.c
Pablo Greco 40546a
+++ b/src/util/vircgroupv2.c
Pablo Greco 40546a
@@ -352,22 +352,40 @@ virCgroupV2PathOfController(virCgroupPtr group,
Pablo Greco 40546a
 }
Pablo Greco 40546a
 
Pablo Greco 40546a
 
Pablo Greco 40546a
+/**
Pablo Greco 40546a
+ * virCgroupV2EnableController:
Pablo Greco 40546a
+ *
Pablo Greco 40546a
+ * Returns: -1 on fatal error
Pablo Greco 40546a
+ *          -2 if we failed to write into cgroup.subtree_control
Pablo Greco 40546a
+ *          0 on success
Pablo Greco 40546a
+ */
Pablo Greco 40546a
 static int
Pablo Greco 40546a
 virCgroupV2EnableController(virCgroupPtr parent,
Pablo Greco 40546a
-                            int controller)
Pablo Greco 40546a
+                            int controller,
Pablo Greco 40546a
+                            bool report)
Pablo Greco 40546a
 {
Pablo Greco 40546a
     VIR_AUTOFREE(char *) val = NULL;
Pablo Greco 40546a
+    VIR_AUTOFREE(char *) path = NULL;
Pablo Greco 40546a
 
Pablo Greco 40546a
     if (virAsprintf(&val, "+%s",
Pablo Greco 40546a
                     virCgroupV2ControllerTypeToString(controller)) < 0) {
Pablo Greco 40546a
         return -1;
Pablo Greco 40546a
     }
Pablo Greco 40546a
 
Pablo Greco 40546a
-    if (virCgroupSetValueStr(parent, controller,
Pablo Greco 40546a
-                             "cgroup.subtree_control", val) < 0) {
Pablo Greco 40546a
+    if (virCgroupPathOfController(parent, controller,
Pablo Greco 40546a
+                                  "cgroup.subtree_control", &path) < 0) {
Pablo Greco 40546a
         return -1;
Pablo Greco 40546a
     }
Pablo Greco 40546a
 
Pablo Greco 40546a
+    if (virFileWriteStr(path, val, 0) < 0) {
Pablo Greco 40546a
+        if (report) {
Pablo Greco 40546a
+            virReportSystemError(errno,
Pablo Greco 40546a
+                                 _("Failed to enable controller '%s' for '%s'"),
Pablo Greco 40546a
+                                 val, path);
Pablo Greco 40546a
+        }
Pablo Greco 40546a
+        return -2;
Pablo Greco 40546a
+    }
Pablo Greco 40546a
+
Pablo Greco 40546a
     return 0;
Pablo Greco 40546a
 }
Pablo Greco 40546a
 
Pablo Greco 40546a
@@ -405,13 +423,15 @@ virCgroupV2MakeGroup(virCgroupPtr parent ATTRIBUTE_UNUSED,
Pablo Greco 40546a
 
Pablo Greco 40546a
             if (virCgroupV2HasController(parent, VIR_CGROUP_CONTROLLER_CPU) &&
Pablo Greco 40546a
                 virCgroupV2EnableController(parent,
Pablo Greco 40546a
-                                            VIR_CGROUP_CONTROLLER_CPU) < 0) {
Pablo Greco 40546a
+                                            VIR_CGROUP_CONTROLLER_CPU,
Pablo Greco 40546a
+                                            true) < 0) {
Pablo Greco 40546a
                 return -1;
Pablo Greco 40546a
             }
Pablo Greco 40546a
 
Pablo Greco 40546a
             if (virCgroupV2HasController(parent, VIR_CGROUP_CONTROLLER_CPUSET) &&
Pablo Greco 40546a
                 virCgroupV2EnableController(parent,
Pablo Greco 40546a
-                                            VIR_CGROUP_CONTROLLER_CPUSET) < 0) {
Pablo Greco 40546a
+                                            VIR_CGROUP_CONTROLLER_CPUSET,
Pablo Greco 40546a
+                                            true) < 0) {
Pablo Greco 40546a
                 return -1;
Pablo Greco 40546a
             }
Pablo Greco 40546a
         } else {
Pablo Greco 40546a
@@ -424,7 +444,7 @@ virCgroupV2MakeGroup(virCgroupPtr parent ATTRIBUTE_UNUSED,
Pablo Greco 40546a
                 if (i == VIR_CGROUP_CONTROLLER_CPUACCT)
Pablo Greco 40546a
                     continue;
Pablo Greco 40546a
 
Pablo Greco 40546a
-                if (virCgroupV2EnableController(parent, i) < 0)
Pablo Greco 40546a
+                if (virCgroupV2EnableController(parent, i, true) < 0)
Pablo Greco 40546a
                     return -1;
Pablo Greco 40546a
             }
Pablo Greco 40546a
         }
Pablo Greco 40546a
-- 
Pablo Greco 40546a
2.22.0
Pablo Greco 40546a