]> xenbits.xensource.com Git - libvirt.git/commitdiff
qemu: Adjust size for qcow2/qed if not on sector boundary
authorJohn Ferlan <jferlan@redhat.com>
Mon, 12 May 2014 14:21:09 +0000 (10:21 -0400)
committerJohn Ferlan <jferlan@redhat.com>
Tue, 13 May 2014 11:26:03 +0000 (07:26 -0400)
https://bugzilla.redhat.com/show_bug.cgi?id=1002813

If qemuDomainBlockResize() is passed a size not on a KiB boundary - that
is passed a size based in bytes (VIR_DOMAIN_BLOCK_RESIZE_BYTES), then
depending on the source format (qcow2 or qed), the value passed must
be on a sector (or 512 byte) boundary. Since other libvirt code quietly
adjusts the capacity values, then do so here as well.

src/qemu/qemu_driver.c

index 1fadabc08c35c2a66b90c4cd1d920f2a0bc955ca..a5c7f4fb757c288fbfa22dc1be48bbe38130c484 100644 (file)
@@ -9459,6 +9459,13 @@ qemuDomainBlockResize(virDomainPtr dom,
     }
     disk = vm->def->disks[idx];
 
+    /* qcow2 and qed must be sized on 512 byte blocks/sectors,
+     * so adjust size if necessary to round up.
+     */
+    if (disk->src.format == VIR_STORAGE_FILE_QCOW2 ||
+        disk->src.format == VIR_STORAGE_FILE_QED)
+        size = VIR_ROUND_UP(size, 512);
+
     if (virAsprintf(&device, "%s%s", QEMU_DRIVE_HOST_PREFIX,
                     disk->info.alias) < 0)
         goto endjob;