Commit 15e6690aca348a7dc8772b8f1197cf13c8764335

Authored by bellard
1 parent c47c33b0

fixed disk image creation


git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@2089 c046a42c-6fe2-441c-8c8c-71466251a162
Showing 1 changed file with 9 additions and 5 deletions
block-qcow2.c
@@ -1081,7 +1081,7 @@ static int qcow_create(const char *filename, int64_t total_size, @@ -1081,7 +1081,7 @@ static int qcow_create(const char *filename, int64_t total_size,
1081 s->l1_table_offset = offset; 1081 s->l1_table_offset = offset;
1082 header.l1_table_offset = cpu_to_be64(s->l1_table_offset); 1082 header.l1_table_offset = cpu_to_be64(s->l1_table_offset);
1083 header.l1_size = cpu_to_be32(l1_size); 1083 header.l1_size = cpu_to_be32(l1_size);
1084 - offset += align_offset(l1_size, s->cluster_size); 1084 + offset += align_offset(l1_size * sizeof(uint64_t), s->cluster_size);
1085 1085
1086 s->refcount_table = qemu_mallocz(s->cluster_size); 1086 s->refcount_table = qemu_mallocz(s->cluster_size);
1087 if (!s->refcount_table) 1087 if (!s->refcount_table)
@@ -1089,7 +1089,7 @@ static int qcow_create(const char *filename, int64_t total_size, @@ -1089,7 +1089,7 @@ static int qcow_create(const char *filename, int64_t total_size,
1089 s->refcount_block = qemu_mallocz(s->cluster_size); 1089 s->refcount_block = qemu_mallocz(s->cluster_size);
1090 if (!s->refcount_block) 1090 if (!s->refcount_block)
1091 goto fail; 1091 goto fail;
1092 - 1092 +
1093 s->refcount_table_offset = offset; 1093 s->refcount_table_offset = offset;
1094 header.refcount_table_offset = cpu_to_be64(offset); 1094 header.refcount_table_offset = cpu_to_be64(offset);
1095 header.refcount_table_clusters = cpu_to_be32(1); 1095 header.refcount_table_clusters = cpu_to_be32(1);
@@ -1101,7 +1101,7 @@ static int qcow_create(const char *filename, int64_t total_size, @@ -1101,7 +1101,7 @@ static int qcow_create(const char *filename, int64_t total_size,
1101 1101
1102 /* update refcounts */ 1102 /* update refcounts */
1103 create_refcount_update(s, 0, header_size); 1103 create_refcount_update(s, 0, header_size);
1104 - create_refcount_update(s, s->l1_table_offset, l1_size); 1104 + create_refcount_update(s, s->l1_table_offset, l1_size * sizeof(uint64_t));
1105 create_refcount_update(s, s->refcount_table_offset, s->cluster_size); 1105 create_refcount_update(s, s->refcount_table_offset, s->cluster_size);
1106 create_refcount_update(s, s->refcount_block_offset, s->cluster_size); 1106 create_refcount_update(s, s->refcount_block_offset, s->cluster_size);
1107 1107
@@ -1894,7 +1894,11 @@ static int grow_refcount_table(BlockDriverState *bs, int min_size) @@ -1894,7 +1894,11 @@ static int grow_refcount_table(BlockDriverState *bs, int min_size)
1894 if (min_size <= new_table_size) 1894 if (min_size <= new_table_size)
1895 break; 1895 break;
1896 } 1896 }
1897 - 1897 +#ifdef DEBUG_ALLOC2
  1898 + printf("grow_refcount_table from %d to %d\n",
  1899 + s->refcount_table_size,
  1900 + new_table_size);
  1901 +#endif
1898 new_table_size2 = new_table_size * sizeof(uint64_t); 1902 new_table_size2 = new_table_size * sizeof(uint64_t);
1899 new_table = qemu_mallocz(new_table_size2); 1903 new_table = qemu_mallocz(new_table_size2);
1900 if (!new_table) 1904 if (!new_table)
@@ -2144,7 +2148,7 @@ static void check_refcounts(BlockDriverState *bs) @@ -2144,7 +2148,7 @@ static void check_refcounts(BlockDriverState *bs)
2144 size = bdrv_getlength(s->hd); 2148 size = bdrv_getlength(s->hd);
2145 nb_clusters = (size + s->cluster_size - 1) >> s->cluster_bits; 2149 nb_clusters = (size + s->cluster_size - 1) >> s->cluster_bits;
2146 refcount_table = qemu_mallocz(nb_clusters * sizeof(uint16_t)); 2150 refcount_table = qemu_mallocz(nb_clusters * sizeof(uint16_t));
2147 - 2151 +
2148 /* header */ 2152 /* header */
2149 inc_refcounts(bs, refcount_table, nb_clusters, 2153 inc_refcounts(bs, refcount_table, nb_clusters,
2150 0, s->cluster_size); 2154 0, s->cluster_size);