On 02/20/2018 08:15 AM, Alberto Garcia wrote:
The documentation claims that the cluster descriptor contains the
number of sectors used to store the compressed data, but what it
actually contains is the number of sectors *minus one*.

That can be easily seen in qcow2_decompress_cluster(), that adds one
to the value stored in that field:

   nb_csectors = ((cluster_offset >> s->csize_shift) & s->csize_mask) + 1;

Signed-off-by: Alberto Garcia <be...@igalia.com>
---
  docs/interop/qcow2.txt | 3 ++-
  1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/docs/interop/qcow2.txt b/docs/interop/qcow2.txt
index d7fdb1fee3..b12972be82 100644
--- a/docs/interop/qcow2.txt
+++ b/docs/interop/qcow2.txt
@@ -429,7 +429,8 @@ Compressed Clusters Descriptor (x = 62 - (cluster_bits - 
8)):
      Bit  0 -  x:    Host cluster offset. This is usually _not_ aligned to a
                      cluster boundary!
- x+1 - 61: Compressed size of the images in sectors of 512 bytes
+       x+1 - 61:    Size of the compressed data in sectors of 512 bytes,
+                    minus one (that is, a value of n here means n+1 sectors).

Another way to read this field is as the index of the sector that includes the tail of the compressed data (so a value of 0 means the data ends in sector[0], occupying 1 sector; a value of 10 means the data ends in sector[10], occupying 11 sectors...). But your wording is more compact.

Reviewed-by: Eric Blake <ebl...@redhat.com>

--
Eric Blake, Principal Software Engineer
Red Hat, Inc.           +1-919-301-3266
Virtualization:  qemu.org | libvirt.org

Reply via email to