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