[Libguestfs] [PATCH nbdkit 6/8] data, memory: Implement extents.
Richard W.M. Jones
rjones at redhat.com
Mon Mar 25 17:30:32 UTC 2019
On Sat, Mar 23, 2019 at 12:05:51PM -0500, Eric Blake wrote:
> On 3/20/19 5:11 PM, Richard W.M. Jones wrote:
> > These plugins are both based on the same sparse array structure which
> > supports a simple implementation of extents.
> > ---
>
> > +int
> > +sparse_array_extents (struct sparse_array *sa,
> > + uint32_t count, uint64_t offset,
> > + struct nbdkit_extents *extents)
> > +{
> > + uint32_t n, type;
> > + void *p;
> > +
> > + while (count > 0) {
> > + p = lookup (sa, offset, false, &n, NULL);
> > + if (n > count)
> > + n = count;
>
> Why are we clamping the information we return? I'd move this clamp...
It's a copy and paste from one of the previous sparse_array_*
functions in the same file. I agree that we should return the most
possible information and moving the clamp as you suggest is the way to
do that.
Rich.
> > +
> > + if (p == NULL)
> > + type = NBDKIT_EXTENT_HOLE | NBDKIT_EXTENT_ZERO;
> > + else
> > + type = 0; /* allocated data */
> > + if (nbdkit_add_extent (extents, offset, n, type) == -1)
> > + return -1;
>
> ...here, after we've recorded the maximum amount of information possible
> into the extents array. (We need the clamp to terminate the loop, but
> that doesn't mean we have to truncate our answer)
>
> > +
> > + count -= n;
> > + offset += n;
> > + }
> > +
> > + return 0;
> > +}
>
> Otherwise, looks good.
>
> --
> Eric Blake, Principal Software Engineer
> Red Hat, Inc. +1-919-301-3226
> Virtualization: qemu.org | libvirt.org
>
--
Richard Jones, Virtualization Group, Red Hat http://people.redhat.com/~rjones
Read my programming and virtualization blog: http://rwmj.wordpress.com
libguestfs lets you edit virtual machines. Supports shell scripting,
bindings from many languages. http://libguestfs.org
More information about the Libguestfs
mailing list