All of lore.kernel.org
 help / color / mirror / Atom feed
From: Kevin Wolf <kwolf@redhat.com>
To: Denis Plotnikov <dplotnikov@virtuozzo.com>
Cc: vsementsov@virtuozzo.com, den@virtuozzo.com,
	qemu-block@nongnu.org, armbru@redhat.com, qemu-devel@nongnu.org,
	mreitz@redhat.com
Subject: Re: [Qemu-devel] [PATCH v4 2/3] qcow2: rework the cluster compression routine
Date: Tue, 3 Sep 2019 15:59:48 +0200	[thread overview]
Message-ID: <20190903135948.GK4582@localhost.localdomain> (raw)
In-Reply-To: <20190828125654.10544-3-dplotnikov@virtuozzo.com>

Am 28.08.2019 um 14:56 hat Denis Plotnikov geschrieben:
> The patch allow to process image compression type defined
> in the image header and choose an appropriate method for
> image clusters (de)compression.
> 
> Signed-off-by: Denis Plotnikov <dplotnikov@virtuozzo.com>
> ---
>  block/qcow2-threads.c | 78 +++++++++++++++++++++++++++++++++++--------
>  1 file changed, 64 insertions(+), 14 deletions(-)
> 
> diff --git a/block/qcow2-threads.c b/block/qcow2-threads.c
> index 3b1e63fe41..14b5bd76fb 100644
> --- a/block/qcow2-threads.c
> +++ b/block/qcow2-threads.c
> @@ -73,8 +73,11 @@ typedef struct Qcow2CompressData {
>      Qcow2CompressFunc func;
>  } Qcow2CompressData;
>  
> +

Accidentally added newline?

>  /*
> - * qcow2_compress()
> + * qcow2_zlib_compress()
> + *
> + * Compress @src_size bytes of data using zlib compression method
>   *
>   * @dest - destination buffer, @dest_size bytes
>   * @src - source buffer, @src_size bytes
> @@ -83,8 +86,8 @@ typedef struct Qcow2CompressData {
>   *          -ENOMEM destination buffer is not enough to store compressed data
>   *          -EIO    on any other error
>   */
> -static ssize_t qcow2_compress(void *dest, size_t dest_size,
> -                              const void *src, size_t src_size)
> +static ssize_t qcow2_zlib_compress(void *dest, size_t dest_size,
> +                                   const void *src, size_t src_size)
>  {
>      ssize_t ret;
>      z_stream strm;
> @@ -119,19 +122,19 @@ static ssize_t qcow2_compress(void *dest, size_t dest_size,
>  }
>  
>  /*
> - * qcow2_decompress()
> + * qcow2_zlib_decompress()
>   *
>   * Decompress some data (not more than @src_size bytes) to produce exactly
> - * @dest_size bytes.
> + * @dest_size bytes using zlib compression method
>   *
>   * @dest - destination buffer, @dest_size bytes
>   * @src - source buffer, @src_size bytes
>   *
>   * Returns: 0 on success
> - *          -1 on fail
> + *          -EIO on fail
>   */
> -static ssize_t qcow2_decompress(void *dest, size_t dest_size,
> -                                const void *src, size_t src_size)
> +static ssize_t qcow2_zlib_decompress(void *dest, size_t dest_size,
> +                                     const void *src, size_t src_size)
>  {
>      int ret = 0;
>      z_stream strm;
> @@ -144,7 +147,7 @@ static ssize_t qcow2_decompress(void *dest, size_t dest_size,
>  
>      ret = inflateInit2(&strm, -12);
>      if (ret != Z_OK) {
> -        return -1;
> +        return -EIO;
>      }
>  
>      ret = inflate(&strm, Z_FINISH);
> @@ -154,7 +157,7 @@ static ssize_t qcow2_decompress(void *dest, size_t dest_size,
>           * @src buffer may be processed partly (because in qcow2 we know size of
>           * compressed data with precision of one sector)
>           */
> -        ret = -1;
> +        ret = -EIO;
>      }
>  
>      inflateEnd(&strm);
> @@ -189,20 +192,67 @@ qcow2_co_do_compress(BlockDriverState *bs, void *dest, size_t dest_size,
>      return arg.ret;
>  }
>  
> +/*
> + * qcow2_co_compress()
> + *
> + * Compress @src_size bytes of data using the compression
> + * method defined by the image compression type
> + *
> + * @dest - destination buffer, @dest_size bytes
> + * @src - source buffer, @src_size bytes
> + *
> + * Returns: 0 on success
> + *          a negative error code on fail

on failure

> + */
>  ssize_t coroutine_fn
>  qcow2_co_compress(BlockDriverState *bs, void *dest, size_t dest_size,
>                    const void *src, size_t src_size)
>  {
> -    return qcow2_co_do_compress(bs, dest, dest_size, src, src_size,
> -                                qcow2_compress);
> +    BDRVQcow2State *s = bs->opaque;
> +    Qcow2CompressFunc fn;
> +
> +    switch (s->compression_type) {
> +    case QCOW2_COMPRESSION_TYPE_ZLIB:
> +        fn = qcow2_zlib_compress;
> +        break;
> +
> +    default:
> +        return -ENOTSUP;
> +    }
> +
> +    return qcow2_co_do_compress(bs, dest, dest_size, src, src_size, fn);
>  }
>  
> +/*
> + * qcow2_co_decompress()
> + *
> + * Decompress some data (not more than @src_size bytes) to produce exactly
> + * @dest_size bytes using the compression method defined by the image
> + * compression type
> + *
> + * @dest - destination buffer, @dest_size bytes
> + * @src - source buffer, @src_size bytes
> + *
> + * Returns: 0 on success
> + *          a negative error code on fail

on failure

> + */
>  ssize_t coroutine_fn
>  qcow2_co_decompress(BlockDriverState *bs, void *dest, size_t dest_size,
>                      const void *src, size_t src_size)
>  {
> -    return qcow2_co_do_compress(bs, dest, dest_size, src, src_size,
> -                                qcow2_decompress);
> +    BDRVQcow2State *s = bs->opaque;
> +    Qcow2CompressFunc fn;
> +
> +    switch (s->compression_type) {
> +    case QCOW2_COMPRESSION_TYPE_ZLIB:
> +        fn = qcow2_zlib_decompress;
> +        break;
> +
> +    default:
> +        return -ENOTSUP;
> +    }
> +
> +    return qcow2_co_do_compress(bs, dest, dest_size, src, src_size, fn);
>  }

Kevin


  reply	other threads:[~2019-09-03 14:07 UTC|newest]

Thread overview: 9+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-08-28 12:56 [Qemu-devel] [PATCH v4 0/3] qcow2: add zstd cluster compression Denis Plotnikov
2019-08-28 12:56 ` [Qemu-devel] [PATCH v4 1/3] qcow2: introduce compression type feature Denis Plotnikov
2019-09-03 13:46   ` Kevin Wolf
2019-08-28 12:56 ` [Qemu-devel] [PATCH v4 2/3] qcow2: rework the cluster compression routine Denis Plotnikov
2019-09-03 13:59   ` Kevin Wolf [this message]
2019-08-28 12:56 ` [Qemu-devel] [PATCH v4 3/3] qcow2: add zstd cluster compression Denis Plotnikov
2019-09-03 14:12   ` Kevin Wolf
2019-09-04  6:17     ` Denis Plotnikov
2019-08-28 13:25 ` [Qemu-devel] [PATCH v4 0/3] " no-reply

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20190903135948.GK4582@localhost.localdomain \
    --to=kwolf@redhat.com \
    --cc=armbru@redhat.com \
    --cc=den@virtuozzo.com \
    --cc=dplotnikov@virtuozzo.com \
    --cc=mreitz@redhat.com \
    --cc=qemu-block@nongnu.org \
    --cc=qemu-devel@nongnu.org \
    --cc=vsementsov@virtuozzo.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.