[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [PATCH for-5.1 1/2] qcow2: Implement v2 zero writes with discard if
From: |
Nir Soffer |
Subject: |
Re: [PATCH for-5.1 1/2] qcow2: Implement v2 zero writes with discard if possible |
Date: |
Mon, 20 Jul 2020 17:50:16 +0300 |
On Mon, Jul 20, 2020 at 4:18 PM Kevin Wolf <kwolf@redhat.com> wrote:
>
> qcow2 version 2 images don't support the zero flag for clusters, so for
> write_zeroes requests, we return -ENOTSUP and get explicit zero buffer
> writes. If the image doesn't have a backing file, we can do better: Just
> discard the respective clusters.
>
> This is relevant for 'qemu-img convert -O qcow2 -n', where qemu-img has
> to assume that the existing target image may contain any data, so it has
> to write zeroes. Without this patch, this results in a fully allocated
> target image, even if the source image was empty.
>
> Reported-by: Nir Soffer <nsoffer@redhat.com>
> Signed-off-by: Kevin Wolf <kwolf@redhat.com>
> ---
> block/qcow2-cluster.c | 9 ++++++++-
> 1 file changed, 8 insertions(+), 1 deletion(-)
>
> diff --git a/block/qcow2-cluster.c b/block/qcow2-cluster.c
> index 4b5fc8c4a7..a677ba9f5c 100644
> --- a/block/qcow2-cluster.c
> +++ b/block/qcow2-cluster.c
> @@ -1797,8 +1797,15 @@ int qcow2_cluster_zeroize(BlockDriverState *bs,
> uint64_t offset,
> assert(QEMU_IS_ALIGNED(end_offset, s->cluster_size) ||
> end_offset >= bs->total_sectors << BDRV_SECTOR_BITS);
>
> - /* The zero flag is only supported by version 3 and newer */
> + /*
> + * The zero flag is only supported by version 3 and newer. However, if we
> + * have no backing file, we can resort to discard in version 2.
> + */
> if (s->qcow_version < 3) {
> + if (!bs->backing) {
> + return qcow2_cluster_discard(bs, offset, bytes,
> + QCOW2_DISCARD_REQUEST, false);
> + }
> return -ENOTSUP;
> }
Looks good to me.
>
> --
> 2.25.4
>