mirror of
https://github.com/libvirt/libvirt.git
synced 2025-02-25 18:55:26 -06:00
vircgroup: extract virCgroupV1GetAnyController
Reviewed-by: Fabiano Fidêncio <fidencio@redhat.com> Reviewed-by: Ján Tomko <jtomko@redhat.com> Signed-off-by: Pavel Hrdina <phrdina@redhat.com>
This commit is contained in:
parent
5e2df3d07f
commit
d6564037e8
@ -3169,19 +3169,11 @@ virCgroupPathOfAnyController(virCgroupPtr group,
|
|||||||
const char *name,
|
const char *name,
|
||||||
char **keypath)
|
char **keypath)
|
||||||
{
|
{
|
||||||
size_t i;
|
int controller;
|
||||||
|
|
||||||
for (i = 0; i < VIR_CGROUP_CONTROLLER_LAST; i++) {
|
controller = group->backend->getAnyController(group);
|
||||||
/* Reject any controller with a placement
|
if (controller >= 0)
|
||||||
* of '/' to avoid doing bad stuff to the root
|
return virCgroupPathOfController(group, controller, name, keypath);
|
||||||
* cgroup
|
|
||||||
*/
|
|
||||||
if (group->controllers[i].mountPoint &&
|
|
||||||
group->controllers[i].placement &&
|
|
||||||
STRNEQ(group->controllers[i].placement, "/")) {
|
|
||||||
return virCgroupPathOfController(group, i, name, keypath);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
virReportSystemError(ENOSYS, "%s",
|
virReportSystemError(ENOSYS, "%s",
|
||||||
_("No controllers are mounted"));
|
_("No controllers are mounted"));
|
||||||
|
@ -77,6 +77,9 @@ typedef bool
|
|||||||
(*virCgroupHasControllerCB)(virCgroupPtr cgroup,
|
(*virCgroupHasControllerCB)(virCgroupPtr cgroup,
|
||||||
int controller);
|
int controller);
|
||||||
|
|
||||||
|
typedef int
|
||||||
|
(*virCgroupGetAnyControllerCB)(virCgroupPtr group);
|
||||||
|
|
||||||
struct _virCgroupBackend {
|
struct _virCgroupBackend {
|
||||||
virCgroupBackendType type;
|
virCgroupBackendType type;
|
||||||
|
|
||||||
@ -91,6 +94,7 @@ struct _virCgroupBackend {
|
|||||||
virCgroupStealPlacementCB stealPlacement;
|
virCgroupStealPlacementCB stealPlacement;
|
||||||
virCgroupDetectControllersCB detectControllers;
|
virCgroupDetectControllersCB detectControllers;
|
||||||
virCgroupHasControllerCB hasController;
|
virCgroupHasControllerCB hasController;
|
||||||
|
virCgroupGetAnyControllerCB getAnyController;
|
||||||
};
|
};
|
||||||
typedef struct _virCgroupBackend virCgroupBackend;
|
typedef struct _virCgroupBackend virCgroupBackend;
|
||||||
typedef virCgroupBackend *virCgroupBackendPtr;
|
typedef virCgroupBackend *virCgroupBackendPtr;
|
||||||
|
@ -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 = {
|
virCgroupBackend virCgroupV1Backend = {
|
||||||
.type = VIR_CGROUP_BACKEND_TYPE_V1,
|
.type = VIR_CGROUP_BACKEND_TYPE_V1,
|
||||||
|
|
||||||
@ -498,6 +519,7 @@ virCgroupBackend virCgroupV1Backend = {
|
|||||||
.stealPlacement = virCgroupV1StealPlacement,
|
.stealPlacement = virCgroupV1StealPlacement,
|
||||||
.detectControllers = virCgroupV1DetectControllers,
|
.detectControllers = virCgroupV1DetectControllers,
|
||||||
.hasController = virCgroupV1HasController,
|
.hasController = virCgroupV1HasController,
|
||||||
|
.getAnyController = virCgroupV1GetAnyController,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user