diff mbox

[V4,10/10] block/qcow2: add compress info to image specific info

Message ID 1500560441-5670-11-git-send-email-pl@kamp.de (mailing list archive)
State New, archived
Headers show

Commit Message

Peter Lieven July 20, 2017, 2:20 p.m. UTC
Signed-off-by: Peter Lieven <pl@kamp.de>
---
 block/qcow2.c        | 9 +++++++++
 qapi/block-core.json | 6 +++++-
 2 files changed, 14 insertions(+), 1 deletion(-)

Comments

Eric Blake July 20, 2017, 4:05 p.m. UTC | #1
On 07/20/2017 09:20 AM, Peter Lieven wrote:
> Signed-off-by: Peter Lieven <pl@kamp.de>
> ---
>  block/qcow2.c        | 9 +++++++++
>  qapi/block-core.json | 6 +++++-
>  2 files changed, 14 insertions(+), 1 deletion(-)
> 

> diff --git a/qapi/block-core.json b/qapi/block-core.json
> index 9eb76df..9310715 100644
> --- a/qapi/block-core.json
> +++ b/qapi/block-core.json
> @@ -68,6 +68,9 @@
>  # @encrypt: details about encryption parameters; only set if image
>  #           is encrypted (since 2.10)
>  #
> +# @compress: details about parameters for compressed clusters; only set if
> +#            the compress format header extension is present (since 2.10)

Would it be possible/wise to ALWAYS output compression information, even
if it is the older style zlib with small window and default level?  Made
easier if you can represent all tunables of zlib (where you special-case
writing the qcow2 header to omit the extension header when the user has
requested the defaults).

This is a new feature, and unfortunately we've missed soft freeze for
2.10.  You'll want to update your series to uniformly state since 2.11.
Peter Lieven July 20, 2017, 4:33 p.m. UTC | #2
Am 20.07.2017 um 18:05 schrieb Eric Blake:
> On 07/20/2017 09:20 AM, Peter Lieven wrote:
>> Signed-off-by: Peter Lieven <pl@kamp.de>
>> ---
>>  block/qcow2.c        | 9 +++++++++
>>  qapi/block-core.json | 6 +++++-
>>  2 files changed, 14 insertions(+), 1 deletion(-)
>>
>> diff --git a/qapi/block-core.json b/qapi/block-core.json
>> index 9eb76df..9310715 100644
>> --- a/qapi/block-core.json
>> +++ b/qapi/block-core.json
>> @@ -68,6 +68,9 @@
>>  # @encrypt: details about encryption parameters; only set if image
>>  #           is encrypted (since 2.10)
>>  #
>> +# @compress: details about parameters for compressed clusters; only set if
>> +#            the compress format header extension is present (since 2.10)
> Would it be possible/wise to ALWAYS output compression information, even
> if it is the older style zlib with small window and default level?  Made
> easier if you can represent all tunables of zlib (where you special-case
> writing the qcow2 header to omit the extension header when the user has
> requested the defaults).

If we would store it in the header it will make the read and write of
the header much more complicated if we don't add the window size
to the default header (e.g. shrinking the format name to 14 and adding
to uint8_t for level and window size)

>
> This is a new feature, and unfortunately we've missed soft freeze for
> 2.10.  You'll want to update your series to uniformly state since 2.11.
>
Okay.
diff mbox

Patch

diff --git a/block/qcow2.c b/block/qcow2.c
index 0ba5977..59cf3b3 100644
--- a/block/qcow2.c
+++ b/block/qcow2.c
@@ -3942,6 +3942,15 @@  static ImageInfoSpecific *qcow2_get_specific_info(BlockDriverState *bs)
         spec_info->u.qcow2.data->encrypt = qencrypt;
     }
 
+    if (s->compress_format != -1) {
+        Qcow2Compress *qcompress = g_new0(Qcow2Compress, 1);
+        qcompress->format = s->compress_format;
+        qcompress->level = s->compress_level;
+        qcompress->has_level = true;
+        spec_info->u.qcow2.data->compress = qcompress;
+        spec_info->u.qcow2.data->has_compress = true;
+    }
+
     return spec_info;
 }
 
diff --git a/qapi/block-core.json b/qapi/block-core.json
index 9eb76df..9310715 100644
--- a/qapi/block-core.json
+++ b/qapi/block-core.json
@@ -68,6 +68,9 @@ 
 # @encrypt: details about encryption parameters; only set if image
 #           is encrypted (since 2.10)
 #
+# @compress: details about parameters for compressed clusters; only set if
+#            the compress format header extension is present (since 2.10)
+#
 # Since: 1.7
 ##
 { 'struct': 'ImageInfoSpecificQCow2',
@@ -76,7 +79,8 @@ 
       '*lazy-refcounts': 'bool',
       '*corrupt': 'bool',
       'refcount-bits': 'int',
-      '*encrypt': 'ImageInfoSpecificQCow2Encryption'
+      '*encrypt': 'ImageInfoSpecificQCow2Encryption',
+      '*compress': 'Qcow2Compress'
   } }
 
 ##