block/dirty-bitmap: introduce bdrv_dirty_bitmap_status()

Add a convenient function similar with bdrv_block_status() to get
status of dirty bitmap.

Signed-off-by: Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com>
Reviewed-by: Hanna Reitz <hreitz@redhat.com>
Message-Id: <20220303194349.2304213-9-vsementsov@virtuozzo.com>
Signed-off-by: Hanna Reitz <hreitz@redhat.com>
This commit is contained in:
Vladimir Sementsov-Ogievskiy 2022-03-03 20:43:41 +01:00 committed by Hanna Reitz
parent 84b1e80f67
commit a6426475a7
4 changed files with 53 additions and 0 deletions

View file

@ -301,6 +301,39 @@ bool hbitmap_next_dirty_area(const HBitmap *hb, int64_t start, int64_t end,
return true;
}
bool hbitmap_status(const HBitmap *hb, int64_t start, int64_t count,
int64_t *pnum)
{
int64_t next_dirty, next_zero;
assert(start >= 0);
assert(count > 0);
assert(start + count <= hb->orig_size);
next_dirty = hbitmap_next_dirty(hb, start, count);
if (next_dirty == -1) {
*pnum = count;
return false;
}
if (next_dirty > start) {
*pnum = next_dirty - start;
return false;
}
assert(next_dirty == start);
next_zero = hbitmap_next_zero(hb, start, count);
if (next_zero == -1) {
*pnum = count;
return true;
}
assert(next_zero > start);
*pnum = next_zero - start;
return false;
}
bool hbitmap_empty(const HBitmap *hb)
{
return hb->count == 0;