1
2
3
4
5
6
7
8
9
10
11
12
13
14
15#ifndef BLOCK_COPY_H
16#define BLOCK_COPY_H
17
18#include "block/block.h"
19#include "qemu/co-shared-resource.h"
20
21
22
23typedef void (*BlockCopyAsyncCallbackFunc)(void *opaque);
24typedef struct BlockCopyState BlockCopyState;
25typedef struct BlockCopyCallState BlockCopyCallState;
26
27BlockCopyState *block_copy_state_new(BdrvChild *source, BdrvChild *target,
28 int64_t cluster_size, bool use_copy_range,
29 BdrvRequestFlags write_flags,
30 Error **errp);
31
32void block_copy_set_progress_meter(BlockCopyState *s, ProgressMeter *pm);
33
34void block_copy_state_free(BlockCopyState *s);
35
36int64_t block_copy_reset_unallocated(BlockCopyState *s,
37 int64_t offset, int64_t *count);
38
39int coroutine_fn block_copy(BlockCopyState *s, int64_t offset, int64_t bytes,
40 bool ignore_ratelimit);
41
42
43
44
45
46
47
48
49
50
51
52
53
54BlockCopyCallState *block_copy_async(BlockCopyState *s,
55 int64_t offset, int64_t bytes,
56 int max_workers, int64_t max_chunk,
57 BlockCopyAsyncCallbackFunc cb,
58 void *cb_opaque);
59
60
61
62
63
64void block_copy_call_free(BlockCopyCallState *call_state);
65
66
67
68
69
70bool block_copy_call_finished(BlockCopyCallState *call_state);
71bool block_copy_call_succeeded(BlockCopyCallState *call_state);
72bool block_copy_call_failed(BlockCopyCallState *call_state);
73bool block_copy_call_cancelled(BlockCopyCallState *call_state);
74int block_copy_call_status(BlockCopyCallState *call_state, bool *error_is_read);
75
76void block_copy_set_speed(BlockCopyState *s, uint64_t speed);
77void block_copy_kick(BlockCopyCallState *call_state);
78
79
80
81
82
83
84
85
86
87
88
89void block_copy_call_cancel(BlockCopyCallState *call_state);
90
91BdrvDirtyBitmap *block_copy_dirty_bitmap(BlockCopyState *s);
92void block_copy_set_skip_unallocated(BlockCopyState *s, bool skip);
93
94#endif
95