From 350fd95f40a41dde17529080de69f10211032b36 Mon Sep 17 00:00:00 2001 From: Gao feng Date: Wed, 3 Jul 2013 12:35:54 +0100 Subject: [PATCH] LXC: blkio: allow to setup weight_device 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 --- 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 5c8acb3595..4443b83ae6 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; }