render / rpms / libvirt

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