aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEric Blake <eblake@redhat.com>2025-05-09 15:40:19 -0500
committerEric Blake <eblake@redhat.com>2025-05-14 15:49:27 -0500
commita6a0a7fb0e327d17594c971b4a39de14e025b415 (patch)
tree13452c9f937d9df3ccf1166a966c0ea6561aa66f
parentc33159dec79069514f78faecfe268439226b0f5b (diff)
downloadqemu-a6a0a7fb0e327d17594c971b4a39de14e025b415.zip
qemu-a6a0a7fb0e327d17594c971b4a39de14e025b415.tar.gz
qemu-a6a0a7fb0e327d17594c971b4a39de14e025b415.tar.bz2
file-posix, gluster: Handle zero block status hint better
Although the previous patch to change 'bool want_zero' into a bitmask made no semantic change, it is now time to differentiate. When the caller specifically wants to know what parts of the file read as zero, we need to use lseek and actually reporting holes, rather than short-circuiting and advertising full allocation. This change will be utilized in later patches to let mirroring optimize for the case when the destination already reads as zeroes. Signed-off-by: Eric Blake <eblake@redhat.com> Reviewed-by: Stefan Hajnoczi <stefanha@redhat.com> Message-ID: <20250509204341.3553601-17-eblake@redhat.com>
-rw-r--r--block/file-posix.c3
-rw-r--r--block/gluster.c2
2 files changed, 3 insertions, 2 deletions
diff --git a/block/file-posix.c b/block/file-posix.c
index 805a1a2..ec95b74 100644
--- a/block/file-posix.c
+++ b/block/file-posix.c
@@ -3289,7 +3289,8 @@ static int coroutine_fn raw_co_block_status(BlockDriverState *bs,
return ret;
}
- if (mode != BDRV_WANT_PRECISE) {
+ if (!(mode & BDRV_WANT_ZERO)) {
+ /* There is no backing file - all bytes are allocated in this file. */
*pnum = bytes;
*map = offset;
*file = bs;
diff --git a/block/gluster.c b/block/gluster.c
index 1a2ef53..89abd40 100644
--- a/block/gluster.c
+++ b/block/gluster.c
@@ -1478,7 +1478,7 @@ static int coroutine_fn qemu_gluster_co_block_status(BlockDriverState *bs,
return ret;
}
- if (mode != BDRV_WANT_PRECISE) {
+ if (!(mode & BDRV_WANT_ZERO)) {
*pnum = bytes;
*map = offset;
*file = bs;