mirror of https://github.com/xemu-project/xemu.git
block: Add blk_{preadv,pwritev}()
Implement them using 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-8-afaria@redhat.com> Signed-off-by: Hanna Reitz <hreitz@redhat.com>
This commit is contained in:
parent
facbaad946
commit
7c8cd723c7
|
@ -107,6 +107,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);
|
||||
|
@ -114,6 +117,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);
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue