xref: /qemu/include/block/dirty-bitmap.h (revision 882c36f5902a28125e1f98ded74e1a0b3e05e342)
1ebab2259SFam Zheng #ifndef BLOCK_DIRTY_BITMAP_H
2ebab2259SFam Zheng #define BLOCK_DIRTY_BITMAP_H
3ebab2259SFam Zheng 
4ebab2259SFam Zheng #include "qemu-common.h"
5ebab2259SFam Zheng #include "qemu/hbitmap.h"
6ebab2259SFam Zheng 
7ebab2259SFam Zheng BdrvDirtyBitmap *bdrv_create_dirty_bitmap(BlockDriverState *bs,
8ebab2259SFam Zheng                                           uint32_t granularity,
9ebab2259SFam Zheng                                           const char *name,
10ebab2259SFam Zheng                                           Error **errp);
11fb933437SFam Zheng void bdrv_create_meta_dirty_bitmap(BdrvDirtyBitmap *bitmap,
12fb933437SFam Zheng                                    int chunk_size);
13fb933437SFam Zheng void bdrv_release_meta_dirty_bitmap(BdrvDirtyBitmap *bitmap);
14ebab2259SFam Zheng int bdrv_dirty_bitmap_create_successor(BlockDriverState *bs,
15ebab2259SFam Zheng                                        BdrvDirtyBitmap *bitmap,
16ebab2259SFam Zheng                                        Error **errp);
17ebab2259SFam Zheng BdrvDirtyBitmap *bdrv_dirty_bitmap_abdicate(BlockDriverState *bs,
18ebab2259SFam Zheng                                             BdrvDirtyBitmap *bitmap,
19ebab2259SFam Zheng                                             Error **errp);
20ebab2259SFam Zheng BdrvDirtyBitmap *bdrv_reclaim_dirty_bitmap(BlockDriverState *bs,
21ebab2259SFam Zheng                                            BdrvDirtyBitmap *bitmap,
22ebab2259SFam Zheng                                            Error **errp);
23ebab2259SFam Zheng BdrvDirtyBitmap *bdrv_find_dirty_bitmap(BlockDriverState *bs,
24ebab2259SFam Zheng                                         const char *name);
25ebab2259SFam Zheng void bdrv_dirty_bitmap_make_anon(BdrvDirtyBitmap *bitmap);
26ebab2259SFam Zheng void bdrv_release_dirty_bitmap(BlockDriverState *bs, BdrvDirtyBitmap *bitmap);
27ebab2259SFam Zheng void bdrv_release_named_dirty_bitmaps(BlockDriverState *bs);
28ebab2259SFam Zheng void bdrv_disable_dirty_bitmap(BdrvDirtyBitmap *bitmap);
29ebab2259SFam Zheng void bdrv_enable_dirty_bitmap(BdrvDirtyBitmap *bitmap);
30ebab2259SFam Zheng BlockDirtyInfoList *bdrv_query_dirty_bitmaps(BlockDriverState *bs);
31ebab2259SFam Zheng uint32_t bdrv_get_default_bitmap_granularity(BlockDriverState *bs);
32ebab2259SFam Zheng uint32_t bdrv_dirty_bitmap_granularity(BdrvDirtyBitmap *bitmap);
33ebab2259SFam Zheng bool bdrv_dirty_bitmap_enabled(BdrvDirtyBitmap *bitmap);
34ebab2259SFam Zheng bool bdrv_dirty_bitmap_frozen(BdrvDirtyBitmap *bitmap);
3515891facSFam Zheng const char *bdrv_dirty_bitmap_name(const BdrvDirtyBitmap *bitmap);
3615891facSFam Zheng int64_t bdrv_dirty_bitmap_size(const BdrvDirtyBitmap *bitmap);
37ebab2259SFam Zheng DirtyBitmapStatus bdrv_dirty_bitmap_status(BdrvDirtyBitmap *bitmap);
38ebab2259SFam Zheng int bdrv_get_dirty(BlockDriverState *bs, BdrvDirtyBitmap *bitmap,
39ebab2259SFam Zheng                    int64_t sector);
40ebab2259SFam Zheng void bdrv_set_dirty_bitmap(BdrvDirtyBitmap *bitmap,
416d078599SDenis V. Lunev                            int64_t cur_sector, int64_t nr_sectors);
42ebab2259SFam Zheng void bdrv_reset_dirty_bitmap(BdrvDirtyBitmap *bitmap,
436d078599SDenis V. Lunev                              int64_t cur_sector, int64_t nr_sectors);
44fb933437SFam Zheng int bdrv_dirty_bitmap_get_meta(BlockDriverState *bs,
45fb933437SFam Zheng                                BdrvDirtyBitmap *bitmap, int64_t sector,
46fb933437SFam Zheng                                int nb_sectors);
47fb933437SFam Zheng void bdrv_dirty_bitmap_reset_meta(BlockDriverState *bs,
48fb933437SFam Zheng                                   BdrvDirtyBitmap *bitmap, int64_t sector,
49fb933437SFam Zheng                                   int nb_sectors);
50dc162c8eSFam Zheng BdrvDirtyBitmapIter *bdrv_dirty_iter_new(BdrvDirtyBitmap *bitmap,
51dc162c8eSFam Zheng                                          uint64_t first_sector);
52dc162c8eSFam Zheng void bdrv_dirty_iter_free(BdrvDirtyBitmapIter *iter);
53dc162c8eSFam Zheng int64_t bdrv_dirty_iter_next(BdrvDirtyBitmapIter *iter);
54dc162c8eSFam Zheng void bdrv_set_dirty_iter(BdrvDirtyBitmapIter *hbi, int64_t sector_num);
55ebab2259SFam Zheng int64_t bdrv_get_dirty_count(BdrvDirtyBitmap *bitmap);
56ebab2259SFam Zheng void bdrv_dirty_bitmap_truncate(BlockDriverState *bs);
57ebab2259SFam Zheng 
58*882c36f5SVladimir Sementsov-Ogievskiy uint64_t bdrv_dirty_bitmap_serialization_size(const BdrvDirtyBitmap *bitmap,
59*882c36f5SVladimir Sementsov-Ogievskiy                                               uint64_t start, uint64_t count);
60*882c36f5SVladimir Sementsov-Ogievskiy uint64_t bdrv_dirty_bitmap_serialization_align(const BdrvDirtyBitmap *bitmap);
61*882c36f5SVladimir Sementsov-Ogievskiy void bdrv_dirty_bitmap_serialize_part(const BdrvDirtyBitmap *bitmap,
62*882c36f5SVladimir Sementsov-Ogievskiy                                       uint8_t *buf, uint64_t start,
63*882c36f5SVladimir Sementsov-Ogievskiy                                       uint64_t count);
64*882c36f5SVladimir Sementsov-Ogievskiy void bdrv_dirty_bitmap_deserialize_part(BdrvDirtyBitmap *bitmap,
65*882c36f5SVladimir Sementsov-Ogievskiy                                         uint8_t *buf, uint64_t start,
66*882c36f5SVladimir Sementsov-Ogievskiy                                         uint64_t count, bool finish);
67*882c36f5SVladimir Sementsov-Ogievskiy void bdrv_dirty_bitmap_deserialize_zeroes(BdrvDirtyBitmap *bitmap,
68*882c36f5SVladimir Sementsov-Ogievskiy                                           uint64_t start, uint64_t count,
69*882c36f5SVladimir Sementsov-Ogievskiy                                           bool finish);
70*882c36f5SVladimir Sementsov-Ogievskiy void bdrv_dirty_bitmap_deserialize_finish(BdrvDirtyBitmap *bitmap);
71*882c36f5SVladimir Sementsov-Ogievskiy 
72ebab2259SFam Zheng #endif
73