Denis Plotnikov <dplotni...@virtuozzo.com> writes: > The patch adds some preparation parts for incompatible compression type > feature to qcow2 allowing the use different compression methods for > image clusters (de)compressing. > > It is implied that the compression type is set on the image creation and > can be changed only later by image conversion, thus compression type > defines the only compression algorithm used for the image, and thus, > for all image clusters. > > The goal of the feature is to add support of other compression methods > to qcow2. For example, ZSTD which is more effective on compression than ZLIB. > > The default compression is ZLIB. Images created with ZLIB compression type > are backward compatible with older qemu versions. > > Adding of the compression type breaks a number of tests because now the > compression type is reported on image creation and there are some changes > in the qcow2 header in size and offsets. > > The tests are fixed in the following ways: > * filter out compression_type for all the tests > * fix header size, feature table size and backing file offset > affected tests: 031, 036, 061, 080 > header_size +=8: 1 byte compression type > 7 bytes padding > feature_table += 48: incompatible feture compression type > backing_file_offset += 56 (8 + 48 -> header_change + > fature_table_change) > * add "compression type" for test output matching when it isn't filtered > affected tests: 049, 060, 061, 065, 144, 182, 242, 255 > > Signed-off-by: Denis Plotnikov <dplotni...@virtuozzo.com> > Reviewed-by: Vladimir Sementsov-Ogievskiy <vsement...@virtuozzo.com> > --- > qapi/block-core.json | 22 ++++++- > block/qcow2.h | 18 +++++- > include/block/block_int.h | 1 + > block/qcow2.c | 101 ++++++++++++++++++++++++++++++ > tests/qemu-iotests/031.out | 14 ++--- > tests/qemu-iotests/036.out | 4 +- > tests/qemu-iotests/049.out | 102 +++++++++++++++---------------- > tests/qemu-iotests/060.out | 1 + > tests/qemu-iotests/061.out | 34 ++++++----- > tests/qemu-iotests/065 | 28 ++++++--- > tests/qemu-iotests/080 | 2 +- > tests/qemu-iotests/144.out | 4 +- > tests/qemu-iotests/182.out | 2 +- > tests/qemu-iotests/242.out | 5 ++ > tests/qemu-iotests/255.out | 8 +-- > tests/qemu-iotests/common.filter | 3 +- > 16 files changed, 253 insertions(+), 96 deletions(-) > > diff --git a/qapi/block-core.json b/qapi/block-core.json > index 85e27bb61f..a67eb8bff4 100644 > --- a/qapi/block-core.json > +++ b/qapi/block-core.json > @@ -78,6 +78,8 @@ > # > # @bitmaps: A list of qcow2 bitmap details (since 4.0) > # > +# @compression-type: the image cluster compression method (since 5.0) > +# > # Since: 1.7 > ## > { 'struct': 'ImageInfoSpecificQCow2', > @@ -89,7 +91,8 @@ > '*corrupt': 'bool', > 'refcount-bits': 'int', > '*encrypt': 'ImageInfoSpecificQCow2Encryption', > - '*bitmaps': ['Qcow2BitmapInfo'] > + '*bitmaps': ['Qcow2BitmapInfo'], > + 'compression-type': 'Qcow2CompressionType' > } } > > ## > @@ -4392,6 +4395,18 @@ > 'data': [ 'v2', 'v3' ] } > > > +## > +# @Qcow2CompressionType: > +# > +# Compression type used in qcow2 image file > +# > +# @zlib: zlib compression, see <http://zlib.net/> > +# > +# Since: 5.0 > +## > +{ 'enum': 'Qcow2CompressionType', > + 'data': [ 'zlib' ] } > + > ## > # @BlockdevCreateOptionsQcow2: > # > @@ -4415,6 +4430,8 @@ > # allowed values: off, falloc, full, metadata) > # @lazy-refcounts: True if refcounts may be updated lazily (default: off) > # @refcount-bits: Width of reference counts in bits (default: 16) > +# @compression-type: The image cluster compression method > +# (default: zlib, since 5.0) > # > # Since: 2.12 > ## > @@ -4430,7 +4447,8 @@ > '*cluster-size': 'size', > '*preallocation': 'PreallocMode', > '*lazy-refcounts': 'bool', > - '*refcount-bits': 'int' } } > + '*refcount-bits': 'int', > + '*compression-type':'Qcow2CompressionType' } } > > ## > # @BlockdevCreateOptionsQed: [...]
QAPI part: Acked-by: Markus Armbruster <arm...@redhat.com>