diff mbox series

[RFC,22/22] block/export: Add query-block-exports

Message ID 20200813162935.210070-23-kwolf@redhat.com
State New, archived
Headers show
Series block/export: Add infrastructure and QAPI for block exports | expand

Commit Message

Kevin Wolf Aug. 13, 2020, 4:29 p.m. UTC
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(+)

Comments

Max Reitz Aug. 19, 2020, 11:04 a.m. UTC | #1
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
Kevin Wolf Aug. 19, 2020, 12:04 p.m. UTC | #2
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 mbox series

Patch

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;
+}