Eric Blake <ebl...@redhat.com> writes: > Allow the server to expose an additional metacontext to be requested > by savvy clients. qemu-nbd adds a new option -A to expose the > qemu:allocation-depth metacontext through NBD_CMD_BLOCK_STATUS; this > can also be set via QMP when using block-export-add. > > qemu as client can be hacked into viewing this new context by using > the now-misnamed x-dirty-bitmap option when creating an NBD blockdev > (even though our x- naming means we could rename it, I did not think > it worth breaking back-compat of tools that have been using it while > waiting for a better solution). It is worth noting the decoding of > how such context information will appear in 'qemu-img map > --output=json': > > NBD_STATE_DEPTH_UNALLOC => "zero":false, "data":true > NBD_STATE_DEPTH_LOCAL => "zero":false, "data":false > NBD_STATE_DEPTH_BACKING => "zero":true, "data":true > > libnbd as client is probably a nicer way to get at the information > without having to decipher such hacks in qemu as client. ;) > > Signed-off-by: Eric Blake <ebl...@redhat.com> > Message-Id: <20200930121105.667049-6-ebl...@redhat.com> > Reviewed-by: Vladimir Sementsov-Ogievskiy <vsement...@virtuozzo.com> > [eblake: comment tweak suggested by Vladimir] > Signed-off-by: Eric Blake <ebl...@redhat.com> > --- [...] > diff --git a/qapi/block-core.json b/qapi/block-core.json > index 3758ea991269..249bd434f4eb 100644 > --- a/qapi/block-core.json > +++ b/qapi/block-core.json > @@ -3882,9 +3882,12 @@ > # > # @tls-creds: TLS credentials ID > # > -# @x-dirty-bitmap: A "qemu:dirty-bitmap:NAME" string to query in place of > +# @x-dirty-bitmap: A metacontext name such as "qemu:dirty-bitmap:NAME" or
What is a "metacontext"? Aside: nbd.h spells it "meta context". The two spellings suggest different meanings to me. Using meta- as a prefix modifies the prefixed word, as in metadata (data that provides information about other data). Separated by space, meta becomes a noun. None of its common meanings seem to apply here. Recommend to pick an appropriate one of "metacontext", "meta-context", "meta context", and stick to it. > +# "qemu:allocation-depth" to query in place of the > # traditional "base:allocation" block status (see > -# NBD_OPT_LIST_META_CONTEXT in the NBD protocol) (since 3.0) > +# NBD_OPT_LIST_META_CONTEXT in the NBD protocol; and > +# yes, naming this option x-context would have made > +# more sense) (since 3.0) > # > # @reconnect-delay: On an unexpected disconnect, the nbd client tries to > # connect again until succeeding or encountering a serious > diff --git a/qapi/block-export.json b/qapi/block-export.json > index 65804834d905..524cd3a94400 100644 > --- a/qapi/block-export.json > +++ b/qapi/block-export.json > @@ -78,11 +78,15 @@ > # NBD client can use NBD_OPT_SET_META_CONTEXT with > # "qemu:dirty-bitmap:NAME" to inspect the bitmap. (since 4.0) > # > +# @alloc: Also export the allocation map for @device, so the NBD client > +# can use NBD_OPT_SET_META_CONTEXT with "qemu:allocation-depth" > +# to inspect allocation details. (since 5.2) > +# > # Since: 5.0 > ## > { 'struct': 'BlockExportOptionsNbd', > 'data': { '*name': 'str', '*description': 'str', > - '*bitmap': 'str' } } > + '*bitmap': 'str', '*alloc': 'bool' } } > > ## > # @NbdServerAddOptions: [...]