Re: [PATCH 1/5] qcow2-bitmap: make bytes_covered_by_bitmap_cluster() public
On 2/16/21 7:45 PM, Vladimir Sementsov-Ogievskiy wrote: > Rename bytes_covered_by_bitmap_cluster() to > bdrv_dirty_bitmap_serialization_coverage() and make it public. It is > needed as we are going to make load_bitmap_data() public in the next > commit. > > Signed-off-by: Vladimir Sementsov-Ogievskiy > --- > include/block/dirty-bitmap.h | 2 ++ > block/dirty-bitmap.c | 13 + > block/qcow2-bitmap.c | 16 ++-- > 3 files changed, 17 insertions(+), 14 deletions(-) > > diff --git a/include/block/dirty-bitmap.h b/include/block/dirty-bitmap.h > index 36e8da4fc2..f581cf9fd7 100644 > --- a/include/block/dirty-bitmap.h > +++ b/include/block/dirty-bitmap.h > @@ -57,6 +57,8 @@ void bdrv_dirty_iter_free(BdrvDirtyBitmapIter *iter); > uint64_t bdrv_dirty_bitmap_serialization_size(const BdrvDirtyBitmap *bitmap, >uint64_t offset, uint64_t > bytes); > uint64_t bdrv_dirty_bitmap_serialization_align(const BdrvDirtyBitmap > *bitmap); > +uint64_t bdrv_dirty_bitmap_serialization_coverage(int serialized_chunk_size, > +const BdrvDirtyBitmap *bitmap); > void bdrv_dirty_bitmap_serialize_part(const BdrvDirtyBitmap *bitmap, >uint8_t *buf, uint64_t offset, >uint64_t bytes); > diff --git a/block/dirty-bitmap.c b/block/dirty-bitmap.c > index 9b9cd71238..a0eaa28785 100644 > --- a/block/dirty-bitmap.c > +++ b/block/dirty-bitmap.c > @@ -726,6 +726,19 @@ uint64_t bdrv_dirty_bitmap_serialization_align(const > BdrvDirtyBitmap *bitmap) > return hbitmap_serialization_align(bitmap->bitmap); > } > > +/* Return the disk size covered by a chunk of serialized bitmap data. */ > +uint64_t bdrv_dirty_bitmap_serialization_coverage(int serialized_chunk_size, > + const BdrvDirtyBitmap > *bitmap) > +{ > +uint64_t granularity = bdrv_dirty_bitmap_granularity(bitmap); > +uint64_t limit = granularity * (serialized_chunk_size << 3); > + > +assert(QEMU_IS_ALIGNED(limit, > + bdrv_dirty_bitmap_serialization_align(bitmap))); > +return limit; > +} > + > + > void bdrv_dirty_bitmap_serialize_part(const BdrvDirtyBitmap *bitmap, >uint8_t *buf, uint64_t offset, >uint64_t bytes) > diff --git a/block/qcow2-bitmap.c b/block/qcow2-bitmap.c > index 5eef82fa55..42d81c44cd 100644 > --- a/block/qcow2-bitmap.c > +++ b/block/qcow2-bitmap.c > @@ -278,18 +278,6 @@ static int free_bitmap_clusters(BlockDriverState *bs, > Qcow2BitmapTable *tb) > return 0; > } > > -/* Return the disk size covered by a single qcow2 cluster of bitmap data. */ > -static uint64_t bytes_covered_by_bitmap_cluster(const BDRVQcow2State *s, > -const BdrvDirtyBitmap > *bitmap) > -{ > -uint64_t granularity = bdrv_dirty_bitmap_granularity(bitmap); > -uint64_t limit = granularity * (s->cluster_size << 3); > - > -assert(QEMU_IS_ALIGNED(limit, > - bdrv_dirty_bitmap_serialization_align(bitmap))); > -return limit; > -} > - > /* load_bitmap_data > * @bitmap_table entries must satisfy specification constraints. > * @bitmap must be cleared */ > @@ -312,7 +300,7 @@ static int load_bitmap_data(BlockDriverState *bs, > } > > buf = g_malloc(s->cluster_size); > -limit = bytes_covered_by_bitmap_cluster(s, bitmap); > +limit = bdrv_dirty_bitmap_serialization_coverage(s->cluster_size, > bitmap); > for (i = 0, offset = 0; i < tab_size; ++i, offset += limit) { > uint64_t count = MIN(bm_size - offset, limit); > uint64_t entry = bitmap_table[i]; > @@ -1303,7 +1291,7 @@ static uint64_t *store_bitmap_data(BlockDriverState *bs, > } > > buf = g_malloc(s->cluster_size); > -limit = bytes_covered_by_bitmap_cluster(s, bitmap); > +limit = bdrv_dirty_bitmap_serialization_coverage(s->cluster_size, > bitmap); > assert(DIV_ROUND_UP(bm_size, limit) == tb_size); > > offset = 0; Reviewed-by: Denis V. Lunev
Re: [PATCH 1/5] qcow2-bitmap: make bytes_covered_by_bitmap_cluster() public
16.02.2021 19:45, Vladimir Sementsov-Ogievskiy wrote: Rename bytes_covered_by_bitmap_cluster() to bdrv_dirty_bitmap_serialization_coverage() and make it public. It is needed as we are going to make load_bitmap_data() public in the next commit. Not we are not. So the last sentence should be changed to It is needed as we are going to share it with bitmap loading in parallels format. I started from sharing load_bitmap_data() function, but than dropped this idea. Signed-off-by: Vladimir Sementsov-Ogievskiy --- include/block/dirty-bitmap.h | 2 ++ block/dirty-bitmap.c | 13 + block/qcow2-bitmap.c | 16 ++-- 3 files changed, 17 insertions(+), 14 deletions(-) diff --git a/include/block/dirty-bitmap.h b/include/block/dirty-bitmap.h index 36e8da4fc2..f581cf9fd7 100644 --- a/include/block/dirty-bitmap.h +++ b/include/block/dirty-bitmap.h @@ -57,6 +57,8 @@ void bdrv_dirty_iter_free(BdrvDirtyBitmapIter *iter); uint64_t bdrv_dirty_bitmap_serialization_size(const BdrvDirtyBitmap *bitmap, uint64_t offset, uint64_t bytes); uint64_t bdrv_dirty_bitmap_serialization_align(const BdrvDirtyBitmap *bitmap); +uint64_t bdrv_dirty_bitmap_serialization_coverage(int serialized_chunk_size, +const BdrvDirtyBitmap *bitmap); void bdrv_dirty_bitmap_serialize_part(const BdrvDirtyBitmap *bitmap, uint8_t *buf, uint64_t offset, uint64_t bytes); diff --git a/block/dirty-bitmap.c b/block/dirty-bitmap.c index 9b9cd71238..a0eaa28785 100644 --- a/block/dirty-bitmap.c +++ b/block/dirty-bitmap.c @@ -726,6 +726,19 @@ uint64_t bdrv_dirty_bitmap_serialization_align(const BdrvDirtyBitmap *bitmap) return hbitmap_serialization_align(bitmap->bitmap); } +/* Return the disk size covered by a chunk of serialized bitmap data. */ +uint64_t bdrv_dirty_bitmap_serialization_coverage(int serialized_chunk_size, + const BdrvDirtyBitmap *bitmap) +{ +uint64_t granularity = bdrv_dirty_bitmap_granularity(bitmap); +uint64_t limit = granularity * (serialized_chunk_size << 3); + +assert(QEMU_IS_ALIGNED(limit, + bdrv_dirty_bitmap_serialization_align(bitmap))); +return limit; +} + + void bdrv_dirty_bitmap_serialize_part(const BdrvDirtyBitmap *bitmap, uint8_t *buf, uint64_t offset, uint64_t bytes) diff --git a/block/qcow2-bitmap.c b/block/qcow2-bitmap.c index 5eef82fa55..42d81c44cd 100644 --- a/block/qcow2-bitmap.c +++ b/block/qcow2-bitmap.c @@ -278,18 +278,6 @@ static int free_bitmap_clusters(BlockDriverState *bs, Qcow2BitmapTable *tb) return 0; } -/* Return the disk size covered by a single qcow2 cluster of bitmap data. */ -static uint64_t bytes_covered_by_bitmap_cluster(const BDRVQcow2State *s, -const BdrvDirtyBitmap *bitmap) -{ -uint64_t granularity = bdrv_dirty_bitmap_granularity(bitmap); -uint64_t limit = granularity * (s->cluster_size << 3); - -assert(QEMU_IS_ALIGNED(limit, - bdrv_dirty_bitmap_serialization_align(bitmap))); -return limit; -} - /* load_bitmap_data * @bitmap_table entries must satisfy specification constraints. * @bitmap must be cleared */ @@ -312,7 +300,7 @@ static int load_bitmap_data(BlockDriverState *bs, } buf = g_malloc(s->cluster_size); -limit = bytes_covered_by_bitmap_cluster(s, bitmap); +limit = bdrv_dirty_bitmap_serialization_coverage(s->cluster_size, bitmap); for (i = 0, offset = 0; i < tab_size; ++i, offset += limit) { uint64_t count = MIN(bm_size - offset, limit); uint64_t entry = bitmap_table[i]; @@ -1303,7 +1291,7 @@ static uint64_t *store_bitmap_data(BlockDriverState *bs, } buf = g_malloc(s->cluster_size); -limit = bytes_covered_by_bitmap_cluster(s, bitmap); +limit = bdrv_dirty_bitmap_serialization_coverage(s->cluster_size, bitmap); assert(DIV_ROUND_UP(bm_size, limit) == tb_size); offset = 0; -- Best regards, Vladimir
Re: [PATCH 1/5] qcow2-bitmap: make bytes_covered_by_bitmap_cluster() public
On 2/16/21 10:45 AM, Vladimir Sementsov-Ogievskiy wrote: > Rename bytes_covered_by_bitmap_cluster() to > bdrv_dirty_bitmap_serialization_coverage() and make it public. It is > needed as we are going to make load_bitmap_data() public in the next > commit. > > Signed-off-by: Vladimir Sementsov-Ogievskiy > --- > include/block/dirty-bitmap.h | 2 ++ > block/dirty-bitmap.c | 13 + > block/qcow2-bitmap.c | 16 ++-- > 3 files changed, 17 insertions(+), 14 deletions(-) > Reviewed-by: Eric Blake -- Eric Blake, Principal Software Engineer Red Hat, Inc. +1-919-301-3226 Virtualization: qemu.org | libvirt.org