xref: /qemu/include/block/dirty-bitmap.h (revision 615b5dcf2decbc5f0abb512d13d7e5db2385fa23)
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);
28*615b5dcfSVladimir Sementsov-Ogievskiy void bdrv_release_persistent_dirty_bitmaps(BlockDriverState *bs);
2956f364e6SVladimir Sementsov-Ogievskiy void bdrv_remove_persistent_dirty_bitmap(BlockDriverState *bs,
3056f364e6SVladimir Sementsov-Ogievskiy                                          const char *name,
3156f364e6SVladimir Sementsov-Ogievskiy                                          Error **errp);
32ebab2259SFam Zheng void bdrv_disable_dirty_bitmap(BdrvDirtyBitmap *bitmap);
33ebab2259SFam Zheng void bdrv_enable_dirty_bitmap(BdrvDirtyBitmap *bitmap);
34ebab2259SFam Zheng BlockDirtyInfoList *bdrv_query_dirty_bitmaps(BlockDriverState *bs);
35ebab2259SFam Zheng uint32_t bdrv_get_default_bitmap_granularity(BlockDriverState *bs);
36ba06ff1aSVladimir Sementsov-Ogievskiy uint32_t bdrv_dirty_bitmap_granularity(const BdrvDirtyBitmap *bitmap);
376d3f4049SFam Zheng uint32_t bdrv_dirty_bitmap_meta_granularity(BdrvDirtyBitmap *bitmap);
38ebab2259SFam Zheng bool bdrv_dirty_bitmap_enabled(BdrvDirtyBitmap *bitmap);
39ebab2259SFam Zheng bool bdrv_dirty_bitmap_frozen(BdrvDirtyBitmap *bitmap);
4015891facSFam Zheng const char *bdrv_dirty_bitmap_name(const BdrvDirtyBitmap *bitmap);
4115891facSFam Zheng int64_t bdrv_dirty_bitmap_size(const BdrvDirtyBitmap *bitmap);
42ebab2259SFam Zheng DirtyBitmapStatus bdrv_dirty_bitmap_status(BdrvDirtyBitmap *bitmap);
43ebab2259SFam Zheng void bdrv_set_dirty_bitmap(BdrvDirtyBitmap *bitmap,
446d078599SDenis V. Lunev                            int64_t cur_sector, int64_t nr_sectors);
45ebab2259SFam Zheng void bdrv_reset_dirty_bitmap(BdrvDirtyBitmap *bitmap,
466d078599SDenis V. Lunev                              int64_t cur_sector, int64_t nr_sectors);
47fb933437SFam Zheng int bdrv_dirty_bitmap_get_meta(BlockDriverState *bs,
48fb933437SFam Zheng                                BdrvDirtyBitmap *bitmap, int64_t sector,
49fb933437SFam Zheng                                int nb_sectors);
50b64bd51eSPaolo Bonzini int bdrv_dirty_bitmap_get_meta_locked(BlockDriverState *bs,
51b64bd51eSPaolo Bonzini                                       BdrvDirtyBitmap *bitmap, int64_t sector,
52b64bd51eSPaolo Bonzini                                       int nb_sectors);
53fb933437SFam Zheng void bdrv_dirty_bitmap_reset_meta(BlockDriverState *bs,
54fb933437SFam Zheng                                   BdrvDirtyBitmap *bitmap, int64_t sector,
55fb933437SFam Zheng                                   int nb_sectors);
566d3f4049SFam Zheng BdrvDirtyBitmapIter *bdrv_dirty_meta_iter_new(BdrvDirtyBitmap *bitmap);
57dc162c8eSFam Zheng BdrvDirtyBitmapIter *bdrv_dirty_iter_new(BdrvDirtyBitmap *bitmap,
58dc162c8eSFam Zheng                                          uint64_t first_sector);
59dc162c8eSFam Zheng void bdrv_dirty_iter_free(BdrvDirtyBitmapIter *iter);
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);
736bdc8b71SVladimir Sementsov-Ogievskiy void bdrv_dirty_bitmap_deserialize_ones(BdrvDirtyBitmap *bitmap,
746bdc8b71SVladimir Sementsov-Ogievskiy                                         uint64_t start, uint64_t count,
756bdc8b71SVladimir Sementsov-Ogievskiy                                         bool finish);
76882c36f5SVladimir Sementsov-Ogievskiy void bdrv_dirty_bitmap_deserialize_finish(BdrvDirtyBitmap *bitmap);
77882c36f5SVladimir Sementsov-Ogievskiy 
78d6883bc9SVladimir Sementsov-Ogievskiy void bdrv_dirty_bitmap_set_readonly(BdrvDirtyBitmap *bitmap, bool value);
79a0319aacSVladimir Sementsov-Ogievskiy void bdrv_dirty_bitmap_set_autoload(BdrvDirtyBitmap *bitmap, bool autoload);
80a88b179fSVladimir Sementsov-Ogievskiy void bdrv_dirty_bitmap_set_persistance(BdrvDirtyBitmap *bitmap,
81a88b179fSVladimir Sementsov-Ogievskiy                                        bool persistent);
82d6883bc9SVladimir Sementsov-Ogievskiy 
83b64bd51eSPaolo Bonzini /* Functions that require manual locking.  */
84b64bd51eSPaolo Bonzini void bdrv_dirty_bitmap_lock(BdrvDirtyBitmap *bitmap);
85b64bd51eSPaolo Bonzini void bdrv_dirty_bitmap_unlock(BdrvDirtyBitmap *bitmap);
86b64bd51eSPaolo Bonzini int bdrv_get_dirty_locked(BlockDriverState *bs, BdrvDirtyBitmap *bitmap,
87b64bd51eSPaolo Bonzini                           int64_t sector);
88b64bd51eSPaolo Bonzini void bdrv_set_dirty_bitmap_locked(BdrvDirtyBitmap *bitmap,
89b64bd51eSPaolo Bonzini                                   int64_t cur_sector, int64_t nr_sectors);
90b64bd51eSPaolo Bonzini void bdrv_reset_dirty_bitmap_locked(BdrvDirtyBitmap *bitmap,
91b64bd51eSPaolo Bonzini                                     int64_t cur_sector, int64_t nr_sectors);
92b64bd51eSPaolo Bonzini int64_t bdrv_dirty_iter_next(BdrvDirtyBitmapIter *iter);
93b64bd51eSPaolo Bonzini void bdrv_set_dirty_iter(BdrvDirtyBitmapIter *hbi, int64_t sector_num);
94b64bd51eSPaolo Bonzini int64_t bdrv_get_dirty_count(BdrvDirtyBitmap *bitmap);
95b64bd51eSPaolo Bonzini int64_t bdrv_get_meta_dirty_count(BdrvDirtyBitmap *bitmap);
96b64bd51eSPaolo Bonzini void bdrv_dirty_bitmap_truncate(BlockDriverState *bs);
97d6883bc9SVladimir Sementsov-Ogievskiy bool bdrv_dirty_bitmap_readonly(const BdrvDirtyBitmap *bitmap);
98d6883bc9SVladimir Sementsov-Ogievskiy bool bdrv_has_readonly_bitmaps(BlockDriverState *bs);
99a0319aacSVladimir Sementsov-Ogievskiy bool bdrv_dirty_bitmap_get_autoload(const BdrvDirtyBitmap *bitmap);
100a88b179fSVladimir Sementsov-Ogievskiy bool bdrv_dirty_bitmap_get_persistance(BdrvDirtyBitmap *bitmap);
101a88b179fSVladimir Sementsov-Ogievskiy bool bdrv_has_changed_persistent_bitmaps(BlockDriverState *bs);
1023dd10a06SVladimir Sementsov-Ogievskiy BdrvDirtyBitmap *bdrv_dirty_bitmap_next(BlockDriverState *bs,
1033dd10a06SVladimir Sementsov-Ogievskiy                                         BdrvDirtyBitmap *bitmap);
104a3b52535SVladimir Sementsov-Ogievskiy char *bdrv_dirty_bitmap_sha256(const BdrvDirtyBitmap *bitmap, Error **errp);
105b64bd51eSPaolo Bonzini 
106ebab2259SFam Zheng #endif
107