]> git.ipfire.org Git - thirdparty/libvirt.git/commitdiff
qemu: don't modify domain on failed blockiotune
authorEric Blake <eblake@redhat.com>
Fri, 4 May 2012 15:43:23 +0000 (09:43 -0600)
committerCole Robinson <crobinso@redhat.com>
Thu, 14 Jun 2012 15:17:17 +0000 (11:17 -0400)
If you have a qemu build that lacks the blockio tune monitor command,
then this command:

$ virsh blkdeviotune rhel6u2 hda --total_bytes_sec 1000
error: Unable to change block I/O throttle
error: internal error Unexpected error

fails as expected (well, the error message is lousy), but the next
dumpxml shows that the domain was modified anyway.  Worse, that means
if you save the domain then restore it, the restore will likely fail
due to throttling being unsupported, even though no throttling should
even be active because the monitor command failed in the first place.

* src/qemu/qemu_driver.c (qemuDomainSetBlockIoTune): Check for
error before making modification permanent.
(cherry picked from commit 98cec052882c9acb5e3b8bc3f8e8a37a2cdb2982)

src/qemu/qemu_driver.c

index 2582dadf2eef20d84216a21012af0cb736eb3e2f..4b23ee061b127006544c2e919d38f98803ea31a0 100644 (file)
@@ -11923,9 +11923,9 @@ qemuDomainSetBlockIoTune(virDomainPtr dom,
         qemuDomainObjEnterMonitorWithDriver(driver, vm);
         ret = qemuMonitorSetBlockIoThrottle(priv->mon, device, &info);
         qemuDomainObjExitMonitorWithDriver(driver, vm);
-        vm->def->disks[idx]->blkdeviotune = info;
         if (ret < 0)
             goto endjob;
+        vm->def->disks[idx]->blkdeviotune = info;
     }
 
     if (flags & VIR_DOMAIN_AFFECT_CONFIG) {