mirror of
https://github.com/qemu/qemu.git
synced 2024-11-23 19:03:38 +08:00
Count dirty blocks and expose an API to get dirty count
This will manage dirty counter for each device and will allow to get the dirty counter from above. Signed-off-by: Liran Schour <lirans@il.ibm.com> Signed-off-by: Anthony Liguori <aliguori@us.ibm.com>
This commit is contained in:
parent
d76cac7dfb
commit
aaa0eb75e2
12
block.c
12
block.c
@ -686,10 +686,16 @@ static void set_dirty_bitmap(BlockDriverState *bs, int64_t sector_num,
|
||||
bit = start % (sizeof(unsigned long) * 8);
|
||||
val = bs->dirty_bitmap[idx];
|
||||
if (dirty) {
|
||||
if (!(val & (1 << bit))) {
|
||||
bs->dirty_count++;
|
||||
val |= 1 << bit;
|
||||
}
|
||||
} else {
|
||||
if (val & (1 << bit)) {
|
||||
bs->dirty_count--;
|
||||
val &= ~(1 << bit);
|
||||
}
|
||||
}
|
||||
bs->dirty_bitmap[idx] = val;
|
||||
}
|
||||
}
|
||||
@ -2139,6 +2145,7 @@ void bdrv_set_dirty_tracking(BlockDriverState *bs, int enable)
|
||||
{
|
||||
int64_t bitmap_size;
|
||||
|
||||
bs->dirty_count = 0;
|
||||
if (enable) {
|
||||
if (!bs->dirty_bitmap) {
|
||||
bitmap_size = (bdrv_getlength(bs) >> BDRV_SECTOR_BITS) +
|
||||
@ -2173,3 +2180,8 @@ void bdrv_reset_dirty(BlockDriverState *bs, int64_t cur_sector,
|
||||
{
|
||||
set_dirty_bitmap(bs, cur_sector, nr_sectors, 0);
|
||||
}
|
||||
|
||||
int64_t bdrv_get_dirty_count(BlockDriverState *bs)
|
||||
{
|
||||
return bs->dirty_count;
|
||||
}
|
||||
|
1
block.h
1
block.h
@ -200,4 +200,5 @@ void bdrv_set_dirty_tracking(BlockDriverState *bs, int enable);
|
||||
int bdrv_get_dirty(BlockDriverState *bs, int64_t sector);
|
||||
void bdrv_reset_dirty(BlockDriverState *bs, int64_t cur_sector,
|
||||
int nr_sectors);
|
||||
int64_t bdrv_get_dirty_count(BlockDriverState *bs);
|
||||
#endif
|
||||
|
@ -175,6 +175,7 @@ struct BlockDriverState {
|
||||
int type;
|
||||
char device_name[32];
|
||||
unsigned long *dirty_bitmap;
|
||||
int64_t dirty_count;
|
||||
BlockDriverState *next;
|
||||
void *private;
|
||||
};
|
||||
|
Loading…
Reference in New Issue
Block a user