summaryrefslogtreecommitdiff
path: root/block_int.h
diff options
context:
space:
mode:
authorKevin Wolf <kwolf@redhat.com>2011-07-14 17:27:13 +0200
committerKevin Wolf <kwolf@redhat.com>2011-08-02 15:53:40 +0200
commitda1fa91d6cca8a6d3da9c2b222fa485429db297c (patch)
treec77f342d36c65fb1773c1f9c563f2d5b531e6f4e /block_int.h
parent5e3840ce24040cbd1957008489cbc136c43ca391 (diff)
downloadqemu-da1fa91d6cca8a6d3da9c2b222fa485429db297c.tar.gz
block: Add bdrv_co_readv/writev
Add new block driver callbacks bdrv_co_readv/writev, which work on a QEMUIOVector like bdrv_aio_*, but don't need a callback. The function may only be called inside a coroutine, so a block driver implementing this interface can yield instead of blocking during I/O. Signed-off-by: Kevin Wolf <kwolf@redhat.com>
Diffstat (limited to 'block_int.h')
-rw-r--r--block_int.h6
1 files changed, 6 insertions, 0 deletions
diff --git a/block_int.h b/block_int.h
index efefbee289..f6d02b38a7 100644
--- a/block_int.h
+++ b/block_int.h
@@ -27,6 +27,7 @@
#include "block.h"
#include "qemu-option.h"
#include "qemu-queue.h"
+#include "qemu-coroutine.h"
#define BLOCK_FLAG_ENCRYPT 1
#define BLOCK_FLAG_COMPAT6 4
@@ -77,6 +78,11 @@ struct BlockDriver {
int (*bdrv_discard)(BlockDriverState *bs, int64_t sector_num,
int nb_sectors);
+ int coroutine_fn (*bdrv_co_readv)(BlockDriverState *bs,
+ int64_t sector_num, int nb_sectors, QEMUIOVector *qiov);
+ int coroutine_fn (*bdrv_co_writev)(BlockDriverState *bs,
+ int64_t sector_num, int nb_sectors, QEMUIOVector *qiov);
+
int (*bdrv_aio_multiwrite)(BlockDriverState *bs, BlockRequest *reqs,
int num_reqs);
int (*bdrv_merge_requests)(BlockDriverState *bs, BlockRequest* a,