]>
Commit | Line | Data |
---|---|---|
ebab2259 FZ |
1 | #ifndef BLOCK_DIRTY_BITMAP_H |
2 | #define BLOCK_DIRTY_BITMAP_H | |
3 | ||
4 | #include "qemu-common.h" | |
9af23989 | 5 | #include "qapi/qapi-types-block-core.h" |
ebab2259 FZ |
6 | #include "qemu/hbitmap.h" |
7 | ||
3ae96d66 JS |
8 | typedef enum BitmapCheckFlags { |
9 | BDRV_BITMAP_BUSY = 1, | |
10 | BDRV_BITMAP_RO = 2, | |
11 | BDRV_BITMAP_INCONSISTENT = 4, | |
12 | } BitmapCheckFlags; | |
13 | ||
14 | #define BDRV_BITMAP_DEFAULT (BDRV_BITMAP_BUSY | BDRV_BITMAP_RO | \ | |
15 | BDRV_BITMAP_INCONSISTENT) | |
16 | #define BDRV_BITMAP_ALLOW_RO (BDRV_BITMAP_BUSY | BDRV_BITMAP_INCONSISTENT) | |
17 | ||
ebab2259 FZ |
18 | BdrvDirtyBitmap *bdrv_create_dirty_bitmap(BlockDriverState *bs, |
19 | uint32_t granularity, | |
20 | const char *name, | |
21 | Error **errp); | |
fb933437 FZ |
22 | void bdrv_create_meta_dirty_bitmap(BdrvDirtyBitmap *bitmap, |
23 | int chunk_size); | |
24 | void bdrv_release_meta_dirty_bitmap(BdrvDirtyBitmap *bitmap); | |
ebab2259 FZ |
25 | int bdrv_dirty_bitmap_create_successor(BlockDriverState *bs, |
26 | BdrvDirtyBitmap *bitmap, | |
27 | Error **errp); | |
28 | BdrvDirtyBitmap *bdrv_dirty_bitmap_abdicate(BlockDriverState *bs, | |
29 | BdrvDirtyBitmap *bitmap, | |
30 | Error **errp); | |
31 | BdrvDirtyBitmap *bdrv_reclaim_dirty_bitmap(BlockDriverState *bs, | |
32 | BdrvDirtyBitmap *bitmap, | |
33 | Error **errp); | |
e73a265e | 34 | void bdrv_dirty_bitmap_enable_successor(BdrvDirtyBitmap *bitmap); |
ebab2259 FZ |
35 | BdrvDirtyBitmap *bdrv_find_dirty_bitmap(BlockDriverState *bs, |
36 | const char *name); | |
3ae96d66 JS |
37 | int bdrv_dirty_bitmap_check(const BdrvDirtyBitmap *bitmap, uint32_t flags, |
38 | Error **errp); | |
ebab2259 FZ |
39 | void bdrv_release_dirty_bitmap(BlockDriverState *bs, BdrvDirtyBitmap *bitmap); |
40 | void bdrv_release_named_dirty_bitmaps(BlockDriverState *bs); | |
56f364e6 VSO |
41 | void bdrv_remove_persistent_dirty_bitmap(BlockDriverState *bs, |
42 | const char *name, | |
43 | Error **errp); | |
ebab2259 FZ |
44 | void bdrv_disable_dirty_bitmap(BdrvDirtyBitmap *bitmap); |
45 | void bdrv_enable_dirty_bitmap(BdrvDirtyBitmap *bitmap); | |
92bcea40 | 46 | void bdrv_enable_dirty_bitmap_locked(BdrvDirtyBitmap *bitmap); |
ebab2259 FZ |
47 | BlockDirtyInfoList *bdrv_query_dirty_bitmaps(BlockDriverState *bs); |
48 | uint32_t bdrv_get_default_bitmap_granularity(BlockDriverState *bs); | |
ba06ff1a | 49 | uint32_t bdrv_dirty_bitmap_granularity(const BdrvDirtyBitmap *bitmap); |
ebab2259 | 50 | bool bdrv_dirty_bitmap_enabled(BdrvDirtyBitmap *bitmap); |
50a47257 | 51 | bool bdrv_dirty_bitmap_has_successor(BdrvDirtyBitmap *bitmap); |
15891fac FZ |
52 | const char *bdrv_dirty_bitmap_name(const BdrvDirtyBitmap *bitmap); |
53 | int64_t bdrv_dirty_bitmap_size(const BdrvDirtyBitmap *bitmap); | |
ebab2259 | 54 | DirtyBitmapStatus bdrv_dirty_bitmap_status(BdrvDirtyBitmap *bitmap); |
ebab2259 | 55 | void bdrv_set_dirty_bitmap(BdrvDirtyBitmap *bitmap, |
e0d7f73e | 56 | int64_t offset, int64_t bytes); |
ebab2259 | 57 | void bdrv_reset_dirty_bitmap(BdrvDirtyBitmap *bitmap, |
e0d7f73e | 58 | int64_t offset, int64_t bytes); |
6d3f4049 | 59 | BdrvDirtyBitmapIter *bdrv_dirty_meta_iter_new(BdrvDirtyBitmap *bitmap); |
715a74d8 | 60 | BdrvDirtyBitmapIter *bdrv_dirty_iter_new(BdrvDirtyBitmap *bitmap); |
dc162c8e | 61 | void bdrv_dirty_iter_free(BdrvDirtyBitmapIter *iter); |
ebab2259 | 62 | |
882c36f5 | 63 | uint64_t bdrv_dirty_bitmap_serialization_size(const BdrvDirtyBitmap *bitmap, |
86f6ae67 | 64 | uint64_t offset, uint64_t bytes); |
882c36f5 VSO |
65 | uint64_t bdrv_dirty_bitmap_serialization_align(const BdrvDirtyBitmap *bitmap); |
66 | void bdrv_dirty_bitmap_serialize_part(const BdrvDirtyBitmap *bitmap, | |
86f6ae67 EB |
67 | uint8_t *buf, uint64_t offset, |
68 | uint64_t bytes); | |
882c36f5 | 69 | void bdrv_dirty_bitmap_deserialize_part(BdrvDirtyBitmap *bitmap, |
86f6ae67 EB |
70 | uint8_t *buf, uint64_t offset, |
71 | uint64_t bytes, bool finish); | |
882c36f5 | 72 | void bdrv_dirty_bitmap_deserialize_zeroes(BdrvDirtyBitmap *bitmap, |
86f6ae67 | 73 | uint64_t offset, uint64_t bytes, |
882c36f5 | 74 | bool finish); |
6bdc8b71 | 75 | void bdrv_dirty_bitmap_deserialize_ones(BdrvDirtyBitmap *bitmap, |
86f6ae67 | 76 | uint64_t offset, uint64_t bytes, |
6bdc8b71 | 77 | bool finish); |
882c36f5 VSO |
78 | void bdrv_dirty_bitmap_deserialize_finish(BdrvDirtyBitmap *bitmap); |
79 | ||
d6883bc9 | 80 | void bdrv_dirty_bitmap_set_readonly(BdrvDirtyBitmap *bitmap, bool value); |
796a3798 | 81 | void bdrv_dirty_bitmap_set_persistence(BdrvDirtyBitmap *bitmap, |
a88b179f | 82 | bool persistent); |
b0f45559 | 83 | void bdrv_dirty_bitmap_set_inconsistent(BdrvDirtyBitmap *bitmap); |
27a1b301 | 84 | void bdrv_dirty_bitmap_set_busy(BdrvDirtyBitmap *bitmap, bool busy); |
b598e531 | 85 | void bdrv_merge_dirty_bitmap(BdrvDirtyBitmap *dest, const BdrvDirtyBitmap *src, |
fa000f2f | 86 | HBitmap **backup, Error **errp); |
9c98f145 | 87 | void bdrv_dirty_bitmap_set_migration(BdrvDirtyBitmap *bitmap, bool migration); |
d6883bc9 | 88 | |
b64bd51e PB |
89 | /* Functions that require manual locking. */ |
90 | void bdrv_dirty_bitmap_lock(BdrvDirtyBitmap *bitmap); | |
91 | void bdrv_dirty_bitmap_unlock(BdrvDirtyBitmap *bitmap); | |
3b5d4df0 EB |
92 | bool bdrv_get_dirty_locked(BlockDriverState *bs, BdrvDirtyBitmap *bitmap, |
93 | int64_t offset); | |
b64bd51e | 94 | void bdrv_set_dirty_bitmap_locked(BdrvDirtyBitmap *bitmap, |
e0d7f73e | 95 | int64_t offset, int64_t bytes); |
b64bd51e | 96 | void bdrv_reset_dirty_bitmap_locked(BdrvDirtyBitmap *bitmap, |
e0d7f73e | 97 | int64_t offset, int64_t bytes); |
b64bd51e | 98 | int64_t bdrv_dirty_iter_next(BdrvDirtyBitmapIter *iter); |
715a74d8 | 99 | void bdrv_set_dirty_iter(BdrvDirtyBitmapIter *hbi, int64_t offset); |
b64bd51e PB |
100 | int64_t bdrv_get_dirty_count(BdrvDirtyBitmap *bitmap); |
101 | int64_t bdrv_get_meta_dirty_count(BdrvDirtyBitmap *bitmap); | |
1b6cc579 | 102 | void bdrv_dirty_bitmap_truncate(BlockDriverState *bs, int64_t bytes); |
d6883bc9 VSO |
103 | bool bdrv_dirty_bitmap_readonly(const BdrvDirtyBitmap *bitmap); |
104 | bool bdrv_has_readonly_bitmaps(BlockDriverState *bs); | |
a0319aac | 105 | bool bdrv_dirty_bitmap_get_autoload(const BdrvDirtyBitmap *bitmap); |
796a3798 | 106 | bool bdrv_dirty_bitmap_get_persistence(BdrvDirtyBitmap *bitmap); |
b0f45559 | 107 | bool bdrv_dirty_bitmap_inconsistent(const BdrvDirtyBitmap *bitmap); |
a88b179f | 108 | bool bdrv_has_changed_persistent_bitmaps(BlockDriverState *bs); |
3dd10a06 VSO |
109 | BdrvDirtyBitmap *bdrv_dirty_bitmap_next(BlockDriverState *bs, |
110 | BdrvDirtyBitmap *bitmap); | |
a3b52535 | 111 | char *bdrv_dirty_bitmap_sha256(const BdrvDirtyBitmap *bitmap, Error **errp); |
76d570dc VSO |
112 | int64_t bdrv_dirty_bitmap_next_zero(BdrvDirtyBitmap *bitmap, uint64_t offset, |
113 | uint64_t bytes); | |
a78a1a48 VSO |
114 | bool bdrv_dirty_bitmap_next_dirty_area(BdrvDirtyBitmap *bitmap, |
115 | uint64_t *offset, uint64_t *bytes); | |
044ee8e1 VSO |
116 | BdrvDirtyBitmap *bdrv_reclaim_dirty_bitmap_locked(BlockDriverState *bs, |
117 | BdrvDirtyBitmap *bitmap, | |
118 | Error **errp); | |
b64bd51e | 119 | |
ebab2259 | 120 | #endif |