block/dirty-bitmap: add bdrv_dirty_bitmap_get
Add a public interface for get. While we're at it, rename "bdrv_get_dirty_bitmap_locked" to "bdrv_dirty_bitmap_get_locked". (There are more functions to rename to the bdrv_dirty_bitmap_VERB form, but they will wait until the conclusion of this series.) Signed-off-by: John Snow <jsnow@redhat.com> Reviewed-by: Max Reitz <mreitz@redhat.com> Message-id: 20190709232550.10724-11-jsnow@redhat.com Signed-off-by: John Snow <jsnow@redhat.com>
This commit is contained in:
parent
b7661ca5d8
commit
28636b8211
@ -509,14 +509,19 @@ BlockDirtyInfoList *bdrv_query_dirty_bitmaps(BlockDriverState *bs)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* Called within bdrv_dirty_bitmap_lock..unlock */
|
/* Called within bdrv_dirty_bitmap_lock..unlock */
|
||||||
bool bdrv_get_dirty_locked(BlockDriverState *bs, BdrvDirtyBitmap *bitmap,
|
bool bdrv_dirty_bitmap_get_locked(BdrvDirtyBitmap *bitmap, int64_t offset)
|
||||||
int64_t offset)
|
|
||||||
{
|
{
|
||||||
if (bitmap) {
|
return hbitmap_get(bitmap->bitmap, offset);
|
||||||
return hbitmap_get(bitmap->bitmap, offset);
|
}
|
||||||
} else {
|
|
||||||
return false;
|
bool bdrv_dirty_bitmap_get(BdrvDirtyBitmap *bitmap, int64_t offset)
|
||||||
}
|
{
|
||||||
|
bool ret;
|
||||||
|
bdrv_dirty_bitmap_lock(bitmap);
|
||||||
|
ret = bdrv_dirty_bitmap_get_locked(bitmap, offset);
|
||||||
|
bdrv_dirty_bitmap_unlock(bitmap);
|
||||||
|
|
||||||
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -476,7 +476,7 @@ static uint64_t coroutine_fn mirror_iteration(MirrorBlockJob *s)
|
|||||||
int64_t next_offset = offset + nb_chunks * s->granularity;
|
int64_t next_offset = offset + nb_chunks * s->granularity;
|
||||||
int64_t next_chunk = next_offset / s->granularity;
|
int64_t next_chunk = next_offset / s->granularity;
|
||||||
if (next_offset >= s->bdev_length ||
|
if (next_offset >= s->bdev_length ||
|
||||||
!bdrv_get_dirty_locked(source, s->dirty_bitmap, next_offset)) {
|
!bdrv_dirty_bitmap_get_locked(s->dirty_bitmap, next_offset)) {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
if (test_bit(next_chunk, s->in_flight_bitmap)) {
|
if (test_bit(next_chunk, s->in_flight_bitmap)) {
|
||||||
|
@ -84,12 +84,12 @@ void bdrv_dirty_bitmap_set_busy(BdrvDirtyBitmap *bitmap, bool busy);
|
|||||||
void bdrv_merge_dirty_bitmap(BdrvDirtyBitmap *dest, const BdrvDirtyBitmap *src,
|
void bdrv_merge_dirty_bitmap(BdrvDirtyBitmap *dest, const BdrvDirtyBitmap *src,
|
||||||
HBitmap **backup, Error **errp);
|
HBitmap **backup, Error **errp);
|
||||||
void bdrv_dirty_bitmap_set_migration(BdrvDirtyBitmap *bitmap, bool migration);
|
void bdrv_dirty_bitmap_set_migration(BdrvDirtyBitmap *bitmap, bool migration);
|
||||||
|
bool bdrv_dirty_bitmap_get(BdrvDirtyBitmap *bitmap, int64_t offset);
|
||||||
|
|
||||||
/* Functions that require manual locking. */
|
/* Functions that require manual locking. */
|
||||||
void bdrv_dirty_bitmap_lock(BdrvDirtyBitmap *bitmap);
|
void bdrv_dirty_bitmap_lock(BdrvDirtyBitmap *bitmap);
|
||||||
void bdrv_dirty_bitmap_unlock(BdrvDirtyBitmap *bitmap);
|
void bdrv_dirty_bitmap_unlock(BdrvDirtyBitmap *bitmap);
|
||||||
bool bdrv_get_dirty_locked(BlockDriverState *bs, BdrvDirtyBitmap *bitmap,
|
bool bdrv_dirty_bitmap_get_locked(BdrvDirtyBitmap *bitmap, int64_t offset);
|
||||||
int64_t offset);
|
|
||||||
void bdrv_set_dirty_bitmap_locked(BdrvDirtyBitmap *bitmap,
|
void bdrv_set_dirty_bitmap_locked(BdrvDirtyBitmap *bitmap,
|
||||||
int64_t offset, int64_t bytes);
|
int64_t offset, int64_t bytes);
|
||||||
void bdrv_reset_dirty_bitmap_locked(BdrvDirtyBitmap *bitmap,
|
void bdrv_reset_dirty_bitmap_locked(BdrvDirtyBitmap *bitmap,
|
||||||
|
@ -521,7 +521,6 @@ static int mig_save_device_dirty(QEMUFile *f, BlkMigDevState *bmds,
|
|||||||
int is_async)
|
int is_async)
|
||||||
{
|
{
|
||||||
BlkMigBlock *blk;
|
BlkMigBlock *blk;
|
||||||
BlockDriverState *bs = blk_bs(bmds->blk);
|
|
||||||
int64_t total_sectors = bmds->total_sectors;
|
int64_t total_sectors = bmds->total_sectors;
|
||||||
int64_t sector;
|
int64_t sector;
|
||||||
int nr_sectors;
|
int nr_sectors;
|
||||||
@ -536,8 +535,8 @@ static int mig_save_device_dirty(QEMUFile *f, BlkMigDevState *bmds,
|
|||||||
blk_mig_unlock();
|
blk_mig_unlock();
|
||||||
}
|
}
|
||||||
bdrv_dirty_bitmap_lock(bmds->dirty_bitmap);
|
bdrv_dirty_bitmap_lock(bmds->dirty_bitmap);
|
||||||
if (bdrv_get_dirty_locked(bs, bmds->dirty_bitmap,
|
if (bdrv_dirty_bitmap_get_locked(bmds->dirty_bitmap,
|
||||||
sector * BDRV_SECTOR_SIZE)) {
|
sector * BDRV_SECTOR_SIZE)) {
|
||||||
if (total_sectors - sector < BDRV_SECTORS_PER_DIRTY_CHUNK) {
|
if (total_sectors - sector < BDRV_SECTORS_PER_DIRTY_CHUNK) {
|
||||||
nr_sectors = total_sectors - sector;
|
nr_sectors = total_sectors - sector;
|
||||||
} else {
|
} else {
|
||||||
|
@ -2004,7 +2004,7 @@ static unsigned int bitmap_to_extents(BdrvDirtyBitmap *bitmap, uint64_t offset,
|
|||||||
bdrv_dirty_bitmap_lock(bitmap);
|
bdrv_dirty_bitmap_lock(bitmap);
|
||||||
|
|
||||||
it = bdrv_dirty_iter_new(bitmap);
|
it = bdrv_dirty_iter_new(bitmap);
|
||||||
dirty = bdrv_get_dirty_locked(NULL, bitmap, offset);
|
dirty = bdrv_dirty_bitmap_get_locked(bitmap, offset);
|
||||||
|
|
||||||
assert(begin < overall_end && nb_extents);
|
assert(begin < overall_end && nb_extents);
|
||||||
while (begin < overall_end && i < nb_extents) {
|
while (begin < overall_end && i < nb_extents) {
|
||||||
|
Loading…
Reference in New Issue
Block a user