---
src/qemu/qemu_cgroup.c | 90 ++++++++++++++++++++++++++++----------------------
1 file changed, 50 insertions(+), 40 deletions(-)
diff --git a/src/qemu/qemu_cgroup.c b/src/qemu/qemu_cgroup.c
index 9784f31..0c4792e 100644
--- a/src/qemu/qemu_cgroup.c
+++ b/src/qemu/qemu_cgroup.c
@@ -407,6 +407,53 @@ cleanup:
return ret;
}
+static int
+qemuSetupBlkioCgroup(virDomainObjPtr vm)
+{
+ qemuDomainObjPrivatePtr priv = vm->privateData;
+ int rc = -1;
+ int i;
+
+ if (!virCgroupHasController(priv->cgroup,
+ VIR_CGROUP_CONTROLLER_BLKIO)) {
+ if (vm->def->blkio.weight || vm->def->blkio.ndevices) {
+ virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
+ _("Block I/O tuning is not available on this
host"));
+ return -1;
+ } else {
+ return 0;
+ }
+ }
+
+ if (vm->def->blkio.weight != 0) {
+ rc = virCgroupSetBlkioWeight(priv->cgroup, vm->def->blkio.weight);
+ if (rc != 0) {
+ virReportSystemError(-rc,
+ _("Unable to set io weight for domain %s"),
+ vm->def->name);
+ return -1;
+ }
+ }
+
+ if (vm->def->blkio.ndevices) {
+ for (i = 0; i < vm->def->blkio.ndevices; i++) {
+ virBlkioDeviceWeightPtr dw = &vm->def->blkio.devices[i];
+ if (!dw->weight)
+ continue;
+ rc = virCgroupSetBlkioDeviceWeight(priv->cgroup, dw->path,
+ dw->weight);
+ if (rc != 0) {
+ virReportSystemError(-rc,
+ _("Unable to set io device weight "
+ "for domain %s"),
+ vm->def->name);
+ return -1;
+ }
+ }
+ }
+
+ return 0;
+}
int qemuInitCgroup(virQEMUDriverPtr driver,
virDomainObjPtr vm,
@@ -517,7 +564,6 @@ cleanup:
return rc;
}
-
int qemuSetupCgroup(virQEMUDriverPtr driver,
virDomainObjPtr vm,
virBitmapPtr nodemask)
@@ -609,7 +655,7 @@ int qemuSetupCgroup(virQEMUDriverPtr driver,
if (vm->def->tpm &&
(qemuSetupTPMCgroup(vm->def,
- vm->def->tpm,
+ vm->def->tpm,
vm) < 0))
goto cleanup;
@@ -619,44 +665,8 @@ int qemuSetupCgroup(virQEMUDriverPtr driver,
}
}
- if (vm->def->blkio.weight != 0) {
- if (virCgroupHasController(priv->cgroup, VIR_CGROUP_CONTROLLER_BLKIO)) {
- rc = virCgroupSetBlkioWeight(priv->cgroup, vm->def->blkio.weight);
- if (rc != 0) {
- virReportSystemError(-rc,
- _("Unable to set io weight for domain
%s"),
- vm->def->name);
- goto cleanup;
- }
- } else {
- virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
- _("Block I/O tuning is not available on this
host"));
- goto cleanup;
- }
- }
-
- if (vm->def->blkio.ndevices) {
- if (virCgroupHasController(priv->cgroup, VIR_CGROUP_CONTROLLER_BLKIO)) {
- for (i = 0; i < vm->def->blkio.ndevices; i++) {
- virBlkioDeviceWeightPtr dw = &vm->def->blkio.devices[i];
- if (!dw->weight)
- continue;
- rc = virCgroupSetBlkioDeviceWeight(priv->cgroup, dw->path,
- dw->weight);
- if (rc != 0) {
- virReportSystemError(-rc,
- _("Unable to set io device weight "
- "for domain %s"),
- vm->def->name);
- goto cleanup;
- }
- }
- } else {
- virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
- _("Block I/O tuning is not available on this
host"));
- goto cleanup;
- }
- }
+ if (qemuSetupBlkioCgroup(vm) < 0)
+ goto cleanup;
if (virCgroupHasController(priv->cgroup, VIR_CGROUP_CONTROLLER_MEMORY)) {
unsigned long long hard_limit = vm->def->mem.hard_limit;
--
1.8.1.4