[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-devel] [PATCH 05/12] dirty-bitmap: Set iterator start by offse
From: |
John Snow |
Subject: |
Re: [Qemu-devel] [PATCH 05/12] dirty-bitmap: Set iterator start by offset, not sector |
Date: |
Wed, 12 Apr 2017 20:00:01 -0400 |
User-agent: |
Mozilla/5.0 (X11; Linux x86_64; rv:45.0) Gecko/20100101 Thunderbird/45.8.0 |
On 04/12/2017 01:49 PM, Eric Blake wrote:
> All callers to bdrv_dirty_iter_new() passed 0 for their initial
> starting point, drop that parameter.
>
> All callers to bdrv_set_dirty_iter() were scaling an offset to
> a sector number; move the scaling to occur internally to dirty
> bitmap code instead.
>
> Signed-off-by: Eric Blake <address@hidden>
> ---
> include/block/dirty-bitmap.h | 5 ++---
> block/backup.c | 5 ++---
> block/dirty-bitmap.c | 9 ++++-----
> block/mirror.c | 4 ++--
> 4 files changed, 10 insertions(+), 13 deletions(-)
>
> diff --git a/include/block/dirty-bitmap.h b/include/block/dirty-bitmap.h
> index a83979d..efcec60 100644
> --- a/include/block/dirty-bitmap.h
> +++ b/include/block/dirty-bitmap.h
> @@ -41,11 +41,10 @@ void bdrv_set_dirty_bitmap(BdrvDirtyBitmap *bitmap,
> void bdrv_reset_dirty_bitmap(BdrvDirtyBitmap *bitmap,
> int64_t cur_sector, int64_t nr_sectors);
> BdrvDirtyBitmapIter *bdrv_dirty_meta_iter_new(BdrvDirtyBitmap *bitmap);
> -BdrvDirtyBitmapIter *bdrv_dirty_iter_new(BdrvDirtyBitmap *bitmap,
> - uint64_t first_sector);
> +BdrvDirtyBitmapIter *bdrv_dirty_iter_new(BdrvDirtyBitmap *bitmap);
> void bdrv_dirty_iter_free(BdrvDirtyBitmapIter *iter);
> int64_t bdrv_dirty_iter_next(BdrvDirtyBitmapIter *iter);
> -void bdrv_set_dirty_iter(BdrvDirtyBitmapIter *hbi, int64_t sector_num);
> +void bdrv_set_dirty_iter(BdrvDirtyBitmapIter *hbi, int64_t offset);
> int64_t bdrv_get_dirty_count(BdrvDirtyBitmap *bitmap);
> int64_t bdrv_get_meta_dirty_count(BdrvDirtyBitmap *bitmap);
> void bdrv_dirty_bitmap_truncate(BlockDriverState *bs);
> diff --git a/block/backup.c b/block/backup.c
> index 63ca208..efa4896 100644
> --- a/block/backup.c
> +++ b/block/backup.c
> @@ -372,7 +372,7 @@ static int coroutine_fn
> backup_run_incremental(BackupBlockJob *job)
>
> granularity = bdrv_dirty_bitmap_granularity(job->sync_bitmap);
> clusters_per_iter = MAX((granularity / job->cluster_size), 1);
> - dbi = bdrv_dirty_iter_new(job->sync_bitmap, 0);
> + dbi = bdrv_dirty_iter_new(job->sync_bitmap);
>
> /* Find the next dirty sector(s) */
> while ((offset = bdrv_dirty_iter_next(dbi) * BDRV_SECTOR_SIZE) >= 0) {
> @@ -403,8 +403,7 @@ static int coroutine_fn
> backup_run_incremental(BackupBlockJob *job)
> /* If the bitmap granularity is smaller than the backup granularity,
> * we need to advance the iterator pointer to the next cluster. */
> if (granularity < job->cluster_size) {
> - bdrv_set_dirty_iter(dbi,
> - cluster * job->cluster_size /
> BDRV_SECTOR_SIZE);
> + bdrv_set_dirty_iter(dbi, cluster * job->cluster_size);
> }
>
> last_cluster = cluster - 1;
> diff --git a/block/dirty-bitmap.c b/block/dirty-bitmap.c
> index a413df1..3fb4871 100644
> --- a/block/dirty-bitmap.c
> +++ b/block/dirty-bitmap.c
> @@ -367,11 +367,10 @@ uint32_t bdrv_dirty_bitmap_granularity(BdrvDirtyBitmap
> *bitmap)
> return BDRV_SECTOR_SIZE << hbitmap_granularity(bitmap->bitmap);
> }
>
> -BdrvDirtyBitmapIter *bdrv_dirty_iter_new(BdrvDirtyBitmap *bitmap,
> - uint64_t first_sector)
> +BdrvDirtyBitmapIter *bdrv_dirty_iter_new(BdrvDirtyBitmap *bitmap)
> {
> BdrvDirtyBitmapIter *iter = g_new(BdrvDirtyBitmapIter, 1);
> - hbitmap_iter_init(&iter->hbi, bitmap->bitmap, first_sector);
> + hbitmap_iter_init(&iter->hbi, bitmap->bitmap, 0);
> iter->bitmap = bitmap;
> bitmap->active_iterators++;
> return iter;
> @@ -488,9 +487,9 @@ void bdrv_set_dirty(BlockDriverState *bs, int64_t
> cur_sector,
> /**
> * Advance a BdrvDirtyBitmapIter to an arbitrary offset.
> */
> -void bdrv_set_dirty_iter(BdrvDirtyBitmapIter *iter, int64_t sector_num)
> +void bdrv_set_dirty_iter(BdrvDirtyBitmapIter *iter, int64_t offset)
> {
> - hbitmap_iter_init(&iter->hbi, iter->hbi.hb, sector_num);
> + hbitmap_iter_init(&iter->hbi, iter->hbi.hb, offset >> BDRV_SECTOR_BITS);
> }
>
> int64_t bdrv_get_dirty_count(BdrvDirtyBitmap *bitmap)
> diff --git a/block/mirror.c b/block/mirror.c
> index c92335a..7c1d6bf 100644
> --- a/block/mirror.c
> +++ b/block/mirror.c
> @@ -370,7 +370,7 @@ static uint64_t coroutine_fn
> mirror_iteration(MirrorBlockJob *s)
> next_dirty = bdrv_dirty_iter_next(s->dbi) * BDRV_SECTOR_SIZE;
> if (next_dirty > next_offset || next_dirty < 0) {
> /* The bitmap iterator's cache is stale, refresh it */
> - bdrv_set_dirty_iter(s->dbi, next_offset >> BDRV_SECTOR_BITS);
> + bdrv_set_dirty_iter(s->dbi, next_offset);
> next_dirty = bdrv_dirty_iter_next(s->dbi) * BDRV_SECTOR_SIZE;
> }
> assert(next_dirty == next_offset);
> @@ -779,7 +779,7 @@ static void coroutine_fn mirror_run(void *opaque)
> }
>
> assert(!s->dbi);
> - s->dbi = bdrv_dirty_iter_new(s->dirty_bitmap, 0);
> + s->dbi = bdrv_dirty_iter_new(s->dirty_bitmap);
> for (;;) {
> uint64_t delay_ns = 0;
> int64_t cnt, delta;
>
Reviewed-by: John Snow <address@hidden>
- Re: [Qemu-devel] [PATCH 02/12] migration: Don't lose errno across aio context changes, (continued)
- [Qemu-devel] [PATCH 04/12] dirty-bitmap: Track size in bytes, Eric Blake, 2017/04/12
- [Qemu-devel] [PATCH 06/12] dirty-bitmap: Change bdrv_dirty_iter_next() to report byte offset, Eric Blake, 2017/04/12
- [Qemu-devel] [PATCH 05/12] dirty-bitmap: Set iterator start by offset, not sector, Eric Blake, 2017/04/12
- Re: [Qemu-devel] [PATCH 05/12] dirty-bitmap: Set iterator start by offset, not sector,
John Snow <=
- [Qemu-devel] [PATCH 08/12] dirty-bitmap: Change bdrv_get_dirty() to take bytes, Eric Blake, 2017/04/12
- [Qemu-devel] [PATCH 07/12] dirty-bitmap: Change bdrv_get_dirty_count() to report bytes, Eric Blake, 2017/04/12
- [Qemu-devel] [PATCH 09/12] dirty-bitmap: Change bdrv_[re]set_dirty_bitmap() to use bytes, Eric Blake, 2017/04/12
- [Qemu-devel] [PATCH 10/12] mirror: Switch mirror_dirty_init() to byte-based iteration, Eric Blake, 2017/04/12