On 4/9/20 3:36 AM, Richard W.M. Jones wrote:
 The plugin should now support pre-fetch and extents, although most
ISO
 images will be non-sparse so extents probably isn't that useful. 
True, but it can't hurt ;)
 ---
   plugins/iso/Makefile.am |  4 +-
   plugins/iso/iso.c       | 99 +++++++++++++++++++----------------------
   2 files changed, 48 insertions(+), 55 deletions(-)
  
 @@ -193,25 +195,43 @@ iso_get_ready (void)
   static void *
   iso_open (int readonly)
   {
 -  return NBDKIT_HANDLE_NOT_NEEDED;
 +  struct fileops *fops;
 +  int fd;
 +
 +  fops = malloc (sizeof *fops);
 +  if (fops == NULL) {
 +    nbdkit_error ("malloc: %m");
 +    return NULL;
 +  }
 +
 +  /* Copy the fd because fileops needs to have its own file descriptor. */
 +  fd = dup (iso_fd); 
We use system(), but only during .get_ready().  I don't see any places 
where we fork a child after the first .open, so not setting FD_CLOEXEC 
here won't leak into the next client's connection (if we ever add later 
fork()s, we'd have to use fcntl(F_DUPFD_CLOEXEC) instead); but maybe a 
comment to that effect wouldn't hurt (since we already audited which fds 
need CLOEXEC atomically set, seeing the comment will speed up any re-audit).
You are changing from one fd shared among all clients to one fd per 
client, but I don't see that as being a severe problem (the file plugin 
was one fd per client).
   static struct nbdkit_plugin plugin = {
     .name              = "iso",
     .longname          = "nbdkit iso plugin",
 @@ -259,11 +250,11 @@ static struct nbdkit_plugin plugin = {
     .magic_config_key  = "dir",
     .get_ready         = iso_get_ready,
     .open              = iso_open,
 -  .get_size          = iso_get_size,
 +  .close             = iso_close,
     .can_multi_conn    = iso_can_multi_conn, 
Part of me wondered if .can_multi_conn be set for all read-only clients, 
but without making it mandatory on read-write clients.  But I'm fine 
with keeping it as something the plugin must do itself.
Looks good.
-- 
Eric Blake, Principal Software Engineer
Red Hat, Inc.           +1-919-301-3226
Virtualization:  
qemu.org | 
libvirt.org