[PATCH 2/5] vircgroup: Try harder to kill cgroup

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

 



Prior to rewrite of cgroup code we only had one backend to try.
After the rewrite the virCgroupBackendGetAll() returns both
backends (for v1 and v2). However, not both have to really be
present on the system which results in killRecursive callback
failing which in turn might mean we won't try the other backend.

At the same time, this function reports no error as it should.

Signed-off-by: Michal Privoznik <mprivozn@xxxxxxxxxx>
---
 src/util/vircgroup.c | 15 +++++++++------
 1 file changed, 9 insertions(+), 6 deletions(-)

diff --git a/src/util/vircgroup.c b/src/util/vircgroup.c
index 3ebb3b0a0f..b8b56f1263 100644
--- a/src/util/vircgroup.c
+++ b/src/util/vircgroup.c
@@ -2606,6 +2606,7 @@ virCgroupKillRecursive(virCgroupPtr group, int signum)
     int ret = 0;
     int rc;
     size_t i;
+    bool backendAvailable = false;
     virCgroupBackendPtr *backends = virCgroupBackendGetAll();
     virHashTablePtr pids = virHashCreateFull(100,
                                              NULL,
@@ -2616,13 +2617,9 @@ virCgroupKillRecursive(virCgroupPtr group, int signum)
 
     VIR_DEBUG("group=%p path=%s signum=%d", group, group->path, signum);
 
-    if (!backends) {
-        ret = -1;
-        goto cleanup;
-    }
-
     for (i = 0; i < VIR_CGROUP_BACKEND_TYPE_LAST; i++) {
-        if (backends[i]) {
+        if (backends && backends[i] && backends[i]->available()) {
+            backendAvailable = true;
             rc = backends[i]->killRecursive(group, signum, pids);
             if (rc < 0) {
                 ret = -1;
@@ -2633,6 +2630,12 @@ virCgroupKillRecursive(virCgroupPtr group, int signum)
         }
     }
 
+    if (!backends || !backendAvailable) {
+        virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
+                       _("no cgroup backend available"));
+        goto cleanup;
+    }
+
  cleanup:
     virHashFree(pids);
     return ret;
-- 
2.19.2

--
libvir-list mailing list
libvir-list@xxxxxxxxxx
https://www.redhat.com/mailman/listinfo/libvir-list



[Index of Archives]     [Virt Tools]     [Libvirt Users]     [Lib OS Info]     [Fedora Users]     [Fedora Desktop]     [Fedora SELinux]     [Big List of Linux Books]     [Yosemite News]     [KDE Users]     [Fedora Tools]

  Powered by Linux