[Libguestfs] [PATCH nbdkit 5/6] cow: Implement efficient trimming support.

Eric Blake
Wed, 03 Feb 2021 21:32:20 -0000

On 1/26/21 3:51 PM, Richard W.M. Jones wrote:
> By storing an extra bit in the overlay bitmap we can mark when whole
> blocks have been trimmed.  This allows us to match a feature of qcow2
> (zero clusters).
>
> In theory we could punch holes in the overlay to save a bit of disk
> space.
> ---
>  filters/cow/blk.h |   4 ++
>  filters/cow/blk.c | 106 +++++++++++++++++++++++++++++++---------------
>  filters/cow/cow.c |  75 +++++++++++++++++++++++++++++++-
>  3 files changed, 149 insertions(+), 36 deletions(-)

> +++ b/filters/cow/cow.c
> @@ -150,7 +150,7 @@ cow_can_write (struct nbdkit_next_ops *next_ops, void
*nxdata, void *handle)

> +/* Trim data. */
> +static int
> +cow_trim (struct nbdkit_next_ops *next_ops, void *nxdata,
> +          void *handle, uint32_t count, uint64_t offset, uint32_t flags,
> +          int *err)
> +{
> +  CLEANUP_FREE uint8_t *block = NULL;
> +  uint64_t blknum, blkoffs;
> +  int r;
> +
> +  if (!IS_ALIGNED (count | offset, BLKSIZE)) {
> +    block = malloc (BLKSIZE);
> +    if (block == NULL) {
> +      *err = errno;
> +      nbdkit_error ("malloc: %m");
> +      return -1;
> +    }
> +  }

Technically, we could leave the unallocated portions unchanged rather
than forcing it to read as zero.  Maybe it's worth a command-line option
- some users want security (no stale data can leak) while others want
speed (no time wasted on read-modify-write).

Overall, the series looks good (and yes, I know you pushed before my
review, which turned out fine).

--
Eric Blake, Principal Software Engineer
Red Hat, Inc.           +1-919-301-3226
Virtualization:  qemu.org | libvirt.org