qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
From: Max Reitz <mreitz@redhat.com>
To: qemu-devel@nongnu.org
Cc: Kevin Wolf <kwolf@redhat.com>, Stefan Hajnoczi <stefanha@redhat.com>
Subject: Re: [Qemu-devel] [PATCH v5 00/26] qcow2: Support refcount orders != 4
Date: Tue, 20 Jan 2015 17:48:29 -0500	[thread overview]
Message-ID: <54BEDB3D.8070200@redhat.com> (raw)
In-Reply-To: <1418647857-3589-1-git-send-email-mreitz@redhat.com>

On 2014-12-15 at 07:50, Max Reitz wrote:
> 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 23 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_width=${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.
>
>
> v5:
> - Patch 5: Use absolute value for addend instead of the two's complement
>    for negative values [Stefan]
> - Patch 6:
>    - Conflicts due to the changes in patch 5
>    - Dropped the "if (ret >= 0)" -> "if (ret == 0)" hunk; since the
>      update_refcount() return value was never touched in this series
>      there is no point in modifying the callers' checks for their return
>      value [Eric]
> - Patch 9: Use DIV_ROUND_UP() [Eric]
> - Patch 16: Rebase conflicts due to Fam's patch removing trailing
>    whitespace in all qemu-iotests/*.out files
>    (7486458c33cd3e5714368f181a5fea39c54444ca); I kept the R-bs because
>    these are only trailing whitespace conflicts in *.out files which are
>    really trivial.
>    There are two not-so-trivial conflicts: Two hunks are missing from v5
>    which were part of v4 which did nothing but remove trailing
>    whitespace. Obviously those are no longer necessary, so removing these
>    hunks was actually trivial after all.
>
>
> git-backport-diff against v4:
>
> 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/26:[----] [--] 'qcow2: Add two new fields to BDRVQcowState'
> 002/26:[----] [--] 'qcow2: Add refcount_bits to format-specific info'
> 003/26:[----] [--] 'qcow2: Do not return new value after refcount update'
> 004/26:[----] [--] 'qcow2: Only return status from qcow2_get_refcount'
> 005/26:[0040] [FC] 'qcow2: Use unsigned addend for update_refcount()'
> 006/26:[0028] [FC] 'qcow2: Use 64 bits for refcount values'
> 007/26:[----] [--] 'qcow2: Respect error in qcow2_alloc_bytes()'
> 008/26:[----] [--] 'qcow2: Refcount overflow and qcow2_alloc_bytes()'
> 009/26:[0002] [FC] 'qcow2: Helper for refcount array reallocation'
> 010/26:[----] [-C] 'qcow2: Helper function for refcount modification'
> 011/26:[----] [--] 'qcow2: More helpers for refcount modification'
> 012/26:[----] [--] 'qcow2: Open images with refcount order != 4'
> 013/26:[----] [--] 'qcow2: refcount_order parameter for qcow2_create2'
> 014/26:[----] [--] 'qcow2: Use symbolic macros in qcow2_amend_options'
> 015/26:[----] [--] 'iotests: Prepare for refcount_bits option'
> 016/26:[0126] [FC] 'qcow2: Allow creation with refcount order != 4'
> 017/26:[----] [--] 'progress: Allow regressing progress'
> 018/26:[----] [--] 'block: Add opaque value to the amend CB'
> 019/26:[----] [-C] 'qcow2: Use error_report() in qcow2_amend_options()'
> 020/26:[----] [--] 'qcow2: Use abort() instead of assert(false)'
> 021/26:[----] [--] 'qcow2: Split upgrade/downgrade paths for amend'
> 022/26:[----] [--] 'qcow2: Use intermediate helper CB for amend'
> 023/26:[----] [--] 'qcow2: Add function for refcount order amendment'
> 024/26:[----] [--] 'qcow2: Invoke refcount order amendment function'
> 025/26:[----] [--] 'qcow2: Point to amend function in check'
> 026/26:[----] [--] 'iotests: Add test for different refcount widths'
>
>
> Max Reitz (26):
>    qcow2: Add two new fields to BDRVQcowState
>    qcow2: Add refcount_bits to format-specific info
>    qcow2: Do not return new value after refcount update
>    qcow2: Only return status from qcow2_get_refcount
>    qcow2: Use unsigned addend for update_refcount()
>    qcow2: Use 64 bits for refcount values
>    qcow2: Respect error in qcow2_alloc_bytes()
>    qcow2: Refcount overflow and qcow2_alloc_bytes()
>    qcow2: Helper for refcount array reallocation
>    qcow2: Helper function for refcount modification
>    qcow2: More helpers for refcount modification
>    qcow2: Open images with refcount order != 4
>    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
>    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: Add test for different refcount widths
>
>   block.c                          |    4 +-
>   block/qcow2-cluster.c            |   24 +-
>   block/qcow2-refcount.c           | 1054 +++++++++++++++++++++++++++++++-------
>   block/qcow2.c                    |  286 ++++++++---
>   block/qcow2.h                    |   23 +-
>   include/block/block.h            |    4 +-
>   include/block/block_int.h        |    4 +-
>   qapi/block-core.json             |    5 +-
>   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/060.out       |    1 +
>   tests/qemu-iotests/061.out       |   14 +-
>   tests/qemu-iotests/065           |   23 +-
>   tests/qemu-iotests/067           |    2 +
>   tests/qemu-iotests/067.out       |    5 +
>   tests/qemu-iotests/079           |   10 +-
>   tests/qemu-iotests/079.out       |   38 +-
>   tests/qemu-iotests/080           |    2 +
>   tests/qemu-iotests/082.out       |   48 +-
>   tests/qemu-iotests/085.out       |   38 +-
>   tests/qemu-iotests/089           |    2 +
>   tests/qemu-iotests/089.out       |    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 +-
>   34 files changed, 1782 insertions(+), 399 deletions(-)
>   create mode 100755 tests/qemu-iotests/112
>   create mode 100644 tests/qemu-iotests/112.out

Ping

      parent reply	other threads:[~2015-01-20 22:48 UTC|newest]

Thread overview: 44+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-12-15 12:50 [Qemu-devel] [PATCH v5 00/26] qcow2: Support refcount orders != 4 Max Reitz
2014-12-15 12:50 ` [Qemu-devel] [PATCH v5 01/26] qcow2: Add two new fields to BDRVQcowState Max Reitz
2014-12-15 12:50 ` [Qemu-devel] [PATCH v5 02/26] qcow2: Add refcount_bits to format-specific info Max Reitz
2014-12-15 12:50 ` [Qemu-devel] [PATCH v5 03/26] qcow2: Do not return new value after refcount update Max Reitz
2014-12-15 12:50 ` [Qemu-devel] [PATCH v5 04/26] qcow2: Only return status from qcow2_get_refcount Max Reitz
2014-12-15 12:50 ` [Qemu-devel] [PATCH v5 05/26] qcow2: Use unsigned addend for update_refcount() Max Reitz
2015-01-22 15:33   ` Eric Blake
2014-12-15 12:50 ` [Qemu-devel] [PATCH v5 06/26] qcow2: Use 64 bits for refcount values Max Reitz
2015-01-22 15:35   ` Eric Blake
2015-02-03 19:26   ` Kevin Wolf
2015-02-03 19:48     ` Max Reitz
2014-12-15 12:50 ` [Qemu-devel] [PATCH v5 07/26] qcow2: Respect error in qcow2_alloc_bytes() Max Reitz
2015-02-04 11:40   ` Kevin Wolf
2015-02-04 15:04     ` Max Reitz
2015-02-04 15:12       ` Kevin Wolf
2014-12-15 12:50 ` [Qemu-devel] [PATCH v5 08/26] qcow2: Refcount overflow and qcow2_alloc_bytes() Max Reitz
2015-02-04 11:55   ` Kevin Wolf
2015-02-04 15:33     ` Max Reitz
2015-02-04 16:10       ` Kevin Wolf
2014-12-15 12:50 ` [Qemu-devel] [PATCH v5 09/26] qcow2: Helper for refcount array reallocation Max Reitz
2015-02-04 13:21   ` Kevin Wolf
2015-02-04 15:57     ` Max Reitz
2014-12-15 12:50 ` [Qemu-devel] [PATCH v5 10/26] qcow2: Helper function for refcount modification Max Reitz
2015-02-04 16:06   ` Kevin Wolf
2015-02-04 17:12     ` Max Reitz
2014-12-15 12:50 ` [Qemu-devel] [PATCH v5 11/26] qcow2: More helpers " Max Reitz
2015-02-04 13:53   ` Kevin Wolf
2015-02-04 15:59     ` Max Reitz
2014-12-15 12:50 ` [Qemu-devel] [PATCH v5 12/26] qcow2: Open images with refcount order != 4 Max Reitz
2014-12-15 12:50 ` [Qemu-devel] [PATCH v5 13/26] qcow2: refcount_order parameter for qcow2_create2 Max Reitz
2014-12-15 12:50 ` [Qemu-devel] [PATCH v5 14/26] qcow2: Use symbolic macros in qcow2_amend_options Max Reitz
2014-12-15 12:50 ` [Qemu-devel] [PATCH v5 15/26] iotests: Prepare for refcount_bits option Max Reitz
2014-12-15 12:50 ` [Qemu-devel] [PATCH v5 16/26] qcow2: Allow creation with refcount order != 4 Max Reitz
2014-12-15 12:50 ` [Qemu-devel] [PATCH v5 17/26] progress: Allow regressing progress Max Reitz
2014-12-15 12:50 ` [Qemu-devel] [PATCH v5 18/26] block: Add opaque value to the amend CB Max Reitz
2014-12-15 12:50 ` [Qemu-devel] [PATCH v5 19/26] qcow2: Use error_report() in qcow2_amend_options() Max Reitz
2014-12-15 12:50 ` [Qemu-devel] [PATCH v5 20/26] qcow2: Use abort() instead of assert(false) Max Reitz
2014-12-15 12:50 ` [Qemu-devel] [PATCH v5 21/26] qcow2: Split upgrade/downgrade paths for amend Max Reitz
2014-12-15 12:50 ` [Qemu-devel] [PATCH v5 22/26] qcow2: Use intermediate helper CB " Max Reitz
2014-12-15 12:50 ` [Qemu-devel] [PATCH v5 23/26] qcow2: Add function for refcount order amendment Max Reitz
2014-12-15 12:50 ` [Qemu-devel] [PATCH v5 24/26] qcow2: Invoke refcount order amendment function Max Reitz
2014-12-15 12:50 ` [Qemu-devel] [PATCH v5 25/26] qcow2: Point to amend function in check Max Reitz
2014-12-15 12:50 ` [Qemu-devel] [PATCH v5 26/26] iotests: Add test for different refcount widths Max Reitz
2015-01-20 22:48 ` Max Reitz [this message]

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=54BEDB3D.8070200@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).