qcow2: Fix image creation regression
authorKevin Wolf <kwolf@redhat.com>
Tue, 23 Feb 2010 15:06:20 +0000 (16:06 +0100)
committerAnthony Liguori <aliguori@us.ibm.com>
Tue, 23 Feb 2010 19:23:29 +0000 (13:23 -0600)
When checking for errors, commit db89119d compares with the wrong values,
failing image creation even when there was no error. Additionally, if an
error has occured, we can't preallocate the image (it's likely broken).

This unbreaks test 023 of qemu-iotests.

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

index 7f3aef5832600a386c9fbe2928d1d58b6e65a069..bf8170ed02bee983b2da37ffe3b5a279397ac5d0 100644 (file)
@@ -984,7 +984,7 @@ static int qcow_create2(const char *filename, int64_t total_size,
     lseek(fd, s->refcount_block_offset, SEEK_SET);
     ret = qemu_write_full(fd, s->refcount_block,
                    ref_clusters * s->cluster_size);
-    if (ret != s->cluster_size) {
+    if (ret != ref_clusters * s->cluster_size) {
         ret = -1;
         goto exit;
     }
@@ -996,7 +996,7 @@ exit:
     close(fd);
 
     /* Preallocate metadata */
-    if (prealloc) {
+    if (ret == 0 && prealloc) {
         BlockDriverState *bs;
         bs = bdrv_new("");
         bdrv_open(bs, filename, BDRV_O_CACHE_WB | BDRV_O_RDWR);