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,
|
int generated_co_wrapper blk_pwrite(BlockBackend *blk, int64_t offset,
|
||||||
int64_t bytes, const void *buf,
|
int64_t bytes, const void *buf,
|
||||||
BdrvRequestFlags flags);
|
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,
|
int coroutine_fn blk_co_preadv(BlockBackend *blk, int64_t offset,
|
||||||
int64_t bytes, QEMUIOVector *qiov,
|
int64_t bytes, QEMUIOVector *qiov,
|
||||||
BdrvRequestFlags flags);
|
BdrvRequestFlags flags);
|
||||||
|
@ -114,6 +117,9 @@ int coroutine_fn blk_co_pwritev_part(BlockBackend *blk, int64_t offset,
|
||||||
int64_t bytes,
|
int64_t bytes,
|
||||||
QEMUIOVector *qiov, size_t qiov_offset,
|
QEMUIOVector *qiov, size_t qiov_offset,
|
||||||
BdrvRequestFlags flags);
|
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,
|
int coroutine_fn blk_co_pwritev(BlockBackend *blk, int64_t offset,
|
||||||
int64_t bytes, QEMUIOVector *qiov,
|
int64_t bytes, QEMUIOVector *qiov,
|
||||||
BdrvRequestFlags flags);
|
BdrvRequestFlags flags);
|
||||||
|
|
|
@ -138,6 +138,36 @@ static void test_sync_op_blk_pwrite(BlockBackend *blk)
|
||||||
g_assert_cmpint(ret, ==, -EIO);
|
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)
|
static void test_sync_op_load_vmstate(BdrvChild *c)
|
||||||
{
|
{
|
||||||
uint8_t buf[512];
|
uint8_t buf[512];
|
||||||
|
@ -301,6 +331,14 @@ const SyncOpTest sync_op_tests[] = {
|
||||||
.name = "/sync-op/pwrite",
|
.name = "/sync-op/pwrite",
|
||||||
.fn = test_sync_op_pwrite,
|
.fn = test_sync_op_pwrite,
|
||||||
.blkfn = test_sync_op_blk_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",
|
.name = "/sync-op/load_vmstate",
|
||||||
.fn = test_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);
|
blk_set_aio_context(blk, ctx, &error_abort);
|
||||||
aio_context_acquire(ctx);
|
aio_context_acquire(ctx);
|
||||||
t->fn(c);
|
if (t->fn) {
|
||||||
|
t->fn(c);
|
||||||
|
}
|
||||||
if (t->blkfn) {
|
if (t->blkfn) {
|
||||||
t->blkfn(blk);
|
t->blkfn(blk);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue