}
+static int
+virCgroupSetPlacement(virCgroupPtr group,
+ const char *path)
+{
+ size_t i;
+
+ for (i = 0; i < VIR_CGROUP_BACKEND_TYPE_LAST; i++) {
+ if (group->backends[i] &&
+ group->backends[i]->setPlacement(group, path) < 0) {
+ return -1;
+ }
+ }
+
+ return 0;
+}
+
+
static int
virCgroupValidatePlacement(virCgroupPtr group,
pid_t pid)
if (virCgroupDetectMounts(newGroup) < 0)
return -1;
- if (virCgroupCopyPlacement(newGroup, path, NULL) < 0)
+ if (virCgroupSetPlacement(newGroup, path) < 0)
return -1;
/* ... but use /proc/cgroups to fill in the rest */
const char *controllers,
const char *selfpath);
+typedef int
+(*virCgroupSetPlacementCB)(virCgroupPtr group,
+ const char *path);
+
typedef int
(*virCgroupValidatePlacementCB)(virCgroupPtr group,
pid_t pid);
virCgroupCopyPlacementCB copyPlacement;
virCgroupDetectMountsCB detectMounts;
virCgroupDetectPlacementCB detectPlacement;
+ virCgroupSetPlacementCB setPlacement;
virCgroupValidatePlacementCB validatePlacement;
virCgroupStealPlacementCB stealPlacement;
virCgroupDetectControllersCB detectControllers;
}
+static int
+virCgroupV1SetPlacement(virCgroupPtr group,
+ const char *path)
+{
+ size_t i;
+
+ for (i = 0; i < VIR_CGROUP_CONTROLLER_LAST; i++) {
+ if (!group->legacy[i].mountPoint)
+ continue;
+
+ if (i == VIR_CGROUP_CONTROLLER_SYSTEMD)
+ continue;
+
+ group->legacy[i].placement = g_strdup(path);
+ }
+
+ return 0;
+}
+
+
static int
virCgroupV1ValidatePlacement(virCgroupPtr group,
pid_t pid)
.copyPlacement = virCgroupV1CopyPlacement,
.detectMounts = virCgroupV1DetectMounts,
.detectPlacement = virCgroupV1DetectPlacement,
+ .setPlacement = virCgroupV1SetPlacement,
.validatePlacement = virCgroupV1ValidatePlacement,
.stealPlacement = virCgroupV1StealPlacement,
.detectControllers = virCgroupV1DetectControllers,
}
+static int
+virCgroupV2SetPlacement(virCgroupPtr group,
+ const char *path)
+{
+ group->unified.placement = g_strdup(path);
+
+ return 0;
+}
+
+
static int
virCgroupV2ValidatePlacement(virCgroupPtr group,
pid_t pid G_GNUC_UNUSED)
.copyPlacement = virCgroupV2CopyPlacement,
.detectMounts = virCgroupV2DetectMounts,
.detectPlacement = virCgroupV2DetectPlacement,
+ .setPlacement = virCgroupV2SetPlacement,
.validatePlacement = virCgroupV2ValidatePlacement,
.stealPlacement = virCgroupV2StealPlacement,
.detectControllers = virCgroupV2DetectControllers,