From: John Snow <jsnow@redhat.com>
To: Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com>,
qemu-block@nongnu.org, qemu-devel@nongnu.org
Cc: kwolf@redhat.com, famz@redhat.com, armbru@redhat.com,
mreitz@redhat.com, stefanha@redhat.com, pbonzini@redhat.com,
den@openvz.org
Subject: Re: [Qemu-devel] [PATCH 21/25] qcow2-bitmap: refcounts
Date: Tue, 14 Feb 2017 18:22:10 -0500 [thread overview]
Message-ID: <eee8fdbb-515d-c198-6da0-634c5e6657e6@redhat.com> (raw)
In-Reply-To: <1487091579-67092-22-git-send-email-vsementsov@virtuozzo.com>
On 02/14/2017 11:59 AM, Vladimir Sementsov-Ogievskiy wrote:
> Calculate refcounts for qcow2 bitmaps. It is needed for qcow2's qemu-img
> check implementation.
>
> Signed-off-by: Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com>
> Reviewed-by: Max Reitz <mreitz@redhat.com>
> ---
> block/qcow2-bitmap.c | 76 ++++++++++++++++++++++++++++++++++++++++++++++++++
> block/qcow2-refcount.c | 6 ++++
> block/qcow2.h | 3 ++
> 3 files changed, 85 insertions(+)
>
> diff --git a/block/qcow2-bitmap.c b/block/qcow2-bitmap.c
> index 419d51e..326a799 100644
> --- a/block/qcow2-bitmap.c
> +++ b/block/qcow2-bitmap.c
> @@ -1222,3 +1222,79 @@ common_errp:
> name, bdrv_get_device_or_node_name(bs), reason);
> return false;
> }
> +
> +int qcow2_check_bitmaps_refcounts(BlockDriverState *bs, BdrvCheckResult *res,
> + void **refcount_table,
> + int64_t *refcount_table_size)
> +{
> + int ret;
> + BDRVQcow2State *s = bs->opaque;
> + Qcow2BitmapList *bm_list;
> + Qcow2Bitmap *bm;
> +
> + if (s->nb_bitmaps == 0) {
> + return 0;
> + }
> +
> + ret = qcow2_inc_refcounts_imrt(bs, res, refcount_table, refcount_table_size,
> + s->bitmap_directory_offset,
> + s->bitmap_directory_size);
> + if (ret < 0) {
> + return ret;
> + }
> +
> + bm_list = bitmap_list_load(bs, s->bitmap_directory_offset,
> + s->bitmap_directory_size, NULL);
> + if (bm_list == NULL) {
> + res->corruptions++;
> + return -EINVAL;
> + }
> +
> + QSIMPLEQ_FOREACH(bm, bm_list, entry) {
> + uint64_t *bitmap_table = NULL;
> + int i;
> +
> + ret = qcow2_inc_refcounts_imrt(bs, res,
> + refcount_table, refcount_table_size,
> + bm->table.offset,
> + bm->table.size * sizeof(uint64_t));
> + if (ret < 0) {
> + goto out;
> + }
> +
> + ret = bitmap_table_load(bs, &bm->table, &bitmap_table);
> + if (ret < 0) {
> + res->corruptions++;
> + goto out;
> + }
> +
> + for (i = 0; i < bm->table.size; ++i) {
> + uint64_t entry = bitmap_table[i];
> + uint64_t offset = entry & BME_TABLE_ENTRY_OFFSET_MASK;
> +
> + if (check_table_entry(entry, s->cluster_size) < 0) {
> + res->corruptions++;
> + continue;
> + }
> +
> + if (offset == 0) {
> + continue;
> + }
> +
> + ret = qcow2_inc_refcounts_imrt(bs, res,
> + refcount_table, refcount_table_size,
> + offset, s->cluster_size);
> + if (ret < 0) {
> + g_free(bitmap_table);
> + goto out;
> + }
> + }
> +
> + g_free(bitmap_table);
> + }
> +
> +out:
> + bitmap_list_free(bm_list);
> +
> + return ret;
> +}
> diff --git a/block/qcow2-refcount.c b/block/qcow2-refcount.c
> index 14a736d..cdb74ba 100644
> --- a/block/qcow2-refcount.c
> +++ b/block/qcow2-refcount.c
> @@ -1846,6 +1846,12 @@ static int calculate_refcounts(BlockDriverState *bs, BdrvCheckResult *res,
> return ret;
> }
>
> + /* bitmaps */
> + ret = qcow2_check_bitmaps_refcounts(bs, res, refcount_table, nb_clusters);
> + if (ret < 0) {
> + return ret;
> + }
> +
> return check_refblocks(bs, res, fix, rebuild, refcount_table, nb_clusters);
> }
>
> diff --git a/block/qcow2.h b/block/qcow2.h
> index 0a3708d..eaad34a 100644
> --- a/block/qcow2.h
> +++ b/block/qcow2.h
> @@ -624,5 +624,8 @@ bool qcow2_can_store_new_dirty_bitmap(BlockDriverState *bs,
> const char *name,
> uint32_t granularity,
> Error **errp);
> +int qcow2_check_bitmaps_refcounts(BlockDriverState *bs, BdrvCheckResult *res,
> + void **refcount_table,
> + int64_t *refcount_table_size);
>
> #endif
>
Looks OK.
Reviewed-by: John Snow <jsnow@redhat.com>
next prev parent reply other threads:[~2017-02-14 23:22 UTC|newest]
Thread overview: 41+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-02-14 16:59 [Qemu-devel] [PATCH v14 00/24] qcow2: persistent dirty bitmaps Vladimir Sementsov-Ogievskiy
2017-02-14 16:59 ` [Qemu-devel] [PATCH 01/25] specs/qcow2: fix bitmap granularity qemu-specific note Vladimir Sementsov-Ogievskiy
2017-02-14 16:59 ` [Qemu-devel] [PATCH 02/25] specs/qcow2: do not use wording 'bitmap header' Vladimir Sementsov-Ogievskiy
2017-02-14 16:59 ` [Qemu-devel] [PATCH 03/25] hbitmap: improve dirty iter Vladimir Sementsov-Ogievskiy
2017-02-14 16:59 ` [Qemu-devel] [PATCH 04/25] tests: add hbitmap iter test Vladimir Sementsov-Ogievskiy
2017-02-14 16:59 ` [Qemu-devel] [PATCH 05/25] block: fix bdrv_dirty_bitmap_granularity signature Vladimir Sementsov-Ogievskiy
2017-02-14 16:59 ` [Qemu-devel] [PATCH 06/25] block/dirty-bitmap: add deserialize_ones func Vladimir Sementsov-Ogievskiy
2017-02-14 16:59 ` [Qemu-devel] [PATCH 07/25] qcow2: add bitmaps extension Vladimir Sementsov-Ogievskiy
2017-02-14 16:59 ` [Qemu-devel] [PATCH 08/25] block: introduce auto-loading bitmaps Vladimir Sementsov-Ogievskiy
2017-02-14 16:59 ` [Qemu-devel] [PATCH 09/25] qcow2: add .bdrv_load_autoloading_dirty_bitmaps Vladimir Sementsov-Ogievskiy
2017-02-14 16:59 ` [Qemu-devel] [PATCH 10/25] block/dirty-bitmap: add autoload field to BdrvDirtyBitmap Vladimir Sementsov-Ogievskiy
2017-02-14 16:59 ` [Qemu-devel] [PATCH 11/25] block: introduce persistent dirty bitmaps Vladimir Sementsov-Ogievskiy
2017-02-14 16:59 ` [Qemu-devel] [PATCH 12/25] block/dirty-bitmap: add bdrv_dirty_bitmap_next() Vladimir Sementsov-Ogievskiy
2017-02-14 16:59 ` [Qemu-devel] [PATCH 13/25] qcow2: add .bdrv_store_persistent_dirty_bitmaps() Vladimir Sementsov-Ogievskiy
2017-02-14 19:22 ` John Snow
2017-02-14 16:59 ` [Qemu-devel] [PATCH 14/25] block: add bdrv_can_store_new_dirty_bitmap Vladimir Sementsov-Ogievskiy
2017-02-14 21:27 ` John Snow
2017-02-14 16:59 ` [Qemu-devel] [PATCH 15/25] qcow2: add .bdrv_can_store_new_dirty_bitmap Vladimir Sementsov-Ogievskiy
2017-02-14 22:07 ` John Snow
2017-02-14 16:59 ` [Qemu-devel] [PATCH 16/25] qmp: add persistent flag to block-dirty-bitmap-add Vladimir Sementsov-Ogievskiy
2017-02-14 22:37 ` John Snow
2017-02-14 16:59 ` [Qemu-devel] [PATCH 17/25] qmp: add autoload parameter " Vladimir Sementsov-Ogievskiy
2017-02-14 22:43 ` John Snow
2017-02-14 16:59 ` [Qemu-devel] [PATCH 18/25] qmp: add x-debug-block-dirty-bitmap-sha256 Vladimir Sementsov-Ogievskiy
2017-02-14 22:46 ` John Snow
2017-02-14 16:59 ` [Qemu-devel] [PATCH 19/25] iotests: test qcow2 persistent dirty bitmap Vladimir Sementsov-Ogievskiy
2017-02-14 23:01 ` John Snow
2017-02-14 16:59 ` [Qemu-devel] [PATCH 20/25] qcow2-refcount: rename inc_refcounts() and make it public Vladimir Sementsov-Ogievskiy
2017-02-14 23:08 ` John Snow
2017-02-14 16:59 ` [Qemu-devel] [PATCH 21/25] qcow2-bitmap: refcounts Vladimir Sementsov-Ogievskiy
2017-02-14 23:22 ` John Snow [this message]
2017-02-14 16:59 ` [Qemu-devel] [PATCH 22/25] block/dirty-bitmap: add bdrv_remove_persistent_dirty_bitmap Vladimir Sementsov-Ogievskiy
2017-02-14 23:43 ` John Snow
2017-02-14 16:59 ` [Qemu-devel] [PATCH 23/25] qcow2: add .bdrv_remove_persistent_dirty_bitmap Vladimir Sementsov-Ogievskiy
2017-02-15 0:19 ` John Snow
2017-02-14 16:59 ` [Qemu-devel] [PATCH 24/25] qmp: block-dirty-bitmap-remove: remove persistent Vladimir Sementsov-Ogievskiy
2017-02-15 0:29 ` John Snow
2017-02-14 16:59 ` [Qemu-devel] [PATCH 25/25] qcow2-bitmap: improve check_constraints_on_bitmap Vladimir Sementsov-Ogievskiy
2017-02-15 0:35 ` John Snow
2017-02-14 19:02 ` [Qemu-devel] [PATCH v14 00/24] qcow2: persistent dirty bitmaps John Snow
2017-02-14 21:44 ` 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=eee8fdbb-515d-c198-6da0-634c5e6657e6@redhat.com \
--to=jsnow@redhat.com \
--cc=armbru@redhat.com \
--cc=den@openvz.org \
--cc=famz@redhat.com \
--cc=kwolf@redhat.com \
--cc=mreitz@redhat.com \
--cc=pbonzini@redhat.com \
--cc=qemu-block@nongnu.org \
--cc=qemu-devel@nongnu.org \
--cc=stefanha@redhat.com \
--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).