Message ID | 20200813162935.210070-23-kwolf@redhat.com |
---|---|
State | New |
Headers | show |
Series | block/export: Add infrastructure and QAPI for block exports | expand |
On 13.08.20 18:29, Kevin Wolf wrote: > This adds a simple QMP command to query the list of block exports. > > Signed-off-by: Kevin Wolf <kwolf@redhat.com> > --- > qapi/block-export.json | 33 +++++++++++++++++++++++++++++++++ > block/export/export.c | 23 +++++++++++++++++++++++ > 2 files changed, 56 insertions(+) > > diff --git a/qapi/block-export.json b/qapi/block-export.json > index a067de2ba3..0b184bbd7c 100644 > --- a/qapi/block-export.json > +++ b/qapi/block-export.json > @@ -226,3 +226,36 @@ > ## > { 'command': 'block-export-del', > 'data': { 'id': 'str', '*mode': 'BlockExportRemoveMode' } } > + > +## > +# @BlockExportInfo: > +# > +# Information about a single block export. > +# > +# @id: The unique identifier for the block export > +# > +# @type: This field is returned only for compatibility reasons, it should > +# not be used (always returns 'unknown') Äh? I don’t understand. It looks like it definitely doesn’t always return “unknown”. Also, the “compatibility reasons” aren’t really immediately clear to me... :? Max
Am 19.08.2020 um 13:04 hat Max Reitz geschrieben: > On 13.08.20 18:29, Kevin Wolf wrote: > > This adds a simple QMP command to query the list of block exports. > > > > Signed-off-by: Kevin Wolf <kwolf@redhat.com> > > --- > > qapi/block-export.json | 33 +++++++++++++++++++++++++++++++++ > > block/export/export.c | 23 +++++++++++++++++++++++ > > 2 files changed, 56 insertions(+) > > > > diff --git a/qapi/block-export.json b/qapi/block-export.json > > index a067de2ba3..0b184bbd7c 100644 > > --- a/qapi/block-export.json > > +++ b/qapi/block-export.json > > @@ -226,3 +226,36 @@ > > ## > > { 'command': 'block-export-del', > > 'data': { 'id': 'str', '*mode': 'BlockExportRemoveMode' } } > > + > > +## > > +# @BlockExportInfo: > > +# > > +# Information about a single block export. > > +# > > +# @id: The unique identifier for the block export > > +# > > +# @type: This field is returned only for compatibility reasons, it should > > +# not be used (always returns 'unknown') > > Äh? > > I don’t understand. It looks like it definitely doesn’t always return > “unknown”. Also, the “compatibility reasons” aren’t really immediately > clear to me... :? Oops, this seems to be copied from BlockInfo and I forgot to change it... Kevin
diff --git a/qapi/block-export.json b/qapi/block-export.json index a067de2ba3..0b184bbd7c 100644 --- a/qapi/block-export.json +++ b/qapi/block-export.json @@ -226,3 +226,36 @@ ## { 'command': 'block-export-del', 'data': { 'id': 'str', '*mode': 'BlockExportRemoveMode' } } + +## +# @BlockExportInfo: +# +# Information about a single block export. +# +# @id: The unique identifier for the block export +# +# @type: This field is returned only for compatibility reasons, it should +# not be used (always returns 'unknown') +# +# @node-name: The node name of the block node that is exported +# +# @shutting-down: True if the export is shutting down (e.g. after a +# block-export-del command, but before the shutdown has +# completed) +# +# Since: 5.2 +## +{ 'struct': 'BlockExportInfo', + 'data': { 'id': 'str', + 'type': 'BlockExportType', + 'node-name': 'str', + 'shutting-down': 'bool' } } + +## +# @query-block-exports: +# +# Returns: A list of BlockExportInfo describing all block exports +# +# Since: 5.2 +## +{ 'command': 'query-block-exports', 'returns': ['BlockExportInfo'] } diff --git a/block/export/export.c b/block/export/export.c index 3cd448ba72..71d17bd440 100644 --- a/block/export/export.c +++ b/block/export/export.c @@ -272,3 +272,26 @@ void qmp_nbd_server_remove(const char *name, qmp_block_export_del(name, has_mode, mode, errp); } + +BlockExportInfoList *qmp_query_block_exports(Error **errp) +{ + BlockExportInfoList *head = NULL, **p_next = &head; + BlockExport *exp; + + QLIST_FOREACH(exp, &block_exports, next) { + BlockExportInfoList *entry = g_new0(BlockExportInfoList, 1); + BlockExportInfo *info = g_new(BlockExportInfo, 1); + *info = (BlockExportInfo) { + .id = g_strdup(exp->id), + .type = exp->drv->type, + .node_name = g_strdup(bdrv_get_node_name(blk_bs(exp->blk))), + .shutting_down = !exp->user_owned, + }; + + entry->value = info; + *p_next = entry; + p_next = &entry->next; + } + + return head; +}
This adds a simple QMP command to query the list of block exports. Signed-off-by: Kevin Wolf <kwolf@redhat.com> --- qapi/block-export.json | 33 +++++++++++++++++++++++++++++++++ block/export/export.c | 23 +++++++++++++++++++++++ 2 files changed, 56 insertions(+)