On 10/2/20 8:20 AM, Eric Blake wrote:
Use the just-added nbd_opt_list_meta_context() API to give more
details about each export (matching what 'qemu-nbd --list' already
does). Note that this requires some shuffling: listing meta exports
requires being in opt mode, but is easiest to do in list_one_export(),
which requires setting opt_mode in more code paths, and deferring
ready mode until the last possible minute during get_content().
As written, the code displays the list in reverse order from how the
server presented it, thanks to my use of a simple linked list. We
could use a different data type if we don't like the data being
reversed, although the information being presented really is a set
with no inherent meaning to its presentation order.
---
@@ -368,8 +396,15 @@ list_one_export (struct nbd_handle *nbd, const
char *desc,
int can_cache, can_df, can_fast_zero, can_flush, can_fua,
can_multi_conn, can_trim, can_zero;
int64_t block_minimum, block_preferred, block_maximum;
+ struct context_list *contexts = NULL;
+ bool show_context = false;
/* Collect the metadata we are going to display. */
+ if (nbd_aio_is_negotiating (nbd) &&
+ nbd_opt_info (nbd) == -1) {
+ fprintf (stderr, "%s\n", nbd_get_error ());
+ exit (EXIT_FAILURE);
+ }
For the record: this failed on a server with legacy "newstyle" protocol
(nbdkit --mask-handshake=0) - such a server lacks nbd_opt_info support,
and you HAVE to use nbd_opt_go to get size and other details. But when
I fixed this line, it in turn flushed out an assertion failure present
since 1.4 (now fixed) where nbd_opt_go() on a legacy newstyle accessed
uninitialized memory, and nbd_aio_opt_go() could leak resources, because
of a forgotten completion callback invocation.
--
Eric Blake, Principal Software Engineer
Red Hat, Inc. +1-919-301-3226
Virtualization:
qemu.org |
libvirt.org