aboutsummaryrefslogtreecommitdiff
path: root/block
diff options
context:
space:
mode:
authorFam Zheng <famz@redhat.com>2018-07-10 14:31:23 +0800
committerKevin Wolf <kwolf@redhat.com>2018-07-10 16:46:22 +0200
commit5416a11eb55d46c376dde97c429b89e9b4e1a94f (patch)
treec7f58ce65327100e4acf7527c210f88b9e2e51b1 /block
parent0eb1e891126f0cde52e88384696ad67076bdc341 (diff)
downloadqemu-5416a11eb55d46c376dde97c429b89e9b4e1a94f.zip
qemu-5416a11eb55d46c376dde97c429b89e9b4e1a94f.tar.gz
qemu-5416a11eb55d46c376dde97c429b89e9b4e1a94f.tar.bz2
block: Fix bdrv_co_truncate overlap check
If we are growing the image and potentially using preallocation for the new area, we need to make sure that no write requests are made to the "preallocated" area which is [@old_size, @offset), not [@offset, offset * 2 - @old_size). Signed-off-by: Fam Zheng <famz@redhat.com> Reviewed-by: Eric Blake <eblake@redhat.com> Signed-off-by: Kevin Wolf <kwolf@redhat.com>
Diffstat (limited to 'block')
-rw-r--r--block/io.c3
1 files changed, 2 insertions, 1 deletions
diff --git a/block/io.c b/block/io.c
index 2832214..77d38ca 100644
--- a/block/io.c
+++ b/block/io.c
@@ -3136,7 +3136,8 @@ int coroutine_fn bdrv_co_truncate(BdrvChild *child, int64_t offset,
}
bdrv_inc_in_flight(bs);
- tracked_request_begin(&req, bs, offset, new_bytes, BDRV_TRACKED_TRUNCATE);
+ tracked_request_begin(&req, bs, offset - new_bytes, new_bytes,
+ BDRV_TRACKED_TRUNCATE);
/* If we are growing the image and potentially using preallocation for the
* new area, we need to make sure that no write requests are made to it