[Libguestfs] [PATCH nbdkit] server: Pass the export name through filter .open calls.
Eric Blake
eblake at redhat.com
Wed Jul 22 03:51:05 UTC 2020
On 7/21/20 7:41 PM, Eric Blake wrote:
>> @@ -148,7 +166,7 @@ ext2_prepare (struct nbdkit_next_ops *next_ops,
>> void *nxdata, void *handle,
>> struct ext2_inode inode;
>> int64_t r;
>> CLEANUP_FREE char *name = NULL;
>> - const char *fname = file ?: nbdkit_export_name ();
>> + const char *fname = file ?: h->exportname;
>
> Hmm - we already pass the same 'readonly' state to filter's .prepare,
> but not to backend_prepare(), which has to reconstruct it. Would it be
> easier to also change the signature of backend_prepare() to take both
> the original readonly and exportname passed to backend_open(), rather
> than making the filter have to save it off in the filter? It looks like
> protocol-handshake.c is the only caller, and still has everything in
> scope at the time.
Nope, we can't. It's because the sequence is:
backend_open("clientname")
outer_filter.open("clientname")
next_open("outername")
inner_filter.open("outername")
next_open("innername")
plugin.open("innername")
backend_prepare()
backend_prepare()
backend_prepare()
plugin.prepare()
inner_filter.prepare()
outer_filter.prepare()
while protocol-handshake.c has the same "clientname" to pass to both
backend_open() and backend_prepare(), the outer-to-inner order of .open
is (intentionally) opposite the inner-to-outer order of .prepare, and
the name passed to plugin.open has indeed left scope. Unless we want
backend.c to start storing the name passed into backend_open().
>
>> +++ b/filters/log/log.c
>> @@ -227,11 +227,12 @@ output_return (struct handle *h, const char
>> *act, uint64_t id, int r, int *err)
>> /* Open a connection. */
>> static void *
>> -log_open (nbdkit_next_open *next, void *nxdata, int readonly)
>> +log_open (nbdkit_next_open *next, void *nxdata,
>> + int readonly, const char *exportname)
>> {
>> struct handle *h;
>> - if (next (nxdata, readonly) == -1)
>> + if (next (nxdata, readonly, exportname) == -1)
>> return NULL;
>
> Pre-existing - the log filter should include the exportname somewhere in
> its output log. Well, nothing like the present to fix it ;)
I did that in the meantime, so you'll need a slight rebase.
--
Eric Blake, Principal Software Engineer
Red Hat, Inc. +1-919-301-3226
Virtualization: qemu.org | libvirt.org
More information about the Libguestfs
mailing list