[libvirt] [PATCH] filter blkio 0-device-weight at two oter places(was Re: [PATCHv4 4/4] blkiotune: add qemu support for blkiotune.device_weight)

Eric Blake eblake at redhat.com
Wed Nov 30 19:34:36 UTC 2011


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 at 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 at redhat.com    +1-919-301-3266
Libvirt virtualization library http://libvirt.org

-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 620 bytes
Desc: OpenPGP digital signature
URL: <http://listman.redhat.com/archives/libvir-list/attachments/20111130/15e5eaed/attachment-0001.sig>


More information about the libvir-list mailing list