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

_______________________________________________
Libguestfs mailing list
[email protected]
https://www.redhat.com/mailman/listinfo/libguestfs

Reply via email to