[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-stable] [PATCH] qcow2: Fix qcow2_make_empty() with external da
From: |
Kevin Wolf |
Subject: |
Re: [Qemu-stable] [PATCH] qcow2: Fix qcow2_make_empty() with external data file |
Date: |
Mon, 29 Apr 2019 13:21:40 +0200 |
User-agent: |
Mutt/1.11.3 (2019-02-01) |
Am 29.04.2019 um 12:57 hat Kevin Wolf geschrieben:
> make_completely_empty() is an optimisated path for bdrv_make_empty()
> where completely new metadata is created inside the image file instead
> of going through all clusters and discarding them. For an external data
> file, however, we actually need to do discard operations on the data
> file; just overwriting the qcow2 file doesn't get rid of the data.
>
> The necessary slow path with an explicit discard operation already
> exists for other cases. Use it for external data files, too.
>
> Cc: address@hidden
> Signed-off-by: Kevin Wolf <address@hidden>
> ---
> block/qcow2.c | 3 ++-
> 1 file changed, 2 insertions(+), 1 deletion(-)
>
> diff --git a/block/qcow2.c b/block/qcow2.c
> index 7fbef97aab..097fde56f9 100644
> --- a/block/qcow2.c
> +++ b/block/qcow2.c
> @@ -4384,7 +4384,8 @@ static int qcow2_make_empty(BlockDriverState *bs)
>
> if (s->qcow_version >= 3 && !s->snapshots && !s->nb_bitmaps &&
> 3 + l1_clusters <= s->refcount_block_size &&
> - s->crypt_method_header != QCOW_CRYPT_LUKS) {
> + s->crypt_method_header != QCOW_CRYPT_LUKS &&
> + !has_data_file(bs)) {
> /* The following function only works for qcow2 v3 images (it
> * requires the dirty flag) and only as long as there are no
> * features that reserve extra clusters (such as snapshots,
Oops, I hadn't everything committed yet. I'll add a comment change as
well:
* LUKS header, or persistent bitmaps), because it completely
* empties the image. Furthermore, the L1 table and three
* additional clusters (image header, refcount table, one
- * refcount block) have to fit inside one refcount block. */
+ * refcount block) have to fit inside one refcount block. It
+ * only resets the image file, i.e. does not work with an
+ * external data file. */
return make_completely_empty(bs);
}
Kevin