[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-block] [Qemu-devel] [PATCH 20/25] qcow2-refcount: rename inc_r
From: |
John Snow |
Subject: |
Re: [Qemu-block] [Qemu-devel] [PATCH 20/25] qcow2-refcount: rename inc_refcounts() and make it public |
Date: |
Tue, 14 Feb 2017 18:08:32 -0500 |
User-agent: |
Mozilla/5.0 (X11; Linux x86_64; rv:45.0) Gecko/20100101 Thunderbird/45.7.0 |
On 02/14/2017 11:59 AM, Vladimir Sementsov-Ogievskiy wrote:
> This is needed for the following patch, which will introduce refcounts
> checking for qcow2 bitmaps.
>
> Signed-off-by: Vladimir Sementsov-Ogievskiy <address@hidden>
> Reviewed-by: Max Reitz <address@hidden>
> ---
> block/qcow2-refcount.c | 53
> ++++++++++++++++++++++++++------------------------
> block/qcow2.h | 4 ++++
> 2 files changed, 32 insertions(+), 25 deletions(-)
>
> diff --git a/block/qcow2-refcount.c b/block/qcow2-refcount.c
> index cbfb3fe..14a736d 100644
> --- a/block/qcow2-refcount.c
> +++ b/block/qcow2-refcount.c
> @@ -1309,11 +1309,10 @@ static int realloc_refcount_array(BDRVQcow2State *s,
> void **array,
> *
> * Modifies the number of errors in res.
> */
> -static int inc_refcounts(BlockDriverState *bs,
> - BdrvCheckResult *res,
> - void **refcount_table,
> - int64_t *refcount_table_size,
> - int64_t offset, int64_t size)
> +int qcow2_inc_refcounts_imrt(BlockDriverState *bs, BdrvCheckResult *res,
> + void **refcount_table,
> + int64_t *refcount_table_size,
> + int64_t offset, int64_t size)
> {
> BDRVQcow2State *s = bs->opaque;
> uint64_t start, last, cluster_offset, k, refcount;
> @@ -1406,8 +1405,9 @@ static int check_refcounts_l2(BlockDriverState *bs,
> BdrvCheckResult *res,
> nb_csectors = ((l2_entry >> s->csize_shift) &
> s->csize_mask) + 1;
> l2_entry &= s->cluster_offset_mask;
> - ret = inc_refcounts(bs, res, refcount_table, refcount_table_size,
> - l2_entry & ~511, nb_csectors * 512);
> + ret = qcow2_inc_refcounts_imrt(bs, res,
> + refcount_table,
> refcount_table_size,
> + l2_entry & ~511, nb_csectors *
> 512);
> if (ret < 0) {
> goto fail;
> }
> @@ -1445,8 +1445,9 @@ static int check_refcounts_l2(BlockDriverState *bs,
> BdrvCheckResult *res,
> }
>
> /* Mark cluster as used */
> - ret = inc_refcounts(bs, res, refcount_table, refcount_table_size,
> - offset, s->cluster_size);
> + ret = qcow2_inc_refcounts_imrt(bs, res,
> + refcount_table,
> refcount_table_size,
> + offset, s->cluster_size);
> if (ret < 0) {
> goto fail;
> }
> @@ -1498,8 +1499,8 @@ static int check_refcounts_l1(BlockDriverState *bs,
> l1_size2 = l1_size * sizeof(uint64_t);
>
> /* Mark L1 table as used */
> - ret = inc_refcounts(bs, res, refcount_table, refcount_table_size,
> - l1_table_offset, l1_size2);
> + ret = qcow2_inc_refcounts_imrt(bs, res, refcount_table,
> refcount_table_size,
> + l1_table_offset, l1_size2);
> if (ret < 0) {
> goto fail;
> }
> @@ -1528,8 +1529,9 @@ static int check_refcounts_l1(BlockDriverState *bs,
> if (l2_offset) {
> /* Mark L2 table as used */
> l2_offset &= L1E_OFFSET_MASK;
> - ret = inc_refcounts(bs, res, refcount_table, refcount_table_size,
> - l2_offset, s->cluster_size);
> + ret = qcow2_inc_refcounts_imrt(bs, res,
> + refcount_table,
> refcount_table_size,
> + l2_offset, s->cluster_size);
> if (ret < 0) {
> goto fail;
> }
> @@ -1744,14 +1746,15 @@ static int check_refblocks(BlockDriverState *bs,
> BdrvCheckResult *res,
> }
>
> res->corruptions_fixed++;
> - ret = inc_refcounts(bs, res, refcount_table, nb_clusters,
> - offset, s->cluster_size);
> + ret = qcow2_inc_refcounts_imrt(bs, res,
> + refcount_table, nb_clusters,
> + offset, s->cluster_size);
> if (ret < 0) {
> return ret;
> }
> /* No need to check whether the refcount is now greater than
> 1:
> * This area was just allocated and zeroed, so it can only be
> - * exactly 1 after inc_refcounts() */
> + * exactly 1 after qcow2_inc_refcounts_imrt() */
> continue;
>
> resize_fail:
> @@ -1766,8 +1769,8 @@ resize_fail:
> }
>
> if (offset != 0) {
> - ret = inc_refcounts(bs, res, refcount_table, nb_clusters,
> - offset, s->cluster_size);
> + ret = qcow2_inc_refcounts_imrt(bs, res, refcount_table,
> nb_clusters,
> + offset, s->cluster_size);
> if (ret < 0) {
> return ret;
> }
> @@ -1807,8 +1810,8 @@ static int calculate_refcounts(BlockDriverState *bs,
> BdrvCheckResult *res,
> }
>
> /* header */
> - ret = inc_refcounts(bs, res, refcount_table, nb_clusters,
> - 0, s->cluster_size);
> + ret = qcow2_inc_refcounts_imrt(bs, res, refcount_table, nb_clusters,
> + 0, s->cluster_size);
> if (ret < 0) {
> return ret;
> }
> @@ -1829,16 +1832,16 @@ static int calculate_refcounts(BlockDriverState *bs,
> BdrvCheckResult *res,
> return ret;
> }
> }
> - ret = inc_refcounts(bs, res, refcount_table, nb_clusters,
> - s->snapshots_offset, s->snapshots_size);
> + ret = qcow2_inc_refcounts_imrt(bs, res, refcount_table, nb_clusters,
> + s->snapshots_offset, s->snapshots_size);
> if (ret < 0) {
> return ret;
> }
>
> /* refcount data */
> - ret = inc_refcounts(bs, res, refcount_table, nb_clusters,
> - s->refcount_table_offset,
> - s->refcount_table_size * sizeof(uint64_t));
> + ret = qcow2_inc_refcounts_imrt(bs, res, refcount_table, nb_clusters,
> + s->refcount_table_offset,
> + s->refcount_table_size *
> sizeof(uint64_t));
> if (ret < 0) {
> return ret;
> }
> diff --git a/block/qcow2.h b/block/qcow2.h
> index 749710d..0a3708d 100644
> --- a/block/qcow2.h
> +++ b/block/qcow2.h
> @@ -543,6 +543,10 @@ int qcow2_check_metadata_overlap(BlockDriverState *bs,
> int ign, int64_t offset,
> int64_t size);
> int qcow2_pre_write_overlap_check(BlockDriverState *bs, int ign, int64_t
> offset,
> int64_t size);
> +int qcow2_inc_refcounts_imrt(BlockDriverState *bs, BdrvCheckResult *res,
> + void **refcount_table,
> + int64_t *refcount_table_size,
> + int64_t offset, int64_t size);
>
> int qcow2_change_refcount_order(BlockDriverState *bs, int refcount_order,
> BlockDriverAmendStatusCB *status_cb,
>
Mechanically safe of course. Max and Kevin will be the experts for the
implications in qcow2-land. (And Max already gave his blessings!)
Reviewed-by: John Snow <address@hidden>
- [Qemu-block] [PATCH 01/25] specs/qcow2: fix bitmap granularity qemu-specific note, (continued)
- [Qemu-block] [PATCH 01/25] specs/qcow2: fix bitmap granularity qemu-specific note, Vladimir Sementsov-Ogievskiy, 2017/02/14
- [Qemu-block] [PATCH 08/25] block: introduce auto-loading bitmaps, Vladimir Sementsov-Ogievskiy, 2017/02/14
- [Qemu-block] [PATCH 23/25] qcow2: add .bdrv_remove_persistent_dirty_bitmap, Vladimir Sementsov-Ogievskiy, 2017/02/14
- [Qemu-block] [PATCH 07/25] qcow2: add bitmaps extension, Vladimir Sementsov-Ogievskiy, 2017/02/14
- [Qemu-block] [PATCH 19/25] iotests: test qcow2 persistent dirty bitmap, Vladimir Sementsov-Ogievskiy, 2017/02/14
- [Qemu-block] [PATCH 17/25] qmp: add autoload parameter to block-dirty-bitmap-add, Vladimir Sementsov-Ogievskiy, 2017/02/14
- [Qemu-block] [PATCH 20/25] qcow2-refcount: rename inc_refcounts() and make it public, Vladimir Sementsov-Ogievskiy, 2017/02/14
- Re: [Qemu-block] [Qemu-devel] [PATCH 20/25] qcow2-refcount: rename inc_refcounts() and make it public,
John Snow <=
- [Qemu-block] [PATCH 14/25] block: add bdrv_can_store_new_dirty_bitmap, Vladimir Sementsov-Ogievskiy, 2017/02/14
- [Qemu-block] [PATCH 10/25] block/dirty-bitmap: add autoload field to BdrvDirtyBitmap, Vladimir Sementsov-Ogievskiy, 2017/02/14
- [Qemu-block] [PATCH 15/25] qcow2: add .bdrv_can_store_new_dirty_bitmap, Vladimir Sementsov-Ogievskiy, 2017/02/14
- [Qemu-block] [PATCH 11/25] block: introduce persistent dirty bitmaps, Vladimir Sementsov-Ogievskiy, 2017/02/14
- [Qemu-block] [PATCH 03/25] hbitmap: improve dirty iter, Vladimir Sementsov-Ogievskiy, 2017/02/14
- [Qemu-block] [PATCH 13/25] qcow2: add .bdrv_store_persistent_dirty_bitmaps(), Vladimir Sementsov-Ogievskiy, 2017/02/14
- [Qemu-block] [PATCH 09/25] qcow2: add .bdrv_load_autoloading_dirty_bitmaps, Vladimir Sementsov-Ogievskiy, 2017/02/14