From: Eric Blake <eblake@redhat.com>
To: Nir Soffer <nsoffer@redhat.com>
Cc: qemu-block <qemu-block@nongnu.org>,
Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com>,
QEMU Developers <qemu-devel@nongnu.org>,
libguestfs@redhat.com
Subject: Re: [RFC libnbd PATCH] info: Add support for new qemu:joint-allocation
Date: Thu, 10 Jun 2021 08:06:16 -0500 [thread overview]
Message-ID: <20210610130616.nmmckl7v5l5n3agn@redhat.com> (raw)
In-Reply-To: <CAMRbyysYRyALDan9D0L-FphGqQLUOkKrKp0eg0iP8ThHnSatgw@mail.gmail.com>
On Thu, Jun 10, 2021 at 01:20:13AM +0300, Nir Soffer wrote:
> > + else if (strcmp (metacontext, "qemu:joint-allocation") == 0) {
> > + /* Combo of base:allocation and stripped-down qemu:allocation-depth */
> > + const char *base, *depth;
> > + switch (type & 3) {
> > + case 0: base = "allocated"; break;
> > + case 1: base = "hole"; break;
> > + case 2: base = "zero"; break;
> > + case 3: base = "hole,zero"; break;
> > + }
> > + switch (type & 0xc) {
> > + case 0: depth = "unallocated"; break;
>
> Is this possible? qemu reports BDRV_BLOCK_DATA but not BDRV_BLOCK_ALLOCATED?
No, qemu should never report a status of 0 (which in this code would
produce the string "allocated,unallocated", although a v2 may change
to print "<unexpected value>").
Remember, BDRV_BLOCK_ALLOCATED is a bit of a misnomer - it has nothing
to do with whether a cluster occupies allocated space, but rather
whether the local image in the backing chain provides the contents of
the cluster (rather than deferring to the backing chain). The code in
block/io.c guarantees that if a block device reports BDRV_BLOCK_DATA,
then the block layer also reports BDRV_BLOCK_ALLOCATED (that is, any
cluster that provides guest-visible data by necessity implies that the
current layer of the backing chain is important).
However, it DOES point out that "allocated" might not be the best name
in libnbd; perhaps "data" or "normal" would be better for the NBD
base:allocation status of 0.
>
> Anyway this seems like a valid way to present qemu response.
>
> > + case 4: depth = "local"; break;
> > + case 8: depth = "backing"; break;
> > + case 12: depth = "<unexpected depth>"; break;
>
> This should not be possible based on the qemu patch, but printing this
> seems like a good solution, and can help to debug such an issue.
>
> Thinking about client code trying to copy extents based on the flags,
> the client should abort the operation since qemu response is invalid.
>
--
Eric Blake, Principal Software Engineer
Red Hat, Inc. +1-919-301-3266
Virtualization: qemu.org | libvirt.org
next prev parent reply other threads:[~2021-06-10 13:07 UTC|newest]
Thread overview: 19+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-06-09 18:01 [RFC PATCH 0/2] New NBD metacontext Eric Blake
2021-06-09 18:01 ` [PATCH 1/2] iotests: Improve and rename test 309 to nbd-qemu-allocation Eric Blake
2021-06-10 12:14 ` Vladimir Sementsov-Ogievskiy
2021-06-09 18:01 ` [PATCH 2/2] nbd: Add new qemu:joint-allocation metadata context Eric Blake
2021-06-09 23:52 ` Nir Soffer
2021-06-10 12:30 ` Vladimir Sementsov-Ogievskiy
2021-06-10 13:47 ` Eric Blake
2021-06-10 14:10 ` Vladimir Sementsov-Ogievskiy
2021-06-10 13:16 ` Nir Soffer
2021-06-10 14:04 ` Eric Blake
2021-06-10 14:43 ` Vladimir Sementsov-Ogievskiy
2021-06-10 13:31 ` Eric Blake
2021-06-11 23:39 ` Nir Soffer
2021-06-14 13:56 ` Eric Blake
2021-06-14 14:06 ` Nir Soffer
2021-06-09 21:31 ` [RFC libnbd PATCH] info: Add support for new qemu:joint-allocation Eric Blake
2021-06-09 22:20 ` Nir Soffer
2021-06-10 13:06 ` Eric Blake [this message]
2021-06-10 13:19 ` Nir Soffer
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=20210610130616.nmmckl7v5l5n3agn@redhat.com \
--to=eblake@redhat.com \
--cc=libguestfs@redhat.com \
--cc=nsoffer@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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).