Skip to contentSkip to conversation

qcow2: Fix metadata preallocation

PATCH New Kevin Wolf 1 participant 1 message Aug 31, 2009 Block layer

lore
Share & tools
lore

Kevin Wolf

author
#0 lore raw

PATCH 1/1 qcow2: Fix metadata preallocation

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.

---
 block/qcow2.c |    4 +++-
 1 files changed, 3 insertions(+), 1 deletions(-)
block/qcow2.c +3 -1
index 9637f2e..b8eae90 100644
@@ -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;
Signature · 1 line
1.6.0.6