From: Max Reitz <mreitz@redhat.com>
To: qemu-devel@nongnu.org
Cc: Kevin Wolf <kwolf@redhat.com>,
Stefan Hajnoczi <stefanha@redhat.com>,
Max Reitz <mreitz@redhat.com>
Subject: [Qemu-devel] [PATCH v7 00/25] qcow2: Support refcount orders != 4
Date: Wed, 18 Feb 2015 17:40:45 -0500 [thread overview]
Message-ID: <1424299260-1763-1-git-send-email-mreitz@redhat.com> (raw)
As of version 3, the qcow2 file format supports different widths for
refcount entries, ranging from 1 to 64 bit (only powers of two).
Currently, qemu only supports 16 bit, which is the only width supported
by version 2 (compat=0.10) images.
This series adds support to qemu for all other valid refcount orders.
This is mainly done by adding two function pointers into the
BDRVQcowState structure for reading and writing refcount values
independently of the current refcount entry width; all in-memory
refcount arrays (mostly cached refcount blocks) now are void pointers
and are accessed through these functions alone.
Thanks to previous work of making the qemu code agnostic of e.g. the
number of refcount entries per refcount block, the rest is fairly
trivial. The most complex patch in this series is patch 22 which
implements changing the refcount order through qemu-img amend.
To test different refcount widths, simply invoke the qemu-iotests check
program with -o refcount_bits=${your_desired_width}. The final test in
this series adds some tests for operations which do not work with
certain refcount orders and for refcount order amendment.
Patches 1 to 10 are already merged to Kevin's block branch, so I omitted
them in this version.
v7:
- Patch 11: Make refcount_bits a uint64_t so it won't overflow in patch
14 [Kevin]
- Patch 14: refcount_bits now being a uint64_t, I dropped the
"refcount_bits <= 0" check ("== 0" is checked by is_power_of_2())
- Split the old patch 24 into patches 15 and 25 [Kevin]
git-backport-diff against v6:
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
011/25:[0003] [FC] 'qcow2: refcount_order parameter for qcow2_create2'
012/25:[----] [--] 'qcow2: Use symbolic macros in qcow2_amend_options'
013/25:[----] [--] 'iotests: Prepare for refcount_bits option'
014/25:[0004] [FC] 'qcow2: Allow creation with refcount order != 4'
015/25:[0180] [FC] 'iotests: Add test for different refcount widths'
016/25:[----] [--] 'progress: Allow regressing progress'
017/25:[----] [--] 'block: Add opaque value to the amend CB'
018/25:[----] [--] 'qcow2: Use error_report() in qcow2_amend_options()'
019/25:[----] [--] 'qcow2: Use abort() instead of assert(false)'
020/25:[----] [--] 'qcow2: Split upgrade/downgrade paths for amend'
021/25:[----] [--] 'qcow2: Use intermediate helper CB for amend'
022/25:[----] [--] 'qcow2: Add function for refcount order amendment'
023/25:[----] [--] 'qcow2: Invoke refcount order amendment function'
024/25:[----] [--] 'qcow2: Point to amend function in check'
025/25:[down] 'iotests: Extend test 112 for qemu-img amend'
Max Reitz (15):
qcow2: refcount_order parameter for qcow2_create2
qcow2: Use symbolic macros in qcow2_amend_options
iotests: Prepare for refcount_bits option
qcow2: Allow creation with refcount order != 4
iotests: Add test for different refcount widths
progress: Allow regressing progress
block: Add opaque value to the amend CB
qcow2: Use error_report() in qcow2_amend_options()
qcow2: Use abort() instead of assert(false)
qcow2: Split upgrade/downgrade paths for amend
qcow2: Use intermediate helper CB for amend
qcow2: Add function for refcount order amendment
qcow2: Invoke refcount order amendment function
qcow2: Point to amend function in check
iotests: Extend test 112 for qemu-img amend
block.c | 4 +-
block/qcow2-cluster.c | 14 +-
block/qcow2-refcount.c | 455 +++++++++++++++++++++++++++++++++++++++
block/qcow2.c | 270 +++++++++++++++++------
block/qcow2.h | 7 +-
include/block/block.h | 4 +-
include/block/block_int.h | 4 +-
qemu-img.c | 5 +-
tests/qemu-iotests/007 | 3 +
tests/qemu-iotests/015 | 2 +
tests/qemu-iotests/026 | 7 +
tests/qemu-iotests/029 | 2 +
tests/qemu-iotests/049.out | 108 +++++-----
tests/qemu-iotests/051 | 3 +
tests/qemu-iotests/058 | 2 +
tests/qemu-iotests/061.out | 14 +-
tests/qemu-iotests/067 | 2 +
tests/qemu-iotests/079 | 10 +-
tests/qemu-iotests/079.out | 38 +---
tests/qemu-iotests/080 | 2 +
tests/qemu-iotests/082.out | 41 +++-
tests/qemu-iotests/085.out | 38 ++--
tests/qemu-iotests/089 | 2 +
tests/qemu-iotests/108 | 2 +
tests/qemu-iotests/112 | 296 +++++++++++++++++++++++++
tests/qemu-iotests/112.out | 155 +++++++++++++
tests/qemu-iotests/common.filter | 3 +-
tests/qemu-iotests/group | 1 +
util/qemu-progress.c | 3 +-
29 files changed, 1297 insertions(+), 200 deletions(-)
create mode 100755 tests/qemu-iotests/112
create mode 100644 tests/qemu-iotests/112.out
--
2.1.0
next reply other threads:[~2015-02-18 22:41 UTC|newest]
Thread overview: 22+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-02-18 22:40 Max Reitz [this message]
2015-02-18 22:40 ` [Qemu-devel] [PATCH v7 11/25] qcow2: refcount_order parameter for qcow2_create2 Max Reitz
2015-02-19 2:51 ` Eric Blake
2015-02-19 14:01 ` Max Reitz
2015-02-19 23:15 ` Eric Blake
2015-02-18 22:40 ` [Qemu-devel] [PATCH v7 12/25] qcow2: Use symbolic macros in qcow2_amend_options Max Reitz
2015-02-18 22:40 ` [Qemu-devel] [PATCH v7 13/25] iotests: Prepare for refcount_bits option Max Reitz
2015-02-18 22:40 ` [Qemu-devel] [PATCH v7 14/25] qcow2: Allow creation with refcount order != 4 Max Reitz
2015-02-19 23:19 ` Eric Blake
2015-02-18 22:40 ` [Qemu-devel] [PATCH v7 15/25] iotests: Add test for different refcount widths Max Reitz
2015-02-19 23:22 ` Eric Blake
2015-02-18 22:40 ` [Qemu-devel] [PATCH v7 16/25] progress: Allow regressing progress Max Reitz
2015-02-18 22:40 ` [Qemu-devel] [PATCH v7 17/25] block: Add opaque value to the amend CB Max Reitz
2015-02-18 22:40 ` [Qemu-devel] [PATCH v7 18/25] qcow2: Use error_report() in qcow2_amend_options() Max Reitz
2015-02-18 22:40 ` [Qemu-devel] [PATCH v7 19/25] qcow2: Use abort() instead of assert(false) Max Reitz
2015-02-18 22:40 ` [Qemu-devel] [PATCH v7 20/25] qcow2: Split upgrade/downgrade paths for amend Max Reitz
2015-02-18 22:40 ` [Qemu-devel] [PATCH v7 21/25] qcow2: Use intermediate helper CB " Max Reitz
2015-02-18 22:40 ` [Qemu-devel] [PATCH v7 22/25] qcow2: Add function for refcount order amendment Max Reitz
2015-02-18 22:40 ` [Qemu-devel] [PATCH v7 23/25] qcow2: Invoke refcount order amendment function Max Reitz
2015-02-18 22:40 ` [Qemu-devel] [PATCH v7 24/25] qcow2: Point to amend function in check Max Reitz
2015-02-18 22:41 ` [Qemu-devel] [PATCH v7 25/25] iotests: Extend test 112 for qemu-img amend Max Reitz
2015-02-19 23:24 ` 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=1424299260-1763-1-git-send-email-mreitz@redhat.com \
--to=mreitz@redhat.com \
--cc=kwolf@redhat.com \
--cc=qemu-devel@nongnu.org \
--cc=stefanha@redhat.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).