diff options
author | Alberto Faria <afaria@redhat.com> | 2022-07-05 17:15:19 +0100 |
---|---|---|
committer | Hanna Reitz <hreitz@redhat.com> | 2022-07-12 12:14:56 +0200 |
commit | 2c9715fa28042ce84215dfd6b3bf35af90624e14 (patch) | |
tree | aecfcc885ec79698e405ac2426d5283761ef4598 | |
parent | 0cadf2c8a37e15d3f3e1191024005e53dabb81f0 (diff) |
block: Add blk_co_pwrite_compressed()
Also convert blk_pwrite_compressed() into a generated_co_wrapper.
Signed-off-by: Alberto Faria <afaria@redhat.com>
Reviewed-by: Paolo Bonzini <pbonzini@redhat.com>
Reviewed-by: Hanna Reitz <hreitz@redhat.com>
Message-Id: <20220705161527.1054072-12-afaria@redhat.com>
Signed-off-by: Hanna Reitz <hreitz@redhat.com>
-rw-r--r-- | block/block-backend.c | 8 | ||||
-rw-r--r-- | include/sysemu/block-backend-io.h | 7 | ||||
-rw-r--r-- | tests/unit/test-block-iothread.c | 18 |
3 files changed, 27 insertions, 6 deletions
diff --git a/block/block-backend.c b/block/block-backend.c index 60fb7eb3f2..f07a76aa5a 100644 --- a/block/block-backend.c +++ b/block/block-backend.c @@ -2314,13 +2314,13 @@ int coroutine_fn blk_co_pwrite_zeroes(BlockBackend *blk, int64_t offset, flags | BDRV_REQ_ZERO_WRITE); } -int blk_pwrite_compressed(BlockBackend *blk, int64_t offset, int64_t bytes, - const void *buf) +int coroutine_fn blk_co_pwrite_compressed(BlockBackend *blk, int64_t offset, + int64_t bytes, const void *buf) { QEMUIOVector qiov = QEMU_IOVEC_INIT_BUF(qiov, buf, bytes); IO_OR_GS_CODE(); - return blk_pwritev_part(blk, offset, bytes, &qiov, 0, - BDRV_REQ_WRITE_COMPRESSED); + return blk_co_pwritev_part(blk, offset, bytes, &qiov, 0, + BDRV_REQ_WRITE_COMPRESSED); } int blk_truncate(BlockBackend *blk, int64_t offset, bool exact, diff --git a/include/sysemu/block-backend-io.h b/include/sysemu/block-backend-io.h index 695b793a72..8500a63102 100644 --- a/include/sysemu/block-backend-io.h +++ b/include/sysemu/block-backend-io.h @@ -167,8 +167,11 @@ int blk_flush(BlockBackend *blk); int blk_ioctl(BlockBackend *blk, unsigned long int req, void *buf); -int blk_pwrite_compressed(BlockBackend *blk, int64_t offset, int64_t bytes, - const void *buf); +int generated_co_wrapper blk_pwrite_compressed(BlockBackend *blk, + int64_t offset, int64_t bytes, + const void *buf); +int coroutine_fn blk_co_pwrite_compressed(BlockBackend *blk, int64_t offset, + int64_t bytes, const void *buf); int blk_pdiscard(BlockBackend *blk, int64_t offset, int64_t bytes); int blk_pwrite_zeroes(BlockBackend *blk, int64_t offset, int64_t bytes, BdrvRequestFlags flags); diff --git a/tests/unit/test-block-iothread.c b/tests/unit/test-block-iothread.c index 274e9e3653..3a46886784 100644 --- a/tests/unit/test-block-iothread.c +++ b/tests/unit/test-block-iothread.c @@ -198,6 +198,20 @@ static void test_sync_op_blk_pwritev_part(BlockBackend *blk) g_assert_cmpint(ret, ==, -EIO); } +static void test_sync_op_blk_pwrite_compressed(BlockBackend *blk) +{ + uint8_t buf[512] = { 0 }; + int ret; + + /* Late error: Not supported */ + ret = blk_pwrite_compressed(blk, 0, sizeof(buf), buf); + g_assert_cmpint(ret, ==, -ENOTSUP); + + /* Early error: Negative offset */ + ret = blk_pwrite_compressed(blk, -2, sizeof(buf), buf); + g_assert_cmpint(ret, ==, -EIO); +} + static void test_sync_op_load_vmstate(BdrvChild *c) { uint8_t buf[512]; @@ -378,6 +392,10 @@ const SyncOpTest sync_op_tests[] = { .fn = NULL, .blkfn = test_sync_op_blk_pwritev_part, }, { + .name = "/sync-op/pwrite_compressed", + .fn = NULL, + .blkfn = test_sync_op_blk_pwrite_compressed, + }, { .name = "/sync-op/load_vmstate", .fn = test_sync_op_load_vmstate, }, { |