diff mbox series

[07/18] block: Add blk_{preadv,pwritev}()

Message ID 20220517113837.199696-3-afaria@redhat.com
State New
Headers show
Series Make block-backend-io.h API more consistent | expand

Commit Message

Alberto Faria May 17, 2022, 11:38 a.m. UTC
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(-)

Comments

Paolo Bonzini May 17, 2022, 2:35 p.m. UTC | #1
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);
>       }
Hanna Czenczek July 5, 2022, 7:55 a.m. UTC | #2
On 17.05.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: Hanna Reitz <hreitz@redhat.com>
diff mbox series

Patch

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);
     }