From: Eric Blake <eblake@redhat.com>
To: Max Reitz <mreitz@redhat.com>, qemu-devel@nongnu.org
Cc: kwolf@redhat.com, qemu-block@nongnu.org
Subject: Re: [Qemu-devel] [PATCH v10 02/17] qcow2: Correctly report status of preallocated zero clusters
Date: Fri, 28 Apr 2017 14:04:33 -0500 [thread overview]
Message-ID: <88d9a7ed-7740-e967-2c61-21a304032cfe@redhat.com> (raw)
In-Reply-To: <de3f94c3-5941-5301-5408-93c43adc1543@redhat.com>
[-- Attachment #1: Type: text/plain, Size: 4169 bytes --]
On 04/28/2017 12:35 PM, Max Reitz wrote:
> On 27.04.2017 03:46, Eric Blake wrote:
>> We were throwing away the preallocation information associated with
>> zero clusters. But we should be matching the well-defined semantics
>> in bdrv_get_block_status(), where (BDRV_BLOCK_ZERO |
>> BDRV_BLOCK_OFFSET_VALID) informs the user which offset is reserved,
>> while still reminding the user that reading from that offset is
>> likely to read garbage.
>>
>> Making this change lets us see which portions of an image are zero
>> but preallocated, when using qemu-img map --output=json. The
>> --output=human side intentionally ignores all zero clusters, whether
>> or not they are preallocated.
>>
>> The fact that there is no change to qemu-iotests './check -qcow2'
>> merely means that we aren't yet testing this aspect of qemu-img;
>> a later patch will add a test.
>>
>> Signed-off-by: Eric Blake <eblake@redhat.com>
>>
>> ---
>> v10: new patch
>> ---
>> block/qcow2-cluster.c | 32 +++++++++++++++++++++++++++-----
>> 1 file changed, 27 insertions(+), 5 deletions(-)
>
> I'd propose you split the qcow2 changes off of this series.
Yeah, it's sort of morphed into a well-tested later part and an earlier
part that is still undergoing heavy review. I don't know how much churn
there would be to rebase things to do the blkdebug changes first (it may
invalidate portions of my test 177; but I could always tag such spots as
FIXME while waiting on the qcow2 part to settle and land). I'll see
what I can do, as I've now got multiple series queued up, and should at
least get SOMETHING to land to start clearing up the logjam.
>> @@ -335,9 +339,10 @@ static int count_contiguous_clusters_by_type(int nb_clusters,
>> int i;
>>
>> for (i = 0; i < nb_clusters; i++) {
>> - int type = qcow2_get_cluster_type(be64_to_cpu(l2_table[i]));
>> + uint64_t entry = be64_to_cpu(l2_table[i]);
>> + int type = qcow2_get_cluster_type(entry);
>>
>> - if (type != wanted_type) {
>> + if (type != wanted_type || entry & L2E_OFFSET_MASK) {
>
> This works only for wanted_type \in \{ ZERO, UNALLOCATED \} -- which is
> what the comment you added describes, but this may still warrant a
> renaming of this function (count_contiguous_unallocated_clusters?) and
> probably an assertion that wanted_type is ZERO or UNALLOCATED.
Good idea.
>> @@ -559,9 +564,26 @@ int qcow2_get_cluster_offset(BlockDriverState *bs, uint64_t offset,
>> ret = -EIO;
>> goto fail;
>> }
>> - c = count_contiguous_clusters_by_type(nb_clusters, &l2_table[l2_index],
>> - QCOW2_CLUSTER_ZERO);
>> - *cluster_offset = 0;
>> + /* Distinguish between pure zero clusters and pre-allocated ones */
>> + if (*cluster_offset & L2E_OFFSET_MASK) {
>> + c = count_contiguous_clusters(nb_clusters, s->cluster_size,
>> + &l2_table[l2_index], QCOW_OFLAG_ZERO);
>
> You should probably switch this patch and the next one -- or I just send
> my patches myself and you base your series on top of it...
I tested with your patches in, then rebased with your patches out to see
what broke, and...
>
> Because before the next patch, this happens:
>
> $ ./qemu-img map foo.qcow2
> Offset Length Mapped to File
> qemu-img: block/qcow2-cluster.c:319: count_contiguous_clusters:
> Assertion `qcow2_get_cluster_type(first_entry) == QCOW2_CLUSTER_NORMAL'
> failed.
got that same assert. So I realized that your patch was necessary and
rebased it back in, but obviously forgot to re-test at all points in the
series. Yes, your should go first, and I'd be more than happy if you
post yours formally and I rebase my qcow2 portions on top of yours (all
the more reason for me to split this series into two, and get the
blkdebug portions in now while we still hammer on the qcow2 stuff).
--
Eric Blake, Principal Software Engineer
Red Hat, Inc. +1-919-301-3266
Virtualization: qemu.org | libvirt.org
[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 604 bytes --]
next prev parent reply other threads:[~2017-04-28 19:04 UTC|newest]
Thread overview: 40+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-04-27 1:46 [Qemu-devel] [PATCH v10 00/17] add blkdebug tests Eric Blake
2017-04-27 1:46 ` [Qemu-devel] [PATCH v10 01/17] block: Update comments on BDRV_BLOCK_* meanings Eric Blake
2017-04-28 17:12 ` Max Reitz
2017-04-28 20:18 ` Eric Blake
2017-04-27 1:46 ` [Qemu-devel] [PATCH v10 02/17] qcow2: Correctly report status of preallocated zero clusters Eric Blake
2017-04-28 17:35 ` Max Reitz
2017-04-28 19:04 ` Eric Blake [this message]
2017-04-27 1:46 ` [Qemu-devel] [PATCH v10 03/17] qcow2: Reuse " Eric Blake
2017-04-28 17:51 ` Max Reitz
2017-04-27 1:46 ` [Qemu-devel] [PATCH v10 04/17] qcow2: Optimize zero_single_l2() to minimize L2 churn Eric Blake
2017-04-28 18:00 ` Max Reitz
2017-04-28 19:11 ` Eric Blake
2017-04-27 1:46 ` [Qemu-devel] [PATCH v10 05/17] iotests: Add test 179 to cover write zeroes with unmap Eric Blake
2017-04-28 19:28 ` Max Reitz
2017-04-28 19:48 ` Eric Blake
2017-04-27 1:46 ` [Qemu-devel] [PATCH v10 06/17] qemu-io: Don't open-code QEMU_IS_ALIGNED Eric Blake
2017-04-28 19:30 ` Max Reitz
2017-04-27 1:46 ` [Qemu-devel] [PATCH v10 07/17] qemu-io: Switch 'alloc' command to byte-based length Eric Blake
2017-04-28 19:46 ` Max Reitz
2017-04-28 19:59 ` Eric Blake
2017-04-28 20:09 ` Max Reitz
2017-04-28 20:36 ` Eric Blake
2017-04-28 20:52 ` Max Reitz
2017-04-27 1:46 ` [Qemu-devel] [PATCH v10 08/17] qemu-io: Switch 'map' output to byte-based reporting Eric Blake
2017-04-28 19:53 ` Max Reitz
2017-04-28 20:03 ` Eric Blake
2017-04-27 1:46 ` [Qemu-devel] [PATCH v10 09/17] qcow2: Optimize write zero of unaligned tail cluster Eric Blake
2017-04-28 20:48 ` Max Reitz
2017-04-28 21:24 ` Eric Blake
2017-05-04 2:47 ` Eric Blake
2017-04-27 1:46 ` [Qemu-devel] [PATCH v10 10/17] qcow2: Assert that cluster operations are aligned Eric Blake
2017-05-03 17:56 ` Max Reitz
2017-04-27 1:46 ` [Qemu-devel] [PATCH v10 11/17] qcow2: Discard/zero clusters by byte count Eric Blake
2017-05-03 18:28 ` Max Reitz
2017-04-27 1:46 ` [Qemu-devel] [PATCH v10 12/17] blkdebug: Sanity check block layer guarantees Eric Blake
2017-04-27 1:46 ` [Qemu-devel] [PATCH v10 13/17] blkdebug: Refactor error injection Eric Blake
2017-04-27 1:46 ` [Qemu-devel] [PATCH v10 14/17] blkdebug: Add pass-through write_zero and discard support Eric Blake
2017-04-27 1:46 ` [Qemu-devel] [PATCH v10 15/17] blkdebug: Simplify override logic Eric Blake
2017-04-27 1:46 ` [Qemu-devel] [PATCH v10 16/17] blkdebug: Add ability to override unmap geometries Eric Blake
2017-04-27 1:46 ` [Qemu-devel] [PATCH v10 17/17] tests: Add coverage for recent block geometry fixes Eric Blake
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=88d9a7ed-7740-e967-2c61-21a304032cfe@redhat.com \
--to=eblake@redhat.com \
--cc=kwolf@redhat.com \
--cc=mreitz@redhat.com \
--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 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).