xref: /qemu/include/block/dirty-bitmap.h (revision a3b52535e8a577d9b12887a34183fe9077ea24d8)
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);
32ba06ff1aSVladimir Sementsov-Ogievskiy uint32_t bdrv_dirty_bitmap_granularity(const BdrvDirtyBitmap *bitmap);
336d3f4049SFam 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 void bdrv_set_dirty_bitmap(BdrvDirtyBitmap *bitmap,
406d078599SDenis V. Lunev                            int64_t cur_sector, int64_t nr_sectors);
41ebab2259SFam Zheng void bdrv_reset_dirty_bitmap(BdrvDirtyBitmap *bitmap,
426d078599SDenis V. Lunev                              int64_t cur_sector, int64_t nr_sectors);
43fb933437SFam Zheng int bdrv_dirty_bitmap_get_meta(BlockDriverState *bs,
44fb933437SFam Zheng                                BdrvDirtyBitmap *bitmap, int64_t sector,
45fb933437SFam Zheng                                int nb_sectors);
46b64bd51eSPaolo Bonzini int bdrv_dirty_bitmap_get_meta_locked(BlockDriverState *bs,
47b64bd51eSPaolo Bonzini                                       BdrvDirtyBitmap *bitmap, int64_t sector,
48b64bd51eSPaolo Bonzini                                       int nb_sectors);
49fb933437SFam Zheng void bdrv_dirty_bitmap_reset_meta(BlockDriverState *bs,
50fb933437SFam Zheng                                   BdrvDirtyBitmap *bitmap, int64_t sector,
51fb933437SFam Zheng                                   int nb_sectors);
526d3f4049SFam Zheng BdrvDirtyBitmapIter *bdrv_dirty_meta_iter_new(BdrvDirtyBitmap *bitmap);
53dc162c8eSFam Zheng BdrvDirtyBitmapIter *bdrv_dirty_iter_new(BdrvDirtyBitmap *bitmap,
54dc162c8eSFam Zheng                                          uint64_t first_sector);
55dc162c8eSFam Zheng void bdrv_dirty_iter_free(BdrvDirtyBitmapIter *iter);
56ebab2259SFam Zheng 
57882c36f5SVladimir Sementsov-Ogievskiy uint64_t bdrv_dirty_bitmap_serialization_size(const BdrvDirtyBitmap *bitmap,
58882c36f5SVladimir Sementsov-Ogievskiy                                               uint64_t start, uint64_t count);
59882c36f5SVladimir Sementsov-Ogievskiy uint64_t bdrv_dirty_bitmap_serialization_align(const BdrvDirtyBitmap *bitmap);
60882c36f5SVladimir Sementsov-Ogievskiy void bdrv_dirty_bitmap_serialize_part(const BdrvDirtyBitmap *bitmap,
61882c36f5SVladimir Sementsov-Ogievskiy                                       uint8_t *buf, uint64_t start,
62882c36f5SVladimir Sementsov-Ogievskiy                                       uint64_t count);
63882c36f5SVladimir Sementsov-Ogievskiy void bdrv_dirty_bitmap_deserialize_part(BdrvDirtyBitmap *bitmap,
64882c36f5SVladimir Sementsov-Ogievskiy                                         uint8_t *buf, uint64_t start,
65882c36f5SVladimir Sementsov-Ogievskiy                                         uint64_t count, bool finish);
66882c36f5SVladimir Sementsov-Ogievskiy void bdrv_dirty_bitmap_deserialize_zeroes(BdrvDirtyBitmap *bitmap,
67882c36f5SVladimir Sementsov-Ogievskiy                                           uint64_t start, uint64_t count,
68882c36f5SVladimir Sementsov-Ogievskiy                                           bool finish);
696bdc8b71SVladimir Sementsov-Ogievskiy void bdrv_dirty_bitmap_deserialize_ones(BdrvDirtyBitmap *bitmap,
706bdc8b71SVladimir Sementsov-Ogievskiy                                         uint64_t start, uint64_t count,
716bdc8b71SVladimir Sementsov-Ogievskiy                                         bool finish);
72882c36f5SVladimir Sementsov-Ogievskiy void bdrv_dirty_bitmap_deserialize_finish(BdrvDirtyBitmap *bitmap);
73882c36f5SVladimir Sementsov-Ogievskiy 
74d6883bc9SVladimir Sementsov-Ogievskiy void bdrv_dirty_bitmap_set_readonly(BdrvDirtyBitmap *bitmap, bool value);
75a0319aacSVladimir Sementsov-Ogievskiy void bdrv_dirty_bitmap_set_autoload(BdrvDirtyBitmap *bitmap, bool autoload);
76a88b179fSVladimir Sementsov-Ogievskiy void bdrv_dirty_bitmap_set_persistance(BdrvDirtyBitmap *bitmap,
77a88b179fSVladimir Sementsov-Ogievskiy                                        bool persistent);
78d6883bc9SVladimir Sementsov-Ogievskiy 
79b64bd51eSPaolo Bonzini /* Functions that require manual locking.  */
80b64bd51eSPaolo Bonzini void bdrv_dirty_bitmap_lock(BdrvDirtyBitmap *bitmap);
81b64bd51eSPaolo Bonzini void bdrv_dirty_bitmap_unlock(BdrvDirtyBitmap *bitmap);
82b64bd51eSPaolo Bonzini int bdrv_get_dirty_locked(BlockDriverState *bs, BdrvDirtyBitmap *bitmap,
83b64bd51eSPaolo Bonzini                           int64_t sector);
84b64bd51eSPaolo Bonzini void bdrv_set_dirty_bitmap_locked(BdrvDirtyBitmap *bitmap,
85b64bd51eSPaolo Bonzini                                   int64_t cur_sector, int64_t nr_sectors);
86b64bd51eSPaolo Bonzini void bdrv_reset_dirty_bitmap_locked(BdrvDirtyBitmap *bitmap,
87b64bd51eSPaolo Bonzini                                     int64_t cur_sector, int64_t nr_sectors);
88b64bd51eSPaolo Bonzini int64_t bdrv_dirty_iter_next(BdrvDirtyBitmapIter *iter);
89b64bd51eSPaolo Bonzini void bdrv_set_dirty_iter(BdrvDirtyBitmapIter *hbi, int64_t sector_num);
90b64bd51eSPaolo Bonzini int64_t bdrv_get_dirty_count(BdrvDirtyBitmap *bitmap);
91b64bd51eSPaolo Bonzini int64_t bdrv_get_meta_dirty_count(BdrvDirtyBitmap *bitmap);
92b64bd51eSPaolo Bonzini void bdrv_dirty_bitmap_truncate(BlockDriverState *bs);
93d6883bc9SVladimir Sementsov-Ogievskiy bool bdrv_dirty_bitmap_readonly(const BdrvDirtyBitmap *bitmap);
94d6883bc9SVladimir Sementsov-Ogievskiy bool bdrv_has_readonly_bitmaps(BlockDriverState *bs);
95a0319aacSVladimir Sementsov-Ogievskiy bool bdrv_dirty_bitmap_get_autoload(const BdrvDirtyBitmap *bitmap);
96a88b179fSVladimir Sementsov-Ogievskiy bool bdrv_dirty_bitmap_get_persistance(BdrvDirtyBitmap *bitmap);
97a88b179fSVladimir Sementsov-Ogievskiy bool bdrv_has_changed_persistent_bitmaps(BlockDriverState *bs);
983dd10a06SVladimir Sementsov-Ogievskiy BdrvDirtyBitmap *bdrv_dirty_bitmap_next(BlockDriverState *bs,
993dd10a06SVladimir Sementsov-Ogievskiy                                         BdrvDirtyBitmap *bitmap);
100*a3b52535SVladimir Sementsov-Ogievskiy char *bdrv_dirty_bitmap_sha256(const BdrvDirtyBitmap *bitmap, Error **errp);
101b64bd51eSPaolo Bonzini 
102ebab2259SFam Zheng #endif
103