summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMax Reitz2020-06-18 17:39:28 +0200
committerKevin Wolf2020-09-07 12:31:31 +0200
commit23b93525a2f30915f6c8418eb23db6912a3b5811 (patch)
tree8411cecf95d52bb5689cbcb157f70acc223fb3db
parentblock: Use CAFs when working with backing chains (diff)
downloadqemu-23b93525a2f30915f6c8418eb23db6912a3b5811.tar.gz
qemu-23b93525a2f30915f6c8418eb23db6912a3b5811.tar.xz
qemu-23b93525a2f30915f6c8418eb23db6912a3b5811.zip
block: Use bdrv_cow_child() in bdrv_co_truncate()
The condition modified here is not about potentially filtered children, but only about COW sources (i.e. traditional backing files). Signed-off-by: Max Reitz <mreitz@redhat.com> Reviewed-by: Andrey Shinkevich <andrey.shinkevich@virtuozzo.com> Reviewed-by: Kevin Wolf <kwolf@redhat.com>
-rw-r--r--block/io.c7
1 files changed, 4 insertions, 3 deletions
diff --git a/block/io.c b/block/io.c
index 4ee8fe5465..6f9402117e 100644
--- a/block/io.c
+++ b/block/io.c
@@ -3310,7 +3310,7 @@ int coroutine_fn bdrv_co_truncate(BdrvChild *child, int64_t offset, bool exact,
Error **errp)
{
BlockDriverState *bs = child->bs;
- BdrvChild *filtered;
+ BdrvChild *filtered, *backing;
BlockDriver *drv = bs->drv;
BdrvTrackedRequest req;
int64_t old_size, new_bytes;
@@ -3363,6 +3363,7 @@ int coroutine_fn bdrv_co_truncate(BdrvChild *child, int64_t offset, bool exact,
}
filtered = bdrv_filter_child(bs);
+ backing = bdrv_cow_child(bs);
/*
* If the image has a backing file that is large enough that it would
@@ -3374,10 +3375,10 @@ int coroutine_fn bdrv_co_truncate(BdrvChild *child, int64_t offset, bool exact,
* backing file, taking care of keeping things consistent with that backing
* file is the user's responsibility.
*/
- if (new_bytes && bs->backing) {
+ if (new_bytes && backing) {
int64_t backing_len;
- backing_len = bdrv_getlength(backing_bs(bs));
+ backing_len = bdrv_getlength(backing->bs);
if (backing_len < 0) {
ret = backing_len;
error_setg_errno(errp, -ret, "Could not get backing file size");