On 11/29/2011 07:11 PM, Hu Tao wrote:
Thanks. I also found we need to do filtering at other places. Since
this
is already pushed, here is another patch:
>From b2009f582641b61c450744061ce34faa7a5f8eb7 Mon Sep 17 00:00:00 2001
From: Hu Tao <hutao(a)cn.fujitsu.com>
Date: Wed, 30 Nov 2011 10:06:19 +0800
Subject: [PATCH] filter blkio 0-device-weight at two oter places
s/oter/other/
filter 0-device-weight when:
- getting blkio parameters with --config
- starting up a domain
When testing with blkio, I found these issues:
(dom is down)
virsh blkiotune dom --device-weights /dev/sda,300,/dev/sdb,500
virsh blkiotune dom --device-weights /dev/sda,300,/dev/sdb,0
virsh blkiotune dom
weight : 800
device_weight : /dev/sda,200,/dev/sdb,0
# issue 1: shows 0 device weight of /dev/sdb that may confuse user
(continued)
virsh start dom
# issue 2: If /dev/sdb doesn't exist, libvirt refuses to bring the
# dom up because it wants to set the device weight to 0 of a
# non-existing device. Since 0 means no weight-limit, we really don't
# have to set it.
Good catches, and your patch looks almost right.
@@ -6370,6 +6370,8 @@ static int
qemuDomainGetBlkioParameters(virDomainPtr dom,
if (persistentDef->blkio.ndevices > 0) {
virBuffer buf = VIR_BUFFER_INITIALIZER;
for (j = 0; j < persistentDef->blkio.ndevices; j++) {
+ if (!persistentDef->blkio.devices[j].weight)
+ continue;
if (j)
virBufferAddChar(&buf, ',');
Here, we can't use 'j' as the key for whether to print a comma, but have
to introduce a new variable.
ACK with this squashed in, and pushed:
diff --git i/src/qemu/qemu_driver.c w/src/qemu/qemu_driver.c
index 0b1d6cf..ed90c66 100644
--- i/src/qemu/qemu_driver.c
+++ w/src/qemu/qemu_driver.c
@@ -6312,6 +6312,7 @@ static int
qemuDomainGetBlkioParameters(virDomainPtr dom,
if (vm->def->blkio.ndevices > 0) {
virBuffer buf = VIR_BUFFER_INITIALIZER;
bool comma = false;
+
for (j = 0; j < vm->def->blkio.ndevices; j++) {
if (!vm->def->blkio.devices[j].weight)
continue;
@@ -6372,11 +6373,15 @@ static int
qemuDomainGetBlkioParameters(virDomainPtr dom,
case 1: /* blkiotune.device_weight */
if (persistentDef->blkio.ndevices > 0) {
virBuffer buf = VIR_BUFFER_INITIALIZER;
+ bool comma = false;
+
for (j = 0; j < persistentDef->blkio.ndevices; j++) {
if (!persistentDef->blkio.devices[j].weight)
continue;
- if (j)
+ if (comma)
virBufferAddChar(&buf, ',');
+ else
+ comma = true;
virBufferAsprintf(&buf, "%s,%u",
persistentDef->blkio.devices[j].path,
persistentDef->blkio.devices[j].weight);
--
Eric Blake eblake(a)redhat.com +1-919-301-3266
Libvirt virtualization library
http://libvirt.org