Move the qcow2_check_bitmaps_refcounts function in order to be able to call update_ext_header_and_dir from this function in the following patch.
Signed-off-by: Jean-Louis Dupond <[email protected]> --- block/qcow2-bitmap.c | 154 +++++++++++++++++++++---------------------- 1 file changed, 77 insertions(+), 77 deletions(-) diff --git a/block/qcow2-bitmap.c b/block/qcow2-bitmap.c index 256ec99878..b87940bb43 100644 --- a/block/qcow2-bitmap.c +++ b/block/qcow2-bitmap.c @@ -652,83 +652,6 @@ fail: return NULL; } -int coroutine_fn -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 * BME_TABLE_ENTRY_SIZE); - 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; -} - /* bitmap_list_store * Store bitmap list to qcow2 image as a bitmap directory. * Everything is checked. @@ -1807,3 +1730,80 @@ uint64_t qcow2_get_persistent_dirty_bitmap_size(BlockDriverState *in_bs, return bitmaps_size; } + +int coroutine_fn +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 * BME_TABLE_ENTRY_SIZE); + 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; +} -- 2.54.0
