]> git.ipfire.org Git - thirdparty/libvirt.git/commitdiff
vircgroup: extract virCgroupV1GetAnyController
authorPavel Hrdina <phrdina@redhat.com>
Sun, 19 Aug 2018 17:20:25 +0000 (19:20 +0200)
committerPavel Hrdina <phrdina@redhat.com>
Tue, 25 Sep 2018 11:40:22 +0000 (13:40 +0200)
Reviewed-by: Fabiano Fidêncio <fidencio@redhat.com>
Reviewed-by: Ján Tomko <jtomko@redhat.com>
Signed-off-by: Pavel Hrdina <phrdina@redhat.com>
src/util/vircgroup.c
src/util/vircgroupbackend.h
src/util/vircgroupv1.c

index 80b9a0c83f844e45409b1ba88ecbcc072ec3d43d..733bbe68fbcb914718712ba4806ccc97a72e55ea 100644 (file)
@@ -3169,19 +3169,11 @@ virCgroupPathOfAnyController(virCgroupPtr group,
                              const char *name,
                              char **keypath)
 {
-    size_t i;
+    int controller;
 
-    for (i = 0; i < VIR_CGROUP_CONTROLLER_LAST; i++) {
-        /* Reject any controller with a placement
-         * of '/' to avoid doing bad stuff to the root
-         * cgroup
-         */
-        if (group->controllers[i].mountPoint &&
-            group->controllers[i].placement &&
-            STRNEQ(group->controllers[i].placement, "/")) {
-            return virCgroupPathOfController(group, i, name, keypath);
-        }
-    }
+    controller = group->backend->getAnyController(group);
+    if (controller >= 0)
+        return virCgroupPathOfController(group, controller, name, keypath);
 
     virReportSystemError(ENOSYS, "%s",
                          _("No controllers are mounted"));
index 29b2fd119f4c9b146d2b218e75510870064010dd..b4eaa890214aced5b6be130bf7bd5036acd9f9a6 100644 (file)
@@ -77,6 +77,9 @@ typedef bool
 (*virCgroupHasControllerCB)(virCgroupPtr cgroup,
                             int controller);
 
+typedef int
+(*virCgroupGetAnyControllerCB)(virCgroupPtr group);
+
 struct _virCgroupBackend {
     virCgroupBackendType type;
 
@@ -91,6 +94,7 @@ struct _virCgroupBackend {
     virCgroupStealPlacementCB stealPlacement;
     virCgroupDetectControllersCB detectControllers;
     virCgroupHasControllerCB hasController;
+    virCgroupGetAnyControllerCB getAnyController;
 };
 typedef struct _virCgroupBackend virCgroupBackend;
 typedef virCgroupBackend *virCgroupBackendPtr;
index 0b41fca1cc897e444c0141a6ee5d11107a04fc63..d07eb494a3906de95e691bac6a0a472369a17ccc 100644 (file)
@@ -485,6 +485,27 @@ virCgroupV1HasController(virCgroupPtr group,
 }
 
 
+static int
+virCgroupV1GetAnyController(virCgroupPtr group)
+{
+    size_t i;
+
+    for (i = 0; i < VIR_CGROUP_CONTROLLER_LAST; i++) {
+        /* Reject any controller with a placement
+         * of '/' to avoid doing bad stuff to the root
+         * cgroup
+         */
+        if (group->controllers[i].mountPoint &&
+            group->controllers[i].placement &&
+            STRNEQ(group->controllers[i].placement, "/")) {
+            return i;
+        }
+    }
+
+    return -1;
+}
+
+
 virCgroupBackend virCgroupV1Backend = {
     .type = VIR_CGROUP_BACKEND_TYPE_V1,
 
@@ -498,6 +519,7 @@ virCgroupBackend virCgroupV1Backend = {
     .stealPlacement = virCgroupV1StealPlacement,
     .detectControllers = virCgroupV1DetectControllers,
     .hasController = virCgroupV1HasController,
+    .getAnyController = virCgroupV1GetAnyController,
 };