xref: /qemu/include/block/dirty-bitmap.h (revision 6d3f4049ba532b01ff738f9e5a66df1477c5ffdd)
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);
33*6d3f4049SFam Zheng uint32_t bdrv_dirty_bitmap_meta_granularity(BdrvDirtyBitmap *bitmap);
34ebab2259SFam Zheng bool bdrv_dirty_bitmap_enabled(BdrvDirtyBitmap *bitmap);
35ebab2259SFam Zheng bool bdrv_dirty_bitmap_frozen(BdrvDirtyBitmap *bitmap);
3615891facSFam Zheng const char *bdrv_dirty_bitmap_name(const BdrvDirtyBitmap *bitmap);
3715891facSFam Zheng int64_t bdrv_dirty_bitmap_size(const BdrvDirtyBitmap *bitmap);
38ebab2259SFam Zheng DirtyBitmapStatus bdrv_dirty_bitmap_status(BdrvDirtyBitmap *bitmap);
39ebab2259SFam Zheng int bdrv_get_dirty(BlockDriverState *bs, BdrvDirtyBitmap *bitmap,
40ebab2259SFam Zheng                    int64_t sector);
41ebab2259SFam Zheng void bdrv_set_dirty_bitmap(BdrvDirtyBitmap *bitmap,
426d078599SDenis V. Lunev                            int64_t cur_sector, int64_t nr_sectors);
43ebab2259SFam Zheng void bdrv_reset_dirty_bitmap(BdrvDirtyBitmap *bitmap,
446d078599SDenis V. Lunev                              int64_t cur_sector, int64_t nr_sectors);
45fb933437SFam Zheng int bdrv_dirty_bitmap_get_meta(BlockDriverState *bs,
46fb933437SFam Zheng                                BdrvDirtyBitmap *bitmap, int64_t sector,
47fb933437SFam Zheng                                int nb_sectors);
48fb933437SFam Zheng void bdrv_dirty_bitmap_reset_meta(BlockDriverState *bs,
49fb933437SFam Zheng                                   BdrvDirtyBitmap *bitmap, int64_t sector,
50fb933437SFam Zheng                                   int nb_sectors);
51*6d3f4049SFam Zheng BdrvDirtyBitmapIter *bdrv_dirty_meta_iter_new(BdrvDirtyBitmap *bitmap);
52dc162c8eSFam Zheng BdrvDirtyBitmapIter *bdrv_dirty_iter_new(BdrvDirtyBitmap *bitmap,
53dc162c8eSFam Zheng                                          uint64_t first_sector);
54dc162c8eSFam Zheng void bdrv_dirty_iter_free(BdrvDirtyBitmapIter *iter);
55dc162c8eSFam Zheng int64_t bdrv_dirty_iter_next(BdrvDirtyBitmapIter *iter);
56dc162c8eSFam Zheng void bdrv_set_dirty_iter(BdrvDirtyBitmapIter *hbi, int64_t sector_num);
57ebab2259SFam Zheng int64_t bdrv_get_dirty_count(BdrvDirtyBitmap *bitmap);
58*6d3f4049SFam Zheng int64_t bdrv_get_meta_dirty_count(BdrvDirtyBitmap *bitmap);
59ebab2259SFam Zheng void bdrv_dirty_bitmap_truncate(BlockDriverState *bs);
60ebab2259SFam Zheng 
61882c36f5SVladimir Sementsov-Ogievskiy uint64_t bdrv_dirty_bitmap_serialization_size(const BdrvDirtyBitmap *bitmap,
62882c36f5SVladimir Sementsov-Ogievskiy                                               uint64_t start, uint64_t count);
63882c36f5SVladimir Sementsov-Ogievskiy uint64_t bdrv_dirty_bitmap_serialization_align(const BdrvDirtyBitmap *bitmap);
64882c36f5SVladimir Sementsov-Ogievskiy void bdrv_dirty_bitmap_serialize_part(const BdrvDirtyBitmap *bitmap,
65882c36f5SVladimir Sementsov-Ogievskiy                                       uint8_t *buf, uint64_t start,
66882c36f5SVladimir Sementsov-Ogievskiy                                       uint64_t count);
67882c36f5SVladimir Sementsov-Ogievskiy void bdrv_dirty_bitmap_deserialize_part(BdrvDirtyBitmap *bitmap,
68882c36f5SVladimir Sementsov-Ogievskiy                                         uint8_t *buf, uint64_t start,
69882c36f5SVladimir Sementsov-Ogievskiy                                         uint64_t count, bool finish);
70882c36f5SVladimir Sementsov-Ogievskiy void bdrv_dirty_bitmap_deserialize_zeroes(BdrvDirtyBitmap *bitmap,
71882c36f5SVladimir Sementsov-Ogievskiy                                           uint64_t start, uint64_t count,
72882c36f5SVladimir Sementsov-Ogievskiy                                           bool finish);
73882c36f5SVladimir Sementsov-Ogievskiy void bdrv_dirty_bitmap_deserialize_finish(BdrvDirtyBitmap *bitmap);
74882c36f5SVladimir Sementsov-Ogievskiy 
75ebab2259SFam Zheng #endif
76