All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Daniel P. Berrange" <berrange@redhat.com>
To: Peter Lieven <pl@kamp.de>
Cc: Kevin Wolf <kwolf@redhat.com>,
	qemu-block@nongnu.org, qemu-devel@nongnu.org, lersek@redhat.com,
	den@openvz.org, mreitz@redhat.com, eblake@redhat.com
Subject: Re: [Qemu-devel] [PATCH V2 5/8] block/qcow2: read and write the compress format extension
Date: Thu, 13 Jul 2017 15:07:11 +0100	[thread overview]
Message-ID: <20170713140711.GO4011@redhat.com> (raw)
In-Reply-To: <1f4ca3cc-b17b-b577-f5a7-5d550c387cb5@kamp.de>

On Thu, Jul 13, 2017 at 04:03:47PM +0200, Peter Lieven wrote:
> Am 13.07.2017 um 16:00 schrieb Daniel P. Berrange:
> > On Thu, Jul 13, 2017 at 03:49:09PM +0200, Peter Lieven wrote:
> > > Am 13.07.2017 um 11:21 schrieb Daniel P. Berrange:
> > > > On Thu, Jul 13, 2017 at 10:44:53AM +0200, Peter Lieven wrote:
> > > > > Am 10.07.2017 um 15:55 schrieb Daniel P. Berrange:
> > > > > > On Mon, Jul 10, 2017 at 03:52:18PM +0200, Kevin Wolf wrote:
> > > > > > > Am 10.07.2017 um 15:44 hat Daniel P. Berrange geschrieben:
> > > > > > > > On Mon, Jul 10, 2017 at 03:34:59PM +0200, Kevin Wolf wrote:
> > > > > > > > > Am 10.07.2017 um 15:29 hat Peter Lieven geschrieben:
> > > > > > > > > > Am 10.07.2017 um 15:25 schrieb Kevin Wolf:
> > > > > > > > > > > Am 29.06.2017 um 12:57 hat Peter Lieven geschrieben:
> > > > > > > > > > > > we now read the extension on open and write it on update, but
> > > > > > > > > > > > do not yet use it.
> > > > > > > > > > > > 
> > > > > > > > > > > > Signed-off-by: Peter Lieven <pl@kamp.de>
> > > > > > > > > > > > ---
> > > > > > > > > > > >     block/qcow2.c | 100 ++++++++++++++++++++++++++++++++++++++++++++++++++--------
> > > > > > > > > > > >     block/qcow2.h |  23 +++++++++++---
> > > > > > > > > > > >     2 files changed, 104 insertions(+), 19 deletions(-)
> > > > > > > > > > > > 
> > > > > > > > > > > > diff --git a/block/qcow2.c b/block/qcow2.c
> > > > > > > > > > > > index 308121a..39a8afc 100644
> > > > > > > > > > > > --- a/block/qcow2.c
> > > > > > > > > > > > +++ b/block/qcow2.c
> > > > > > > > > > > > @@ -63,6 +63,7 @@ typedef struct {
> > > > > > > > > > > >     #define  QCOW2_EXT_MAGIC_END 0
> > > > > > > > > > > >     #define  QCOW2_EXT_MAGIC_BACKING_FORMAT 0xE2792ACA
> > > > > > > > > > > >     #define  QCOW2_EXT_MAGIC_FEATURE_TABLE 0x6803f857
> > > > > > > > > > > > +#define  QCOW2_EXT_MAGIC_COMPRESS_FORMAT 0xC03183A3
> > > > > > > > > > > >     static int qcow2_probe(const uint8_t *buf, int buf_size, const char *filename)
> > > > > > > > > > > >     {
> > > > > > > > > > > > @@ -76,6 +77,26 @@ static int qcow2_probe(const uint8_t *buf, int buf_size, const char *filename)
> > > > > > > > > > > >             return 0;
> > > > > > > > > > > >     }
> > > > > > > > > > > > +static int qcow2_compress_format_from_name(char *fmt)
> > > > > > > > > > > > +{
> > > > > > > > > > > > +    if (!fmt || !fmt[0]) {
> > > > > > > > > > > > +        return QCOW2_COMPRESS_ZLIB_COMPAT;
> > > > > > > > > > > > +    } else if (g_str_equal(fmt, "zlib")) {
> > > > > > > > > > > > +        return QCOW2_COMPRESS_ZLIB;
> > > > > > > > > > > > +    } else {
> > > > > > > > > > > > +        return -EINVAL;
> > > > > > > > > > > > +    }
> > > > > > > > > > > > +}
> > > > > > > > > > > It might make sense to allow specifying the old compression format in
> > > > > > > > > > > the compression header. But I'm not so sure about using the empty string
> > > > > > > > > > > rather than a proper name for it, and even less about not documenting
> > > > > > > > > > > it.
> > > > > > > > > > The old format is used if and only if the compression header is absent.
> > > > > > > > > > It makes no sense to write a header and use the old format. The old
> > > > > > > > > > settings are suboptimal and old versions can't open a qcow2 with a
> > > > > > > > > > compression header anyway.
> > > > > > > > > Your code allows an empty string in the header extension. If you don't
> > > > > > > > > want it there, you need to reject it.
> > > > > > > > This is a good reason to use the QAPI schema to parse the create options
> > > > > > > > instead of doing it using qemu_opts - the QAPI schema will generate correct
> > > > > > > > code to parse & validate enum values
> > > > > > > I'd really like to see QAPI used for bdrv_create(), but here we're in
> > > > > > > the bdrv_open() path and parsing qcow2 headers. So either way this one
> > > > > > > specifically wouldn't be fixed.
> > > > > > Sorry, yes, I was getting mixed up in the two different patches with
> > > > > > similar bits of code.
> > > > > > 
> > > > > > We could still replace the qcow2_compress_format_from_name() method
> > > > > > though with a call to the qapi_enum_parse() passing in the
> > > > > > 'QcowCompressFormat_lookup' table.
> > > > > Can you advise how exactly I would do that? Sorry, but this is new stuff
> > > > > for me.
> > > > In your line of code:
> > > > 
> > > >             s->compress_format_id =
> > > >                  qcow2_compress_format_from_name(s->compress_format.name);
> > > > 
> > > > Instead do
> > > > 
> > > >              s->compress_format_id =
> > > >                  qapi_enum_parse(QcowCompressFormat_lookup, s->compress_format.name);
> > > > 
> > > > 
> > > > The 'QcowCompressFormat_lookup' symbol is a global variable that is an
> > > > array of strings, automatically created from the 'enum' you define in
> > > > the QAPI schema.
> > > Is it possible to limit the valid integer values for an integer in the QAPI specification?
> > > 
> > > I would like to do that for the compress.level stuff.
> > Not that I know of.
> 
> If I specify an enum, what values are assigned to them? I am thinking of
> specifying an enum {0, 1, 2, 3, 4, 5, 6, 7, 8, 9} for the valid
> compress levels of zlib.

It should assume enum values starting from zero, but I think that is not
considered ABI from QAPI POV. IOW, you shouldn't persist the enum values
anywhere - only the enum string representation is considered ABI stable.

Also you can't have enum string names starting with a digit. So you would
need enum {level0, level1, level2, etc.... }, and store the string
'level0', etc in the qcow2 header if you went this way. I think this is
kind of ugly compared to just using an int and doing range checks at time
of use.


Regards,
Daniel
-- 
|: https://berrange.com      -o-    https://www.flickr.com/photos/dberrange :|
|: https://libvirt.org         -o-            https://fstop138.berrange.com :|
|: https://entangle-photo.org    -o-    https://www.instagram.com/dberrange :|

  reply	other threads:[~2017-07-13 14:07 UTC|newest]

Thread overview: 50+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-06-29 10:57 [Qemu-devel] [PATCH V2 0/8] add Qcow2 compress format extension Peter Lieven
2017-06-29 10:57 ` [Qemu-devel] [PATCH V2 1/8] docs: add compress format extension to qcow2 spec Peter Lieven
2017-07-10 12:58   ` Kevin Wolf
2017-07-10 13:27     ` Peter Lieven
2017-07-10 13:50       ` Kevin Wolf
2017-07-10 14:31         ` Eric Blake
2017-06-29 10:57 ` [Qemu-devel] [PATCH V2 2/8] qapi: add compress parameters to Qcow2 Blockdev options Peter Lieven
2017-07-10 13:10   ` Kevin Wolf
2017-07-10 13:24     ` Peter Lieven
2017-07-10 13:27       ` Daniel P. Berrange
2017-07-10 13:30       ` Kevin Wolf
2017-07-10 13:32         ` Peter Lieven
2017-07-13  8:45         ` Peter Lieven
2017-07-13  8:52           ` Kevin Wolf
2017-07-13  9:18             ` Daniel P. Berrange
2017-06-29 10:57 ` [Qemu-devel] [PATCH V2 3/8] block/qcow2: parse compress create options Peter Lieven
2017-07-10 13:52   ` Daniel P. Berrange
2017-06-29 10:57 ` [Qemu-devel] [PATCH V2 4/8] qemu-img: add documentation for compress settings Peter Lieven
2017-07-10 13:21   ` Kevin Wolf
2017-06-29 10:57 ` [Qemu-devel] [PATCH V2 5/8] block/qcow2: read and write the compress format extension Peter Lieven
2017-07-10 13:25   ` Kevin Wolf
2017-07-10 13:29     ` Peter Lieven
2017-07-10 13:34       ` Kevin Wolf
2017-07-10 13:44         ` Daniel P. Berrange
2017-07-10 13:46           ` Peter Lieven
2017-07-10 13:58             ` Daniel P. Berrange
2017-07-10 13:52           ` Kevin Wolf
2017-07-10 13:55             ` Daniel P. Berrange
2017-07-13  8:44               ` Peter Lieven
2017-07-13  9:21                 ` Daniel P. Berrange
2017-07-13 13:49                   ` Peter Lieven
2017-07-13 14:00                     ` Daniel P. Berrange
2017-07-13 14:03                       ` Peter Lieven
2017-07-13 14:07                         ` Daniel P. Berrange [this message]
2017-07-13 14:18                           ` Peter Lieven
2017-07-13 14:58                             ` Daniel P. Berrange
2017-07-13 15:00                               ` Peter Lieven
2017-07-13 15:01                                 ` Daniel P. Berrange
2017-07-13 15:02                                   ` Peter Lieven
2017-07-13 15:06                                     ` Daniel P. Berrange
2017-07-13 15:13                                       ` Peter Lieven
2017-07-13 15:17                                         ` Daniel P. Berrange
2017-07-13 15:21                                           ` Peter Lieven
2017-07-13 15:21                                         ` Eric Blake
2017-06-29 10:57 ` [Qemu-devel] [PATCH V2 6/8] block/qcow2: optimize qcow2_co_pwritev_compressed Peter Lieven
2017-06-29 10:57 ` [Qemu-devel] [PATCH V2 7/8] block/qcow2: start using the compress format extension Peter Lieven
2017-06-29 10:57 ` [Qemu-devel] [PATCH V2 8/8] block/qcow2: add lzo compress format Peter Lieven
2017-07-06 23:49 ` [Qemu-devel] [PATCH V2 0/8] add Qcow2 compress format extension no-reply
2017-07-07  0:02   ` Fam Zheng
2017-07-10 12:36 ` Peter Lieven

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=20170713140711.GO4011@redhat.com \
    --to=berrange@redhat.com \
    --cc=den@openvz.org \
    --cc=eblake@redhat.com \
    --cc=kwolf@redhat.com \
    --cc=lersek@redhat.com \
    --cc=mreitz@redhat.com \
    --cc=pl@kamp.de \
    --cc=qemu-block@nongnu.org \
    --cc=qemu-devel@nongnu.org \
    /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.