qemu-block
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Qemu-block] [PATCH] qcow2: Fix qcow2_make_empty() with external dat


From: Kevin Wolf
Subject: Re: [Qemu-block] [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



reply via email to

[Prev in Thread] Current Thread [Next in Thread]