Message ID | 1408557576-14574-5-git-send-email-mreitz@redhat.com |
---|---|
State | New |
Headers | show |
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>
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
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 --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' } } ##
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(-)