On Fri, Aug 04, 2023 at 12:20:54PM +0100, Richard W.M. Jones wrote:
> > > Acked-by: Richard W.M. Jones <rjo...@redhat.com>
> > > 
> > > ... although I wonder if this might break something.  I think it's
> > > possible for an nbdkit plugin to return a zero length extent, for
> > > example if it has a simplistic internal model of regions of the disk.
> > > Since the client can still make progress if at least the total length
> > > of extents returned is > 0 I'm fairly sure this would work right now.
> > 
> > Like this:
> > 
> > $ cat extents.sh
> > case "$1" in
> >     get_size) echo 10M ;;
> >     pread) dd if=/dev/zero count=$3 iflag=count_bytes ;;
> >     can_extents) exit 0 ;;
> >     extents)
> >         echo "0 1M"
> >         echo "1M 0 hole,zero"
> >         echo "1M 9M"
> >         exit 0 ;;
> >     *) exit 2 ;;
> > esac
> > 
> > $ nbdinfo --map [ nbdkit sh ./extents.sh ] 
> >          0    10485760    0  data
> > 
> > I wonder if this breaks after this patch?
> 
> I looked at the code & it turns out that nbdkit ignores zero-length
> extents, and merges extents with the same type, so I think the above
> is actually sending a single 10M extent.
> 
> https://gitlab.com/nbdkit/nbdkit/-/blob/e94597fb99a86a38fcc0aea32c6102565c9bfd9d/server/extents.c#L158

Yep, I remember we spent a considerable amount of time on nbdkit
allowing plugins to throw whatever was most convenient for them at the
core code, but then santizing it so that our wire reply is
spec-compliant and as consolidated as possible.  I would have to write
a custom server (ie. a one-off hack to nbdkit) to actually send a
zero-length block status reply.  Right now, if you ask nbdkit for
block status with width zero, it responds with EINVAL failure; and for
the example server you gave, it does indeed merge into a single
extent.

Maybe we should tweak nbdkit to allow a zero-length status request
(aka let the plugin reply with as much as it wants), similar to how we
allow zero-length pread and pwrite requests, but that's a different
patch, and it still seems like the best response will be to either
return a non-zero extent or to just report success without reporting
any extents.

-- 
Eric Blake, Principal Software Engineer
Red Hat, Inc.
Virtualization:  qemu.org | libguestfs.org
_______________________________________________
Libguestfs mailing list
Libguestfs@redhat.com
https://listman.redhat.com/mailman/listinfo/libguestfs

Reply via email to