1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24#ifndef BLOCK_IO_H
25#define BLOCK_IO_H
26
27#include "block-common.h"
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42int generated_co_wrapper bdrv_pwrite_zeroes(BdrvChild *child, int64_t offset,
43 int64_t bytes,
44 BdrvRequestFlags flags);
45int bdrv_make_zero(BdrvChild *child, BdrvRequestFlags flags);
46int generated_co_wrapper bdrv_pread(BdrvChild *child, int64_t offset,
47 int64_t bytes, void *buf,
48 BdrvRequestFlags flags);
49int generated_co_wrapper bdrv_pwrite(BdrvChild *child, int64_t offset,
50 int64_t bytes, const void *buf,
51 BdrvRequestFlags flags);
52int generated_co_wrapper bdrv_pwrite_sync(BdrvChild *child, int64_t offset,
53 int64_t bytes, const void *buf,
54 BdrvRequestFlags flags);
55int coroutine_fn bdrv_co_pwrite_sync(BdrvChild *child, int64_t offset,
56 int64_t bytes, const void *buf,
57 BdrvRequestFlags flags);
58
59
60
61
62
63
64int coroutine_fn bdrv_co_pwrite_zeroes(BdrvChild *child, int64_t offset,
65 int64_t bytes, BdrvRequestFlags flags);
66
67int coroutine_fn bdrv_co_truncate(BdrvChild *child, int64_t offset, bool exact,
68 PreallocMode prealloc, BdrvRequestFlags flags,
69 Error **errp);
70
71int64_t bdrv_nb_sectors(BlockDriverState *bs);
72int64_t bdrv_getlength(BlockDriverState *bs);
73int64_t bdrv_get_allocated_file_size(BlockDriverState *bs);
74BlockMeasureInfo *bdrv_measure(BlockDriver *drv, QemuOpts *opts,
75 BlockDriverState *in_bs, Error **errp);
76void bdrv_get_geometry(BlockDriverState *bs, uint64_t *nb_sectors_ptr);
77int coroutine_fn bdrv_co_delete_file(BlockDriverState *bs, Error **errp);
78void coroutine_fn bdrv_co_delete_file_noerr(BlockDriverState *bs);
79
80
81
82void bdrv_aio_cancel(BlockAIOCB *acb);
83void bdrv_aio_cancel_async(BlockAIOCB *acb);
84
85
86int bdrv_co_ioctl(BlockDriverState *bs, int req, void *buf);
87
88
89int coroutine_fn bdrv_co_flush(BlockDriverState *bs);
90
91int bdrv_co_pdiscard(BdrvChild *child, int64_t offset, int64_t bytes);
92bool bdrv_can_write_zeroes_with_unmap(BlockDriverState *bs);
93int bdrv_block_status(BlockDriverState *bs, int64_t offset,
94 int64_t bytes, int64_t *pnum, int64_t *map,
95 BlockDriverState **file);
96int bdrv_block_status_above(BlockDriverState *bs, BlockDriverState *base,
97 int64_t offset, int64_t bytes, int64_t *pnum,
98 int64_t *map, BlockDriverState **file);
99int bdrv_is_allocated(BlockDriverState *bs, int64_t offset, int64_t bytes,
100 int64_t *pnum);
101int bdrv_is_allocated_above(BlockDriverState *top, BlockDriverState *base,
102 bool include_base, int64_t offset, int64_t bytes,
103 int64_t *pnum);
104int coroutine_fn bdrv_co_is_zero_fast(BlockDriverState *bs, int64_t offset,
105 int64_t bytes);
106
107int bdrv_can_set_read_only(BlockDriverState *bs, bool read_only,
108 bool ignore_allow_rdw, Error **errp);
109int bdrv_apply_auto_read_only(BlockDriverState *bs, const char *errmsg,
110 Error **errp);
111bool bdrv_is_read_only(BlockDriverState *bs);
112bool bdrv_is_writable(BlockDriverState *bs);
113bool bdrv_is_sg(BlockDriverState *bs);
114int bdrv_get_flags(BlockDriverState *bs);
115bool bdrv_is_inserted(BlockDriverState *bs);
116void bdrv_lock_medium(BlockDriverState *bs, bool locked);
117void bdrv_eject(BlockDriverState *bs, bool eject_flag);
118const char *bdrv_get_format_name(BlockDriverState *bs);
119
120bool bdrv_supports_compressed_writes(BlockDriverState *bs);
121const char *bdrv_get_node_name(const BlockDriverState *bs);
122const char *bdrv_get_device_name(const BlockDriverState *bs);
123const char *bdrv_get_device_or_node_name(const BlockDriverState *bs);
124int bdrv_get_info(BlockDriverState *bs, BlockDriverInfo *bdi);
125ImageInfoSpecific *bdrv_get_specific_info(BlockDriverState *bs,
126 Error **errp);
127BlockStatsSpecific *bdrv_get_specific_stats(BlockDriverState *bs);
128void bdrv_round_to_clusters(BlockDriverState *bs,
129 int64_t offset, int64_t bytes,
130 int64_t *cluster_offset,
131 int64_t *cluster_bytes);
132
133void bdrv_get_backing_filename(BlockDriverState *bs,
134 char *filename, int filename_size);
135
136int bdrv_save_vmstate(BlockDriverState *bs, const uint8_t *buf,
137 int64_t pos, int size);
138
139int bdrv_load_vmstate(BlockDriverState *bs, uint8_t *buf,
140 int64_t pos, int size);
141
142
143
144
145
146size_t bdrv_min_mem_align(BlockDriverState *bs);
147
148size_t bdrv_opt_mem_align(BlockDriverState *bs);
149void *qemu_blockalign(BlockDriverState *bs, size_t size);
150void *qemu_blockalign0(BlockDriverState *bs, size_t size);
151void *qemu_try_blockalign(BlockDriverState *bs, size_t size);
152void *qemu_try_blockalign0(BlockDriverState *bs, size_t size);
153bool bdrv_qiov_is_aligned(BlockDriverState *bs, QEMUIOVector *qiov);
154
155void bdrv_enable_copy_on_read(BlockDriverState *bs);
156void bdrv_disable_copy_on_read(BlockDriverState *bs);
157
158void bdrv_debug_event(BlockDriverState *bs, BlkdebugEvent event);
159
160#define BLKDBG_EVENT(child, evt) \
161 do { \
162 if (child) { \
163 bdrv_debug_event(child->bs, evt); \
164 } \
165 } while (0)
166
167
168
169
170
171
172AioContext *bdrv_get_aio_context(BlockDriverState *bs);
173
174
175
176
177
178
179
180
181
182
183AioContext *coroutine_fn bdrv_co_enter(BlockDriverState *bs);
184
185
186
187
188
189void coroutine_fn bdrv_co_leave(BlockDriverState *bs, AioContext *old_ctx);
190
191
192
193
194void bdrv_coroutine_enter(BlockDriverState *bs, Coroutine *co);
195
196AioContext *child_of_bds_get_parent_aio_context(BdrvChild *c);
197
198void bdrv_io_plug(BlockDriverState *bs);
199void bdrv_io_unplug(BlockDriverState *bs);
200
201bool bdrv_can_store_new_dirty_bitmap(BlockDriverState *bs, const char *name,
202 uint32_t granularity, Error **errp);
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233int coroutine_fn bdrv_co_copy_range(BdrvChild *src, int64_t src_offset,
234 BdrvChild *dst, int64_t dst_offset,
235 int64_t bytes, BdrvRequestFlags read_flags,
236 BdrvRequestFlags write_flags);
237
238
239
240
241
242
243
244
245
246
247
248
249
250void bdrv_drained_end_no_poll(BlockDriverState *bs, int *drained_end_counter);
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274#define BDRV_POLL_WHILE(bs, cond) ({ \
275 BlockDriverState *bs_ = (bs); \
276 IO_OR_GS_CODE(); \
277 AIO_WAIT_WHILE(bdrv_get_aio_context(bs_), \
278 cond); })
279
280void bdrv_drain(BlockDriverState *bs);
281
282int generated_co_wrapper
283bdrv_truncate(BdrvChild *child, int64_t offset, bool exact,
284 PreallocMode prealloc, BdrvRequestFlags flags, Error **errp);
285
286int generated_co_wrapper bdrv_check(BlockDriverState *bs, BdrvCheckResult *res,
287 BdrvCheckMode fix);
288
289
290int generated_co_wrapper bdrv_invalidate_cache(BlockDriverState *bs,
291 Error **errp);
292int generated_co_wrapper bdrv_flush(BlockDriverState *bs);
293int generated_co_wrapper bdrv_pdiscard(BdrvChild *child, int64_t offset,
294 int64_t bytes);
295int generated_co_wrapper
296bdrv_readv_vmstate(BlockDriverState *bs, QEMUIOVector *qiov, int64_t pos);
297int generated_co_wrapper
298bdrv_writev_vmstate(BlockDriverState *bs, QEMUIOVector *qiov, int64_t pos);
299
300
301
302
303
304
305
306void bdrv_parent_drained_begin_single(BdrvChild *c, bool poll);
307
308
309
310
311
312
313
314
315
316void bdrv_parent_drained_end_single(BdrvChild *c);
317
318
319
320
321
322
323
324
325
326
327
328
329
330bool bdrv_drain_poll(BlockDriverState *bs, bool recursive,
331 BdrvChild *ignore_parent, bool ignore_bds_parents);
332
333
334
335
336
337
338
339
340
341void bdrv_drained_begin(BlockDriverState *bs);
342
343
344
345
346
347
348
349void bdrv_do_drained_begin_quiesce(BlockDriverState *bs,
350 BdrvChild *parent, bool ignore_bds_parents);
351
352
353
354
355
356void bdrv_subtree_drained_begin(BlockDriverState *bs);
357
358
359
360
361
362
363
364
365
366
367
368
369void bdrv_drained_end(BlockDriverState *bs);
370
371
372
373
374void bdrv_subtree_drained_end(BlockDriverState *bs);
375
376#endif
377