It's just byte-based wrappers over bdrv_co_aio_prw_vector(), which provide a byte-based interface for AIO read/write.
Signed-off-by: Pavel Butsykin <pbutsy...@virtuozzo.com> --- block/io.c | 16 ++++++++++++++++ include/block/block.h | 7 +++++++ 2 files changed, 23 insertions(+) diff --git a/block/io.c b/block/io.c index fdf7080..099bddb 100644 --- a/block/io.c +++ b/block/io.c @@ -1991,6 +1991,22 @@ int bdrv_readv_vmstate(BlockDriverState *bs, QEMUIOVector *qiov, int64_t pos) /**************************************************************/ /* async I/Os */ +BlockAIOCB *bdrv_aio_preadv(BdrvChild *child, int64_t offset, + QEMUIOVector *qiov, unsigned int bytes, + BlockCompletionFunc *cb, void *opaque) +{ + assert(bytes == qiov->size); + return bdrv_co_aio_prw_vector(child, offset, qiov, 0, cb, opaque, false); +} + +BlockAIOCB *bdrv_aio_pwritev(BdrvChild *child, int64_t offset, + QEMUIOVector *qiov, unsigned int bytes, + BlockCompletionFunc *cb, void *opaque) +{ + assert(bytes == qiov->size); + return bdrv_co_aio_prw_vector(child, offset, qiov, 0, cb, opaque, true); +} + BlockAIOCB *bdrv_aio_readv(BdrvChild *child, int64_t sector_num, QEMUIOVector *qiov, int nb_sectors, BlockCompletionFunc *cb, void *opaque) diff --git a/include/block/block.h b/include/block/block.h index e18233a..6728219 100644 --- a/include/block/block.h +++ b/include/block/block.h @@ -305,6 +305,13 @@ BlockDriverState *check_to_replace_node(BlockDriverState *parent_bs, const char *node_name, Error **errp); /* async block I/O */ + +BlockAIOCB *bdrv_aio_preadv(BdrvChild *child, int64_t offset, + QEMUIOVector *qiov, unsigned int bytes, + BlockCompletionFunc *cb, void *opaque); +BlockAIOCB *bdrv_aio_pwritev(BdrvChild *child, int64_t offset, + QEMUIOVector *qiov, unsigned int bytes, + BlockCompletionFunc *cb, void *opaque); BlockAIOCB *bdrv_aio_readv(BdrvChild *child, int64_t sector_num, QEMUIOVector *iov, int nb_sectors, BlockCompletionFunc *cb, void *opaque); -- 2.10.1