From: Alberto Garcia <berto@igalia.com>
To: qemu-devel@nongnu.org
Cc: Kevin Wolf <kwolf@redhat.com>,
Anton Nefedov <anton.nefedov@virtuozzo.com>,
Alberto Garcia <berto@igalia.com>,
qemu-block@nongnu.org, Max Reitz <mreitz@redhat.com>,
Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com>,
"Denis V . Lunev" <den@openvz.org>
Subject: [PATCH v4 00/30] Add subcluster allocation to qcow2
Date: Tue, 17 Mar 2020 19:15:57 +0100 [thread overview]
Message-ID: <cover.1584468723.git.berto@igalia.com> (raw)
Hi,
here's the new version of the patches to add subcluster allocation
support to qcow2.
Please refer to the cover letter of the first version for a full
description of the patches:
https://lists.gnu.org/archive/html/qemu-block/2019-10/msg00983.html
I think that this version fixes all the problems pointed out by Max
and Eric during the review a couple of weeks ago. I also dropped the
RFC tag.
Berto
v4:
- Patch 01: New patch
- Patch 02: New patch
- Patch 05: Documentation updates [Eric]
- Patch 06: Fix rebase conflicts
- Patch 07: Change bit order in the subcluster allocation bitmap.
Change incompatible bit number. [Max, Eric]
- Patch 09: Rename QCOW_MAX_SUBCLUSTERS_PER_CLUSTER to
QCOW_EXTL2_SUBCLUSTERS_PER_CLUSTER [Eric]
- Patch 13: Change bit order in the subcluster allocation bitmap [Max, Eric]
Add more documentation.
Ignore the subcluster bitmap in the L2 entries of
compressed clusters.
- Patch 14: New patch
- Patch 15: Update to work with the changes from patches 02 and 14.
- Patch 16: Update to work with the changes from patches 02 and 14.
- Patch 18: Update to work with the changes from patches 02 and 14.
Update documentation.
Fix return value on early exit.
- Patch 20: Make sure to clear the subcluster allocation bitmap when a
cluster is unallocated.
- Patch 26: Update to work with the changes from patch 14.
- Patch 27: New patch [Max]
- Patch 28: Update version number, incompatible bit number and test
expectations.
- Patch 30: Add new tests.
Make the test verify its own results. [Max]
v3: https://lists.gnu.org/archive/html/qemu-block/2019-12/msg00587.html
- Patch 01: Rename host_offset to host_cluster_offset and make 'bytes'
an unsigned int [Max]
- Patch 03: Rename cluster_needs_cow to cluster_needs_new_alloc and
count_cow_clusters to count_single_write_clusters. Update
documentation and add more assertions and checks [Max]
- Patch 09: Update qcow2_co_truncate() to properly support extended L2
entries [Max]
- Patch 10: Forbid calling set_l2_bitmap() if the image does not have
extended L2 entries [Max]
- Patch 11 (new): Add QCow2SubclusterType [Max]
- Patch 12 (new): Replace QCOW2_CLUSTER_* with QCOW2_SUBCLUSTER_*
- Patch 13 (new): Handle QCOW2_SUBCLUSTER_UNALLOCATED_ALLOC
- Patch 14: Use QCow2SubclusterType instead of QCow2ClusterType [Max]
- Patch 15: Use QCow2SubclusterType instead of QCow2ClusterType [Max]
- Patch 19: Don't call set_l2_bitmap() if the image does not have
extended L2 entries [Max]
- Patch 21: Use smaller data types.
- Patch 22: Don't call set_l2_bitmap() if the image does not have
extended L2 entries [Max]
- Patch 23: Use smaller data types.
- Patch 25: Update test results and documentation. Move the check for
the minimum subcluster size to validate_cluster_size().
- Patch 26 (new): Add subcluster support to qcow2_measure()
- Patch 27: Add more tests
v2: https://lists.gnu.org/archive/html/qemu-block/2019-10/msg01642.html
- Patch 12: Update after the changes in 88f468e546.
- Patch 21 (new): Clear the L2 bitmap when allocating a compressed
cluster. Compressed clusters should have the bitmap all set to 0.
- Patch 24: Document the new fields in the QAPI documentation [Eric].
- Patch 25: Allow qcow2 preallocation with backing files.
- Patch 26: Add some tests for qcow2 images with extended L2 entries.
v1: https://lists.gnu.org/archive/html/qemu-block/2019-10/msg00983.html
Output of git backport-diff against v3:
Key:
[----] : patches are identical
[####] : number of functional differences between upstream/downstream patch
[down] : patch is downstream-only
The flags [FC] indicate (F)unctional and (C)ontextual differences, respectively
001/30:[down] 'qcow2: Make Qcow2AioTask store the full host offset'
002/30:[down] 'qcow2: Convert qcow2_get_cluster_offset() into qcow2_get_host_offset()'
003/30:[----] [-C] 'qcow2: Add calculate_l2_meta()'
004/30:[----] [--] 'qcow2: Split cluster_needs_cow() out of count_cow_clusters()'
005/30:[0020] [FC] 'qcow2: Process QCOW2_CLUSTER_ZERO_ALLOC clusters in handle_copied()'
006/30:[0010] [FC] 'qcow2: Add get_l2_entry() and set_l2_entry()'
007/30:[0020] [FC] 'qcow2: Document the Extended L2 Entries feature'
008/30:[----] [--] 'qcow2: Add dummy has_subclusters() function'
009/30:[0004] [FC] 'qcow2: Add subcluster-related fields to BDRVQcow2State'
010/30:[----] [--] 'qcow2: Add offset_to_sc_index()'
011/30:[----] [-C] 'qcow2: Add l2_entry_size()'
012/30:[----] [--] 'qcow2: Update get/set_l2_entry() and add get/set_l2_bitmap()'
013/30:[0046] [FC] 'qcow2: Add QCow2SubclusterType and qcow2_get_subcluster_type()'
014/30:[down] 'qcow2: Add cluster type parameter to qcow2_get_host_offset()'
015/30:[0082] [FC] 'qcow2: Replace QCOW2_CLUSTER_* with QCOW2_SUBCLUSTER_*'
016/30:[0002] [FC] 'qcow2: Handle QCOW2_SUBCLUSTER_UNALLOCATED_ALLOC'
017/30:[----] [-C] 'qcow2: Add subcluster support to calculate_l2_meta()'
018/30:[down] 'qcow2: Add subcluster support to qcow2_get_host_offset()'
019/30:[----] [--] 'qcow2: Add subcluster support to zero_in_l2_slice()'
020/30:[0012] [FC] 'qcow2: Add subcluster support to discard_in_l2_slice()'
021/30:[----] [--] 'qcow2: Add subcluster support to check_refcounts_l2()'
022/30:[----] [--] 'qcow2: Fix offset calculation in handle_dependencies()'
023/30:[----] [-C] 'qcow2: Update L2 bitmap in qcow2_alloc_cluster_link_l2()'
024/30:[----] [--] 'qcow2: Clear the L2 bitmap when allocating a compressed cluster'
025/30:[----] [--] 'qcow2: Add subcluster support to handle_alloc_space()'
026/30:[0006] [FC] 'qcow2: Restrict qcow2_co_pwrite_zeroes() to full clusters only'
027/30:[down] 'qcow2: Assert that expand_zero_clusters_in_l1() does not support subclusters'
028/30:[0019] [FC] 'qcow2: Add the 'extended_l2' option and the QCOW2_INCOMPAT_EXTL2 bit'
029/30:[----] [--] 'qcow2: Add subcluster support to qcow2_measure()'
030/30:[0313] [FC] 'iotests: Add tests for qcow2 images with extended L2 entries'
Alberto Garcia (30):
qcow2: Make Qcow2AioTask store the full host offset
qcow2: Convert qcow2_get_cluster_offset() into qcow2_get_host_offset()
qcow2: Add calculate_l2_meta()
qcow2: Split cluster_needs_cow() out of count_cow_clusters()
qcow2: Process QCOW2_CLUSTER_ZERO_ALLOC clusters in handle_copied()
qcow2: Add get_l2_entry() and set_l2_entry()
qcow2: Document the Extended L2 Entries feature
qcow2: Add dummy has_subclusters() function
qcow2: Add subcluster-related fields to BDRVQcow2State
qcow2: Add offset_to_sc_index()
qcow2: Add l2_entry_size()
qcow2: Update get/set_l2_entry() and add get/set_l2_bitmap()
qcow2: Add QCow2SubclusterType and qcow2_get_subcluster_type()
qcow2: Add cluster type parameter to qcow2_get_host_offset()
qcow2: Replace QCOW2_CLUSTER_* with QCOW2_SUBCLUSTER_*
qcow2: Handle QCOW2_SUBCLUSTER_UNALLOCATED_ALLOC
qcow2: Add subcluster support to calculate_l2_meta()
qcow2: Add subcluster support to qcow2_get_host_offset()
qcow2: Add subcluster support to zero_in_l2_slice()
qcow2: Add subcluster support to discard_in_l2_slice()
qcow2: Add subcluster support to check_refcounts_l2()
qcow2: Fix offset calculation in handle_dependencies()
qcow2: Update L2 bitmap in qcow2_alloc_cluster_link_l2()
qcow2: Clear the L2 bitmap when allocating a compressed cluster
qcow2: Add subcluster support to handle_alloc_space()
qcow2: Restrict qcow2_co_pwrite_zeroes() to full clusters only
qcow2: Assert that expand_zero_clusters_in_l1() does not support
subclusters
qcow2: Add the 'extended_l2' option and the QCOW2_INCOMPAT_EXTL2 bit
qcow2: Add subcluster support to qcow2_measure()
iotests: Add tests for qcow2 images with extended L2 entries
docs/interop/qcow2.txt | 68 ++-
docs/qcow2-cache.txt | 19 +-
qapi/block-core.json | 7 +
block/qcow2.h | 178 +++++++-
include/block/block_int.h | 1 +
block/qcow2-cluster.c | 696 ++++++++++++++++++++-----------
block/qcow2-refcount.c | 38 +-
block/qcow2.c | 257 +++++++-----
tests/qemu-iotests/031.out | 8 +-
tests/qemu-iotests/036.out | 4 +-
tests/qemu-iotests/049.out | 102 ++---
tests/qemu-iotests/060.out | 1 +
tests/qemu-iotests/061 | 6 +
tests/qemu-iotests/061.out | 25 +-
tests/qemu-iotests/065 | 18 +-
tests/qemu-iotests/082.out | 48 ++-
tests/qemu-iotests/085.out | 38 +-
tests/qemu-iotests/144.out | 4 +-
tests/qemu-iotests/182.out | 2 +-
tests/qemu-iotests/185.out | 8 +-
tests/qemu-iotests/198.out | 2 +
tests/qemu-iotests/206.out | 4 +
tests/qemu-iotests/242.out | 5 +
tests/qemu-iotests/255.out | 8 +-
tests/qemu-iotests/271 | 359 ++++++++++++++++
tests/qemu-iotests/271.out | 244 +++++++++++
tests/qemu-iotests/280.out | 2 +-
tests/qemu-iotests/common.filter | 1 +
tests/qemu-iotests/group | 1 +
29 files changed, 1682 insertions(+), 472 deletions(-)
create mode 100755 tests/qemu-iotests/271
create mode 100644 tests/qemu-iotests/271.out
--
2.20.1
next reply other threads:[~2020-03-17 18:38 UTC|newest]
Thread overview: 128+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-03-17 18:15 Alberto Garcia [this message]
2020-03-17 18:15 ` [PATCH v4 01/30] qcow2: Make Qcow2AioTask store the full host offset Alberto Garcia
2020-03-18 11:23 ` Eric Blake
2020-04-08 10:23 ` Max Reitz
2020-04-09 6:49 ` Vladimir Sementsov-Ogievskiy
2020-03-17 18:15 ` [PATCH v4 02/30] qcow2: Convert qcow2_get_cluster_offset() into qcow2_get_host_offset() Alberto Garcia
2020-03-18 12:08 ` Eric Blake
2020-04-08 10:51 ` Max Reitz
2020-04-08 17:29 ` Alberto Garcia
2020-04-09 7:57 ` Vladimir Sementsov-Ogievskiy
2020-04-09 14:35 ` Alberto Garcia
2020-04-09 7:50 ` Vladimir Sementsov-Ogievskiy
2020-04-09 14:45 ` Alberto Garcia
2020-03-17 18:16 ` [PATCH v4 03/30] qcow2: Add calculate_l2_meta() Alberto Garcia
2020-04-09 8:30 ` Vladimir Sementsov-Ogievskiy
2020-04-09 15:12 ` Alberto Garcia
2020-04-09 18:47 ` Vladimir Sementsov-Ogievskiy
2020-03-17 18:16 ` [PATCH v4 04/30] qcow2: Split cluster_needs_cow() out of count_cow_clusters() Alberto Garcia
2020-03-17 18:16 ` [PATCH v4 05/30] qcow2: Process QCOW2_CLUSTER_ZERO_ALLOC clusters in handle_copied() Alberto Garcia
2020-04-09 10:59 ` Vladimir Sementsov-Ogievskiy
2020-04-09 16:08 ` Alberto Garcia
2020-03-17 18:16 ` [PATCH v4 06/30] qcow2: Add get_l2_entry() and set_l2_entry() Alberto Garcia
2020-04-10 8:48 ` Vladimir Sementsov-Ogievskiy
2020-03-17 18:16 ` [PATCH v4 07/30] qcow2: Document the Extended L2 Entries feature Alberto Garcia
2020-04-08 11:09 ` Max Reitz
2020-04-09 15:12 ` Eric Blake
2020-04-10 9:29 ` Vladimir Sementsov-Ogievskiy
2020-04-14 14:50 ` Alberto Garcia
2020-04-14 16:19 ` Vladimir Sementsov-Ogievskiy
2020-04-14 16:30 ` Alberto Garcia
2020-04-14 18:06 ` Vladimir Sementsov-Ogievskiy
2020-04-14 18:13 ` Alberto Garcia
2020-04-15 19:11 ` Alberto Garcia
2020-04-15 21:13 ` Eric Blake
2020-04-10 12:01 ` Alberto Garcia
2020-04-14 18:16 ` Alberto Garcia
2020-04-14 18:23 ` Eric Blake
2020-04-14 18:25 ` Eric Blake
2020-03-17 18:16 ` [PATCH v4 08/30] qcow2: Add dummy has_subclusters() function Alberto Garcia
2020-04-10 9:11 ` Vladimir Sementsov-Ogievskiy
2020-03-17 18:16 ` [PATCH v4 09/30] qcow2: Add subcluster-related fields to BDRVQcow2State Alberto Garcia
2020-04-08 11:12 ` Max Reitz
2020-04-10 9:45 ` Vladimir Sementsov-Ogievskiy
2020-03-17 18:16 ` [PATCH v4 10/30] qcow2: Add offset_to_sc_index() Alberto Garcia
2020-04-13 11:02 ` Vladimir Sementsov-Ogievskiy
2020-03-17 18:16 ` [PATCH v4 11/30] qcow2: Add l2_entry_size() Alberto Garcia
2020-04-14 9:44 ` Vladimir Sementsov-Ogievskiy
2020-04-14 12:20 ` Alberto Garcia
2020-04-14 12:29 ` Vladimir Sementsov-Ogievskiy
2020-04-14 12:33 ` Alberto Garcia
2020-04-14 12:39 ` Vladimir Sementsov-Ogievskiy
2020-04-14 16:01 ` Eric Blake
2020-04-14 16:16 ` Alberto Garcia
2020-03-17 18:16 ` [PATCH v4 12/30] qcow2: Update get/set_l2_entry() and add get/set_l2_bitmap() Alberto Garcia
2020-04-14 9:49 ` Vladimir Sementsov-Ogievskiy
2020-03-17 18:16 ` [PATCH v4 13/30] qcow2: Add QCow2SubclusterType and qcow2_get_subcluster_type() Alberto Garcia
2020-04-08 11:23 ` Max Reitz
2020-04-08 17:46 ` Alberto Garcia
2020-04-09 8:22 ` Max Reitz
2020-04-14 11:10 ` Vladimir Sementsov-Ogievskiy
2020-03-17 18:16 ` [PATCH v4 14/30] qcow2: Add cluster type parameter to qcow2_get_host_offset() Alberto Garcia
2020-04-08 12:15 ` Max Reitz
2020-04-14 12:30 ` Vladimir Sementsov-Ogievskiy
2020-04-14 12:38 ` Alberto Garcia
2020-03-17 18:16 ` [PATCH v4 15/30] qcow2: Replace QCOW2_CLUSTER_* with QCOW2_SUBCLUSTER_* Alberto Garcia
2020-04-08 12:42 ` Max Reitz
2020-04-15 7:10 ` Vladimir Sementsov-Ogievskiy
2020-03-17 18:16 ` [PATCH v4 16/30] qcow2: Handle QCOW2_SUBCLUSTER_UNALLOCATED_ALLOC Alberto Garcia
2020-04-15 7:28 ` Vladimir Sementsov-Ogievskiy
2020-03-17 18:16 ` [PATCH v4 17/30] qcow2: Add subcluster support to calculate_l2_meta() Alberto Garcia
2020-04-15 8:39 ` Vladimir Sementsov-Ogievskiy
2020-04-16 20:01 ` Alberto Garcia
2020-03-17 18:16 ` [PATCH v4 18/30] qcow2: Add subcluster support to qcow2_get_host_offset() Alberto Garcia
2020-04-08 12:49 ` Max Reitz
2020-04-08 17:35 ` Alberto Garcia
2020-04-22 8:07 ` Vladimir Sementsov-Ogievskiy
2020-04-22 11:54 ` Alberto Garcia
2020-04-22 12:18 ` Vladimir Sementsov-Ogievskiy
2020-03-17 18:16 ` [PATCH v4 19/30] qcow2: Add subcluster support to zero_in_l2_slice() Alberto Garcia
2020-04-22 11:06 ` Vladimir Sementsov-Ogievskiy
2020-04-22 12:53 ` Alberto Garcia
2020-03-17 18:16 ` [PATCH v4 20/30] qcow2: Add subcluster support to discard_in_l2_slice() Alberto Garcia
2020-04-09 10:05 ` Max Reitz
2020-04-10 12:47 ` Alberto Garcia
2020-04-14 10:13 ` Max Reitz
2020-04-22 11:35 ` Vladimir Sementsov-Ogievskiy
2020-04-22 17:42 ` Alberto Garcia
2020-04-22 18:09 ` Vladimir Sementsov-Ogievskiy
2020-04-23 14:18 ` Alberto Garcia
2020-03-17 18:16 ` [PATCH v4 21/30] qcow2: Add subcluster support to check_refcounts_l2() Alberto Garcia
2020-04-22 12:06 ` Vladimir Sementsov-Ogievskiy
2020-04-23 15:45 ` Alberto Garcia
2020-03-17 18:16 ` [PATCH v4 22/30] qcow2: Fix offset calculation in handle_dependencies() Alberto Garcia
2020-04-22 12:38 ` Vladimir Sementsov-Ogievskiy
2020-04-23 15:50 ` Alberto Garcia
2020-03-17 18:16 ` [PATCH v4 23/30] qcow2: Update L2 bitmap in qcow2_alloc_cluster_link_l2() Alberto Garcia
2020-04-24 19:39 ` Eric Blake
2020-04-27 13:17 ` Alberto Garcia
2020-03-17 18:16 ` [PATCH v4 24/30] qcow2: Clear the L2 bitmap when allocating a compressed cluster Alberto Garcia
2020-04-24 17:02 ` Alberto Garcia
2020-04-24 17:11 ` Eric Blake
2020-04-24 17:21 ` Alberto Garcia
2020-04-24 17:44 ` Eric Blake
2020-04-24 17:56 ` Alberto Garcia
2020-04-24 18:25 ` Vladimir Sementsov-Ogievskiy
2020-04-24 18:37 ` Alberto Garcia
2020-04-24 18:47 ` Eric Blake
2020-04-27 7:49 ` Max Reitz
2020-04-27 18:12 ` Alberto Garcia
2020-04-24 18:15 ` Vladimir Sementsov-Ogievskiy
2020-04-24 18:41 ` Alberto Garcia
2020-04-25 6:38 ` Vladimir Sementsov-Ogievskiy
2020-03-17 18:16 ` [PATCH v4 25/30] qcow2: Add subcluster support to handle_alloc_space() Alberto Garcia
2020-04-27 11:54 ` Vladimir Sementsov-Ogievskiy
2020-03-17 18:16 ` [PATCH v4 26/30] qcow2: Restrict qcow2_co_pwrite_zeroes() to full clusters only Alberto Garcia
2020-04-27 11:59 ` Vladimir Sementsov-Ogievskiy
2020-03-17 18:16 ` [PATCH v4 27/30] qcow2: Assert that expand_zero_clusters_in_l1() does not support subclusters Alberto Garcia
2020-04-09 10:27 ` Max Reitz
2020-04-10 16:42 ` Alberto Garcia
2020-03-17 18:16 ` [PATCH v4 28/30] qcow2: Add the 'extended_l2' option and the QCOW2_INCOMPAT_EXTL2 bit Alberto Garcia
2020-04-09 14:49 ` Eric Blake
2020-03-17 18:16 ` [PATCH v4 29/30] qcow2: Add subcluster support to qcow2_measure() Alberto Garcia
2020-03-17 18:16 ` [PATCH v4 30/30] iotests: Add tests for qcow2 images with extended L2 entries Alberto Garcia
2020-04-09 12:22 ` Max Reitz
2020-04-13 17:16 ` Alberto Garcia
2020-04-14 10:14 ` Max Reitz
2020-04-21 5:06 ` [PATCH v4 00/30] Add subcluster allocation to qcow2 Derek Su
2020-04-21 10:35 ` Alberto Garcia
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=cover.1584468723.git.berto@igalia.com \
--to=berto@igalia.com \
--cc=anton.nefedov@virtuozzo.com \
--cc=den@openvz.org \
--cc=kwolf@redhat.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 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).