block: Add blk_co_truncate()
Also convert blk_truncate() 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-17-afaria@redhat.com> Signed-off-by: Hanna Reitz <hreitz@redhat.com>
This commit is contained in:
parent
df02da003d
commit
015ed2529a
@ -2293,8 +2293,9 @@ int coroutine_fn blk_co_pwrite_compressed(BlockBackend *blk, int64_t offset,
|
||||
BDRV_REQ_WRITE_COMPRESSED);
|
||||
}
|
||||
|
||||
int blk_truncate(BlockBackend *blk, int64_t offset, bool exact,
|
||||
PreallocMode prealloc, BdrvRequestFlags flags, Error **errp)
|
||||
int coroutine_fn blk_co_truncate(BlockBackend *blk, int64_t offset, bool exact,
|
||||
PreallocMode prealloc, BdrvRequestFlags flags,
|
||||
Error **errp)
|
||||
{
|
||||
IO_OR_GS_CODE();
|
||||
if (!blk_is_available(blk)) {
|
||||
@ -2302,7 +2303,7 @@ int blk_truncate(BlockBackend *blk, int64_t offset, bool exact,
|
||||
return -ENOMEDIUM;
|
||||
}
|
||||
|
||||
return bdrv_truncate(blk->root, offset, exact, prealloc, flags, errp);
|
||||
return bdrv_co_truncate(blk->root, offset, exact, prealloc, flags, errp);
|
||||
}
|
||||
|
||||
int blk_save_vmstate(BlockBackend *blk, const uint8_t *buf,
|
||||
|
@ -182,7 +182,11 @@ int generated_co_wrapper blk_pwrite_zeroes(BlockBackend *blk, int64_t offset,
|
||||
BdrvRequestFlags flags);
|
||||
int coroutine_fn blk_co_pwrite_zeroes(BlockBackend *blk, int64_t offset,
|
||||
int64_t bytes, BdrvRequestFlags flags);
|
||||
int blk_truncate(BlockBackend *blk, int64_t offset, bool exact,
|
||||
PreallocMode prealloc, BdrvRequestFlags flags, Error **errp);
|
||||
int generated_co_wrapper blk_truncate(BlockBackend *blk, int64_t offset,
|
||||
bool exact, PreallocMode prealloc,
|
||||
BdrvRequestFlags flags, Error **errp);
|
||||
int coroutine_fn blk_co_truncate(BlockBackend *blk, int64_t offset, bool exact,
|
||||
PreallocMode prealloc, BdrvRequestFlags flags,
|
||||
Error **errp);
|
||||
|
||||
#endif /* BLOCK_BACKEND_IO_H */
|
||||
|
@ -298,6 +298,19 @@ static void test_sync_op_truncate(BdrvChild *c)
|
||||
c->bs->open_flags |= BDRV_O_RDWR;
|
||||
}
|
||||
|
||||
static void test_sync_op_blk_truncate(BlockBackend *blk)
|
||||
{
|
||||
int ret;
|
||||
|
||||
/* Normal success path */
|
||||
ret = blk_truncate(blk, 65536, false, PREALLOC_MODE_OFF, 0, NULL);
|
||||
g_assert_cmpint(ret, ==, 0);
|
||||
|
||||
/* Early error: Negative offset */
|
||||
ret = blk_truncate(blk, -2, false, PREALLOC_MODE_OFF, 0, NULL);
|
||||
g_assert_cmpint(ret, ==, -EINVAL);
|
||||
}
|
||||
|
||||
static void test_sync_op_block_status(BdrvChild *c)
|
||||
{
|
||||
int ret;
|
||||
@ -425,6 +438,7 @@ const SyncOpTest sync_op_tests[] = {
|
||||
}, {
|
||||
.name = "/sync-op/truncate",
|
||||
.fn = test_sync_op_truncate,
|
||||
.blkfn = test_sync_op_blk_truncate,
|
||||
}, {
|
||||
.name = "/sync-op/block_status",
|
||||
.fn = test_sync_op_block_status,
|
||||
|
Loading…
Reference in New Issue
Block a user