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 Error **errp);
29
30
31void block_copy_set_copy_opts(BlockCopyState *s, bool use_copy_range,
32 bool compress);
33void block_copy_set_progress_meter(BlockCopyState *s, ProgressMeter *pm);
34
35void block_copy_state_free(BlockCopyState *s);
36
37int64_t block_copy_reset_unallocated(BlockCopyState *s,
38 int64_t offset, int64_t *count);
39
40int coroutine_fn block_copy(BlockCopyState *s, int64_t offset, int64_t bytes,
41 bool ignore_ratelimit);
42
43
44
45
46
47
48
49
50
51
52
53
54
55BlockCopyCallState *block_copy_async(BlockCopyState *s,
56 int64_t offset, int64_t bytes,
57 int max_workers, int64_t max_chunk,
58 BlockCopyAsyncCallbackFunc cb,
59 void *cb_opaque);
60
61
62
63
64
65void block_copy_call_free(BlockCopyCallState *call_state);
66
67
68
69
70
71bool block_copy_call_finished(BlockCopyCallState *call_state);
72bool block_copy_call_succeeded(BlockCopyCallState *call_state);
73bool block_copy_call_failed(BlockCopyCallState *call_state);
74bool block_copy_call_cancelled(BlockCopyCallState *call_state);
75int block_copy_call_status(BlockCopyCallState *call_state, bool *error_is_read);
76
77void block_copy_set_speed(BlockCopyState *s, uint64_t speed);
78void block_copy_kick(BlockCopyCallState *call_state);
79
80
81
82
83
84
85
86
87
88
89
90void block_copy_call_cancel(BlockCopyCallState *call_state);
91
92BdrvDirtyBitmap *block_copy_dirty_bitmap(BlockCopyState *s);
93int64_t block_copy_cluster_size(BlockCopyState *s);
94void block_copy_set_skip_unallocated(BlockCopyState *s, bool skip);
95
96#endif
97