]> git.proxmox.com Git - qemu.git/commitdiff
qcow2: Fix metadata preallocation
authorKevin Wolf <kwolf@redhat.com>
Mon, 31 Aug 2009 10:26:57 +0000 (12:26 +0200)
committerAnthony Liguori <aliguori@us.ibm.com>
Wed, 9 Sep 2009 22:31:26 +0000 (17:31 -0500)
The wrong version of the preallocation patch has been applied, so this is the
remaining diff.

We can't use truncate to grow the image file to the right size because we don't
know if metadata has been written after the last data cluster. In this case
truncate would shrink the file and destroy its metadata. Write a zero sector at
the end of the virtual disk instead to ensure that the file is big enough.

Signed-off-by: Kevin Wolf <kwolf@redhat.com>
Signed-off-by: Anthony Liguori <aliguori@us.ibm.com>
block/qcow2.c

index 9637f2ea3a57c5e45f4c5d5652d805774cc3eb08..b8eae902a3c880351bc8ed58a43896e1f3d68265 100644 (file)
@@ -677,7 +677,9 @@ static int preallocate(BlockDriverState *bs)
      * EOF). Extend the image to the last allocated sector.
      */
     if (cluster_offset != 0) {
-        bdrv_truncate(s->hd, cluster_offset + (num <<  9));
+        uint8_t buf[512];
+        memset(buf, 0, 512);
+        bdrv_write(s->hd, (cluster_offset >> 9) + num - 1, buf, 1);
     }
 
     return 0;