diff mbox

[4/4] qapi/block-core: Add "new" qcow2 options

Message ID 1408557576-14574-5-git-send-email-mreitz@redhat.com
State New
Headers show

Commit Message

Max Reitz Aug. 20, 2014, 5:59 p.m. UTC
qcow2 supports more than four options by now, add the new options
(overlap check mode and metadata cache size)

Signed-off-by: Max Reitz <mreitz@redhat.com>
---
 qapi/block-core.json | 79 +++++++++++++++++++++++++++++++++++++++++++++++++++-
 1 file changed, 78 insertions(+), 1 deletion(-)

Comments

Eric Blake Aug. 20, 2014, 7:36 p.m. UTC | #1
On 08/20/2014 11:59 AM, Max Reitz wrote:
> qcow2 supports more than four options by now, add the new options
> (overlap check mode and metadata cache size)
> 
> Signed-off-by: Max Reitz <mreitz@redhat.com>
> ---
>  qapi/block-core.json | 79 +++++++++++++++++++++++++++++++++++++++++++++++++++-
>  1 file changed, 78 insertions(+), 1 deletion(-)
> 

> +##
> +# @Qcow2OverlapCheckFlags
> +#
> +# Structure of flags for each metadata structure. Setting a field to 'true'
> +# makes qemu guard that structure against unintended overwriting. The default
> +# value is chosen according to the template given.
> +#
> +# @template: Specifies a template mode which can be adjusted using the other
> +#            flags, defaults to 'cached'
> +#

Might be worth mentioning the other fields by name, but that's minor.


> +{ 'union': 'Qcow2OverlapChecks',
> +  'discriminator': {},
> +  'data': { 'flags': 'Qcow2OverlapCheckFlags',
> +            'mode':  'Qcow2OverlapCheckMode' } }
> +

Slick :)  So patch 3/4 added a new commandline option
overlap-check.template=str which behaves identically to
overlap-check=str; the short form is the enum branch of this union, the
long form is the struct form.  The command line parser has to deal with
both options being given (and errors out if they don't match), while QMP
does not.

Reviewed-by: Eric Blake <eblake@redhat.com>
Max Reitz Aug. 20, 2014, 7:38 p.m. UTC | #2
On 20.08.2014 21:36, Eric Blake wrote:
> On 08/20/2014 11:59 AM, Max Reitz wrote:
>> qcow2 supports more than four options by now, add the new options
>> (overlap check mode and metadata cache size)
>>
>> Signed-off-by: Max Reitz <mreitz@redhat.com>
>> ---
>>   qapi/block-core.json | 79 +++++++++++++++++++++++++++++++++++++++++++++++++++-
>>   1 file changed, 78 insertions(+), 1 deletion(-)
>>
>> +##
>> +# @Qcow2OverlapCheckFlags
>> +#
>> +# Structure of flags for each metadata structure. Setting a field to 'true'
>> +# makes qemu guard that structure against unintended overwriting. The default
>> +# value is chosen according to the template given.
>> +#
>> +# @template: Specifies a template mode which can be adjusted using the other
>> +#            flags, defaults to 'cached'
>> +#
> Might be worth mentioning the other fields by name, but that's minor.

Well, there were so many and it would've just been "X: Prevent 
unintended writes to X".

>> +{ 'union': 'Qcow2OverlapChecks',
>> +  'discriminator': {},
>> +  'data': { 'flags': 'Qcow2OverlapCheckFlags',
>> +            'mode':  'Qcow2OverlapCheckMode' } }
>> +
> Slick :)  So patch 3/4 added a new commandline option
> overlap-check.template=str which behaves identically to
> overlap-check=str; the short form is the enum branch of this union, the
> long form is the struct form.  The command line parser has to deal with
> both options being given (and errors out if they don't match), while QMP
> does not.
>
> Reviewed-by: Eric Blake <eblake@redhat.com>

Thank you!

Max
Eric Blake Aug. 20, 2014, 7:45 p.m. UTC | #3
On 08/20/2014 01:38 PM, Max Reitz wrote:

>>> +# Structure of flags for each metadata structure. Setting a field to
>>> 'true'
>>> +# makes qemu guard that structure against unintended overwriting.
>>> The default
>>> +# value is chosen according to the template given.
>>> +#
>>> +# @template: Specifies a template mode which can be adjusted using
>>> the other
>>> +#            flags, defaults to 'cached'
>>> +#
>> Might be worth mentioning the other fields by name, but that's minor.
> 
> Well, there were so many and it would've just been "X: Prevent
> unintended writes to X".

Bike-shedding ahead: maybe avoid the duplication by listing things in a
list, such as:

# @template: #optional Specify the template that controls the defaults
for all other fields (defaults to 'cached')

# @main-header, @active-l1, @active-l2, ...: #optional Specify a
specific override of whether to prevent unintended writes to that data
section (defaults determined by @template)
diff mbox

Patch

diff --git a/qapi/block-core.json b/qapi/block-core.json
index fb74c56..a89cb49 100644
--- a/qapi/block-core.json
+++ b/qapi/block-core.json
@@ -1250,6 +1250,67 @@ 
   'data': { '*backing': 'BlockdevRef' } }
 
 ##
+# @Qcow2OverlapCheckMode
+#
+# General overlap check modes.
+#
+# @none:        Do not perform any checks
+#
+# @constant:    Perform only checks which can be done in constant time and
+#               without reading anything from disk
+#
+# @cached:      Perform only checks which can be done without reading anything
+#               from disk
+#
+# @all:         Perform all available overlap checks
+#
+# Since: 2.2
+##
+{ 'enum': 'Qcow2OverlapCheckMode',
+  'data': [ 'none', 'constant', 'cached', 'all' ] }
+
+##
+# @Qcow2OverlapCheckFlags
+#
+# Structure of flags for each metadata structure. Setting a field to 'true'
+# makes qemu guard that structure against unintended overwriting. The default
+# value is chosen according to the template given.
+#
+# @template: Specifies a template mode which can be adjusted using the other
+#            flags, defaults to 'cached'
+#
+# Since: 2.2
+##
+{ 'type': 'Qcow2OverlapCheckFlags',
+  'data': { '*template':       'Qcow2OverlapCheckMode',
+            '*main-header':    'bool',
+            '*active-l1':      'bool',
+            '*active-l2':      'bool',
+            '*refcount-table': 'bool',
+            '*refcount-block': 'bool',
+            '*snapshot-table': 'bool',
+            '*inactive-l1':    'bool',
+            '*inactive-l2':    'bool' } }
+
+##
+# @Qcow2OverlapChecks
+#
+# Specifies which metadata structures should be guarded against unintended
+# overwriting.
+#
+# @flags:   set of flags for separate specification of each metadata structure
+#           type
+#
+# @mode:    named mode which chooses a specific set of flags
+#
+# Since: 2.2
+##
+{ 'union': 'Qcow2OverlapChecks',
+  'discriminator': {},
+  'data': { 'flags': 'Qcow2OverlapCheckFlags',
+            'mode':  'Qcow2OverlapCheckMode' } }
+
+##
 # @BlockdevOptionsQcow2
 #
 # Driver specific block device options for qcow2.
@@ -1268,6 +1329,18 @@ 
 #                         should be issued on other occasions where a cluster
 #                         gets freed
 #
+# @overlap-check:         #optional which overlap checks to perform for writes
+#                         to the image, defaults to 'cached' (since 2.2)
+#
+# @cache-size:            #optional the maximum total size of the L2 table and
+#                         refcount block caches in bytes (since 2.2)
+#
+# @l2-cache-size:         #optional the maximum size of the L2 table cache in
+#                         bytes (since 2.2)
+#
+# @refcount-cache-size:   #optional the maximum size of the refcount block cache
+#                         in bytes (since 2.2)
+#
 # Since: 1.7
 ##
 { 'type': 'BlockdevOptionsQcow2',
@@ -1275,7 +1348,11 @@ 
   'data': { '*lazy-refcounts': 'bool',
             '*pass-discard-request': 'bool',
             '*pass-discard-snapshot': 'bool',
-            '*pass-discard-other': 'bool' } }
+            '*pass-discard-other': 'bool',
+            '*overlap-check': 'Qcow2OverlapChecks',
+            '*cache-size': 'int',
+            '*l2-cache-size': 'int',
+            '*refcount-cache-size': 'int' } }
 
 
 ##