On 5/17/22 13:38, Alberto Faria wrote:
> Implement them using generated_co_wrapper.
>
> Signed-off-by: Alberto Faria <afaria@redhat.com>
> ---
> include/sysemu/block-backend-io.h | 6 +++++
> tests/unit/test-block-iothread.c | 42 ++++++++++++++++++++++++++++++-
> 2 files changed, 47 insertions(+), 1 deletion(-)
Reviewed-by: Paolo Bonzini <pbonzini@redhat.com>
> diff --git a/include/sysemu/block-backend-io.h b/include/sysemu/block-backend-io.h
> index 0804ce1c1d..3b548a8ae1 100644
> --- a/include/sysemu/block-backend-io.h
> +++ b/include/sysemu/block-backend-io.h
> @@ -108,6 +108,9 @@ int generated_co_wrapper blk_pread(BlockBackend *blk, int64_t offset,
> int generated_co_wrapper blk_pwrite(BlockBackend *blk, int64_t offset,
> int64_t bytes, const void *buf,
> BdrvRequestFlags flags);
> +int generated_co_wrapper blk_preadv(BlockBackend *blk, int64_t offset,
> + int64_t bytes, QEMUIOVector *qiov,
> + BdrvRequestFlags flags);
> int coroutine_fn blk_co_preadv(BlockBackend *blk, int64_t offset,
> int64_t bytes, QEMUIOVector *qiov,
> BdrvRequestFlags flags);
> @@ -115,6 +118,9 @@ int coroutine_fn blk_co_pwritev_part(BlockBackend *blk, int64_t offset,
> int64_t bytes,
> QEMUIOVector *qiov, size_t qiov_offset,
> BdrvRequestFlags flags);
> +int generated_co_wrapper blk_pwritev(BlockBackend *blk, int64_t offset,
> + int64_t bytes, QEMUIOVector *qiov,
> + BdrvRequestFlags flags);
> int coroutine_fn blk_co_pwritev(BlockBackend *blk, int64_t offset,
> int64_t bytes, QEMUIOVector *qiov,
> BdrvRequestFlags flags);
> diff --git a/tests/unit/test-block-iothread.c b/tests/unit/test-block-iothread.c
> index 0ced5333ff..b9c5da3a87 100644
> --- a/tests/unit/test-block-iothread.c
> +++ b/tests/unit/test-block-iothread.c
> @@ -138,6 +138,36 @@ static void test_sync_op_blk_pwrite(BlockBackend *blk)
> g_assert_cmpint(ret, ==, -EIO);
> }
>
> +static void test_sync_op_blk_preadv(BlockBackend *blk)
> +{
> + uint8_t buf[512];
> + QEMUIOVector qiov = QEMU_IOVEC_INIT_BUF(qiov, buf, sizeof(buf));
> + int ret;
> +
> + /* Success */
> + ret = blk_preadv(blk, 0, sizeof(buf), &qiov, 0);
> + g_assert_cmpint(ret, ==, 0);
> +
> + /* Early error: Negative offset */
> + ret = blk_preadv(blk, -2, sizeof(buf), &qiov, 0);
> + g_assert_cmpint(ret, ==, -EIO);
> +}
> +
> +static void test_sync_op_blk_pwritev(BlockBackend *blk)
> +{
> + uint8_t buf[512] = { 0 };
> + QEMUIOVector qiov = QEMU_IOVEC_INIT_BUF(qiov, buf, sizeof(buf));
> + int ret;
> +
> + /* Success */
> + ret = blk_pwritev(blk, 0, sizeof(buf), &qiov, 0);
> + g_assert_cmpint(ret, ==, 0);
> +
> + /* Early error: Negative offset */
> + ret = blk_pwritev(blk, -2, sizeof(buf), &qiov, 0);
> + g_assert_cmpint(ret, ==, -EIO);
> +}
> +
> static void test_sync_op_load_vmstate(BdrvChild *c)
> {
> uint8_t buf[512];
> @@ -301,6 +331,14 @@ const SyncOpTest sync_op_tests[] = {
> .name = "/sync-op/pwrite",
> .fn = test_sync_op_pwrite,
> .blkfn = test_sync_op_blk_pwrite,
> + }, {
> + .name = "/sync-op/preadv",
> + .fn = NULL,
> + .blkfn = test_sync_op_blk_preadv,
> + }, {
> + .name = "/sync-op/pwritev",
> + .fn = NULL,
> + .blkfn = test_sync_op_blk_pwritev,
> }, {
> .name = "/sync-op/load_vmstate",
> .fn = test_sync_op_load_vmstate,
> @@ -349,7 +387,9 @@ static void test_sync_op(const void *opaque)
>
> blk_set_aio_context(blk, ctx, &error_abort);
> aio_context_acquire(ctx);
> - t->fn(c);
> + if (t->fn) {
> + t->fn(c);
> + }
> if (t->blkfn) {
> t->blkfn(blk);
> }