Commit 7f48fa1f05b0db5583fd191aee60f7b4fb7ffda9

Authored by aliguori
1 parent 062e5527

qcow1: Fix compressed images (Kevin Wolf)

Revert r4673, the removed dead code wasn't dead in fact.

Additionally, change the misleading else which tricks the reader into
believing that allocate is a boolean to else if (allocate == 2).

Signed-off-by: Kevin Wolf <kwolf@suse.de>
Signed-off-by: Anthony Liguori <aliguori@us.ibm.com>



git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@6244 c046a42c-6fe2-441c-8c8c-71466251a162
Showing 1 changed file with 25 additions and 20 deletions
block-qcow.c
... ... @@ -339,28 +339,33 @@ static uint64_t get_cluster_offset(BlockDriverState *bs,
339 339 return -1;
340 340 } else {
341 341 cluster_offset = bdrv_getlength(s->hd);
342   - /* round to cluster size */
343   - cluster_offset = (cluster_offset + s->cluster_size - 1) &
344   - ~(s->cluster_size - 1);
345   - bdrv_truncate(s->hd, cluster_offset + s->cluster_size);
346   - /* if encrypted, we must initialize the cluster
347   - content which won't be written */
348   - if (s->crypt_method &&
349   - (n_end - n_start) < s->cluster_sectors) {
350   - uint64_t start_sect;
351   - start_sect = (offset & ~(s->cluster_size - 1)) >> 9;
352   - memset(s->cluster_data + 512, 0x00, 512);
353   - for(i = 0; i < s->cluster_sectors; i++) {
354   - if (i < n_start || i >= n_end) {
355   - encrypt_sectors(s, start_sect + i,
356   - s->cluster_data,
357   - s->cluster_data + 512, 1, 1,
358   - &s->aes_encrypt_key);
359   - if (bdrv_pwrite(s->hd, cluster_offset + i * 512,
360   - s->cluster_data, 512) != 512)
361   - return -1;
  342 + if (allocate == 1) {
  343 + /* round to cluster size */
  344 + cluster_offset = (cluster_offset + s->cluster_size - 1) &
  345 + ~(s->cluster_size - 1);
  346 + bdrv_truncate(s->hd, cluster_offset + s->cluster_size);
  347 + /* if encrypted, we must initialize the cluster
  348 + content which won't be written */
  349 + if (s->crypt_method &&
  350 + (n_end - n_start) < s->cluster_sectors) {
  351 + uint64_t start_sect;
  352 + start_sect = (offset & ~(s->cluster_size - 1)) >> 9;
  353 + memset(s->cluster_data + 512, 0x00, 512);
  354 + for(i = 0; i < s->cluster_sectors; i++) {
  355 + if (i < n_start || i >= n_end) {
  356 + encrypt_sectors(s, start_sect + i,
  357 + s->cluster_data,
  358 + s->cluster_data + 512, 1, 1,
  359 + &s->aes_encrypt_key);
  360 + if (bdrv_pwrite(s->hd, cluster_offset + i * 512,
  361 + s->cluster_data, 512) != 512)
  362 + return -1;
  363 + }
362 364 }
363 365 }
  366 + } else if (allocate == 2) {
  367 + cluster_offset |= QCOW_OFLAG_COMPRESSED |
  368 + (uint64_t)compressed_size << (63 - s->cluster_bits);
364 369 }
365 370 }
366 371 /* update L2 table */
... ...