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