diff mbox

[02/27] block/qapi: Add qcow2 create options to schema

Message ID 20180208192328.16550-3-kwolf@redhat.com (mailing list archive)
State New, archived
Headers show

Commit Message

Kevin Wolf Feb. 8, 2018, 7:23 p.m. UTC
Signed-off-by: Kevin Wolf <kwolf@redhat.com>
---
 qapi/block-core.json | 45 ++++++++++++++++++++++++++++++++++++++++++++-
 1 file changed, 44 insertions(+), 1 deletion(-)

Comments

Eric Blake Feb. 8, 2018, 11:14 p.m. UTC | #1
On 02/08/2018 01:23 PM, Kevin Wolf wrote:
> Signed-off-by: Kevin Wolf <kwolf@redhat.com>
> ---
>   qapi/block-core.json | 45 ++++++++++++++++++++++++++++++++++++++++++++-
>   1 file changed, 44 insertions(+), 1 deletion(-)
> 
> diff --git a/qapi/block-core.json b/qapi/block-core.json
> index b59b1430bb..aade602a04 100644
> --- a/qapi/block-core.json
> +++ b/qapi/block-core.json
> @@ -3338,6 +3338,49 @@
>   { 'command': 'blockdev-del', 'data': { 'node-name': 'str' } }
>   
>   ##
> +# @BlockdevQcow2Version:
> +#
> +# @v2:  The original QCOW2 format as introduced in qemu 0.10 (version 2)
> +# @v3:  The extended QCOW2 format as introduced in qemu 1.1 (version 3)
> +#
> +# Since: 2.12
> +##
> +{ 'enum': 'BlockdevQcow2Version',
> +  'data': [ 'v2', 'v3' ] }

Yes, I think that turns out nicer.

> +
> +
> +##
> +# @BlockdevCreateOptionsQcow2:
> +#
> +# Driver specific image creation options for qcow2.
> +#
> +# @file             Node to create the image format on
> +# @size             Size of the virtual disk in bytes
> +# @version          Compatibility level (default: v3)
> +# @backing-file     File name of the backing file if a backing file
> +#                   should be used

Do we need an explicit comment that the QMP command does NOT open this 
file (so much as this being the string recorded in the metadata header), 
but that the caller is expected to later connect a node visiting the 
backing file to this node after the create has completed?  Or is that 
more for adding later in the QMP command that uses the overall union 
type (as the same rule will apply to multiple formats, not just qcow2 - 
the create operation is NOT creating the backing chain, but just 
formatting one element that will later be hooked into the chain).

> +# @backing-fmt      Name of the block driver to use for the backing file
> +# @encrypt          Encryption options if the image should be encrypted
> +# @cluster-size     qcow2 cluster size in bytes (default: 65536)
> +# @preallocation    Preallocation mode for the new image (default: off)
> +# @lazy-refcounts   True if refcounts may be updated lazily (default: off)
> +# @refcount-bits    Width of reference counts in bits (default: 16)
> +#
> +# Since: 2.12
> +##
> +{ 'struct': 'BlockdevCreateOptionsQcow2',
> +  'data': { 'file':             'BlockdevRef',
> +            'size':             'size',
> +            '*version':         'BlockdevQcow2Version',
> +            '*backing-file':    'str',
> +            '*backing-fmt':     'BlockdevDriver',
> +            '*encrypt':         'QCryptoBlockCreateOptions',
> +            '*cluster-size':    'size',
> +            '*preallocation':   'PreallocMode',
> +            '*lazy-refcounts':  'bool',
> +            '*refcount-bits':   'int' } }

Looks reasonable, and matches what qemu-img create -f qcow2 can do (the 
obvious differences of '-' in QMP instead of '_' in qemu-img -o spelling 
is fine).

Reviewed-by: Eric Blake <eblake@redhat.com>
Max Reitz Feb. 9, 2018, 1:36 p.m. UTC | #2
On 2018-02-08 20:23, Kevin Wolf wrote:
> Signed-off-by: Kevin Wolf <kwolf@redhat.com>
> ---
>  qapi/block-core.json | 45 ++++++++++++++++++++++++++++++++++++++++++++-
>  1 file changed, 44 insertions(+), 1 deletion(-)

Reviewed-by: Max Reitz <mreitz@redhat.com>
diff mbox

Patch

diff --git a/qapi/block-core.json b/qapi/block-core.json
index b59b1430bb..aade602a04 100644
--- a/qapi/block-core.json
+++ b/qapi/block-core.json
@@ -3338,6 +3338,49 @@ 
 { 'command': 'blockdev-del', 'data': { 'node-name': 'str' } }
 
 ##
+# @BlockdevQcow2Version:
+#
+# @v2:  The original QCOW2 format as introduced in qemu 0.10 (version 2)
+# @v3:  The extended QCOW2 format as introduced in qemu 1.1 (version 3)
+#
+# Since: 2.12
+##
+{ 'enum': 'BlockdevQcow2Version',
+  'data': [ 'v2', 'v3' ] }
+
+
+##
+# @BlockdevCreateOptionsQcow2:
+#
+# Driver specific image creation options for qcow2.
+#
+# @file             Node to create the image format on
+# @size             Size of the virtual disk in bytes
+# @version          Compatibility level (default: v3)
+# @backing-file     File name of the backing file if a backing file
+#                   should be used
+# @backing-fmt      Name of the block driver to use for the backing file
+# @encrypt          Encryption options if the image should be encrypted
+# @cluster-size     qcow2 cluster size in bytes (default: 65536)
+# @preallocation    Preallocation mode for the new image (default: off)
+# @lazy-refcounts   True if refcounts may be updated lazily (default: off)
+# @refcount-bits    Width of reference counts in bits (default: 16)
+#
+# Since: 2.12
+##
+{ 'struct': 'BlockdevCreateOptionsQcow2',
+  'data': { 'file':             'BlockdevRef',
+            'size':             'size',
+            '*version':         'BlockdevQcow2Version',
+            '*backing-file':    'str',
+            '*backing-fmt':     'BlockdevDriver',
+            '*encrypt':         'QCryptoBlockCreateOptions',
+            '*cluster-size':    'size',
+            '*preallocation':   'PreallocMode',
+            '*lazy-refcounts':  'bool',
+            '*refcount-bits':   'int' } }
+
+##
 # @BlockdevCreateNotSupported:
 #
 # This is used for all drivers that don't support creating images.
@@ -3380,7 +3423,7 @@ 
       'null-aio':       'BlockdevCreateNotSupported',
       'null-co':        'BlockdevCreateNotSupported',
       'parallels':      'BlockdevCreateNotSupported',
-      'qcow2':          'BlockdevCreateNotSupported',
+      'qcow2':          'BlockdevCreateOptionsQcow2',
       'qcow':           'BlockdevCreateNotSupported',
       'qed':            'BlockdevCreateNotSupported',
       'quorum':         'BlockdevCreateNotSupported',