libivrt lxc can only set generic weight for container,
This patch allows user to setup per device blkio
weigh for container.
Signed-off-by: Gao feng <gaofeng(a)cn.fujitsu.com>
---
src/lxc/lxc_cgroup.c | 26 ++++++++++++++++++++------
1 file changed, 20 insertions(+), 6 deletions(-)
diff --git a/src/lxc/lxc_cgroup.c b/src/lxc/lxc_cgroup.c
index 5c8acb3..4443b83 100644
--- a/src/lxc/lxc_cgroup.c
+++ b/src/lxc/lxc_cgroup.c
@@ -123,21 +123,35 @@ cleanup:
static int virLXCCgroupSetupBlkioTune(virDomainDefPtr def,
virCgroupPtr cgroup)
{
- int ret = -1;
+ int i, rc;
if (def->blkio.weight) {
- int rc = virCgroupSetBlkioWeight(cgroup, def->blkio.weight);
+ rc = virCgroupSetBlkioWeight(cgroup, def->blkio.weight);
if (rc != 0) {
virReportSystemError(-rc,
_("Unable to set Blkio weight for domain
%s"),
def->name);
- goto cleanup;
+ return -1;
}
}
- ret = 0;
-cleanup:
- return ret;
+ if (def->blkio.ndevices) {
+ for (i = 0; i < def->blkio.ndevices; i++) {
+ virBlkioDeviceWeightPtr dw = &def->blkio.devices[i];
+ if (!dw->weight)
+ continue;
+ rc = virCgroupSetBlkioDeviceWeight(cgroup, dw->path, dw->weight);
+ if (rc != 0) {
+ virReportSystemError(-rc,
+ _("Unable to set io device weight "
+ "for domain %s"),
+ def->name);
+ return -1;
+ }
+ }
+ }
+
+ return 0;
}
--
1.8.1.4