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);
|
BDRV_REQ_WRITE_COMPRESSED);
|
||||||
}
|
}
|
||||||
|
|
||||||
int blk_truncate(BlockBackend *blk, int64_t offset, bool exact,
|
int coroutine_fn blk_co_truncate(BlockBackend *blk, int64_t offset, bool exact,
|
||||||
PreallocMode prealloc, BdrvRequestFlags flags, Error **errp)
|
PreallocMode prealloc, BdrvRequestFlags flags,
|
||||||
|
Error **errp)
|
||||||
{
|
{
|
||||||
IO_OR_GS_CODE();
|
IO_OR_GS_CODE();
|
||||||
if (!blk_is_available(blk)) {
|
if (!blk_is_available(blk)) {
|
||||||
|
@ -2302,7 +2303,7 @@ int blk_truncate(BlockBackend *blk, int64_t offset, bool exact,
|
||||||
return -ENOMEDIUM;
|
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,
|
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);
|
BdrvRequestFlags flags);
|
||||||
int coroutine_fn blk_co_pwrite_zeroes(BlockBackend *blk, int64_t offset,
|
int coroutine_fn blk_co_pwrite_zeroes(BlockBackend *blk, int64_t offset,
|
||||||
int64_t bytes, BdrvRequestFlags flags);
|
int64_t bytes, BdrvRequestFlags flags);
|
||||||
int blk_truncate(BlockBackend *blk, int64_t offset, bool exact,
|
int generated_co_wrapper blk_truncate(BlockBackend *blk, int64_t offset,
|
||||||
PreallocMode prealloc, BdrvRequestFlags flags, Error **errp);
|
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 */
|
#endif /* BLOCK_BACKEND_IO_H */
|
||||||
|
|
|
@ -298,6 +298,19 @@ static void test_sync_op_truncate(BdrvChild *c)
|
||||||
c->bs->open_flags |= BDRV_O_RDWR;
|
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)
|
static void test_sync_op_block_status(BdrvChild *c)
|
||||||
{
|
{
|
||||||
int ret;
|
int ret;
|
||||||
|
@ -425,6 +438,7 @@ const SyncOpTest sync_op_tests[] = {
|
||||||
}, {
|
}, {
|
||||||
.name = "/sync-op/truncate",
|
.name = "/sync-op/truncate",
|
||||||
.fn = test_sync_op_truncate,
|
.fn = test_sync_op_truncate,
|
||||||
|
.blkfn = test_sync_op_blk_truncate,
|
||||||
}, {
|
}, {
|
||||||
.name = "/sync-op/block_status",
|
.name = "/sync-op/block_status",
|
||||||
.fn = test_sync_op_block_status,
|
.fn = test_sync_op_block_status,
|
||||||
|
|
Loading…
Reference in New Issue