qemu-cr16/block
Nir Soffer d05ae948cc Consider discard option when writing zeros
When opening an image with discard=off, we punch hole in the image when
writing zeroes, making the image sparse. This breaks users that want to
ensure that writes cannot fail with ENOSPACE by using fully allocated
images[1].

bdrv_co_pwrite_zeroes() correctly disables BDRV_REQ_MAY_UNMAP if we
opened the child without discard=unmap or discard=on. But we don't go
through this function when accessing the top node. Move the check down
to bdrv_co_do_pwrite_zeroes() which seems to be used in all code paths.

This change implements the documented behavior, punching holes only when
opening the image with discard=on or discard=unmap. This may not be the
best default but can improve it later.

The test depends on a file system supporting discard, deallocating the
entire file when punching hole with the length of the entire file.
Tested with xfs, ext4, and tmpfs.

[1] https://lists.nongnu.org/archive/html/qemu-discuss/2024-06/msg00003.html

Signed-off-by: Nir Soffer <nsoffer@redhat.com>
Message-id: 20240628202058.1964986-3-nsoffer@redhat.com
Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
2024-07-11 11:06:36 +02:00
..
export
monitor
accounting.c
aio_task.c
amend.c
backup.c qapi: blockdev-backup: add discard-source parameter 2024-05-28 15:52:15 +03:00
blkdebug.c block: remove separate bdrv_file_open callback 2024-06-28 14:44:51 +02:00
blkio.c block: rename former bdrv_file_open callbacks 2024-06-28 14:44:51 +02:00
blklogwrites.c
blkreplay.c
blkverify.c block: remove separate bdrv_file_open callback 2024-06-28 14:44:51 +02:00
block-backend.c block-backend: fix edge case in bdrv_next_cleanup() where BDS associated to BB changes 2024-03-26 14:21:26 +01:00
block-copy.c qapi: blockdev-backup: add discard-source parameter 2024-05-28 15:52:15 +03:00
block-gen.h
block-ram-registrar.c
bochs.c
cloop.c
commit.c
copy-before-write.c block/copy-before-write: use uint64_t for timeout in nanoseconds 2024-06-10 11:05:43 +02:00
copy-before-write.h qapi: blockdev-backup: add discard-source parameter 2024-05-28 15:52:15 +03:00
copy-on-read.c
copy-on-read.h
coroutines.h
create.c
crypto.c crypto/block: drop qcrypto_block_open() n_threads argument 2024-06-10 11:05:43 +02:00
crypto.h
curl.c block: remove separate bdrv_file_open callback 2024-06-28 14:44:51 +02:00
dirty-bitmap.c
dmg-bz2.c
dmg-lzfse.c
dmg.c
dmg.h
file-posix.c block/file-posix: Drop ifdef for macOS versions older than 12.0 2024-07-02 06:58:48 +02:00
file-win32.c block: remove separate bdrv_file_open callback 2024-06-28 14:44:51 +02:00
filter-compress.c
gluster.c block: remove separate bdrv_file_open callback 2024-06-28 14:44:51 +02:00
graph-lock.c
io.c Consider discard option when writing zeros 2024-07-11 11:06:36 +02:00
io_uring.c
iscsi-opts.c
iscsi.c block: remove separate bdrv_file_open callback 2024-06-28 14:44:51 +02:00
linux-aio.c linux-aio: add IO_CMD_FDSYNC command support 2024-06-10 11:05:43 +02:00
meson.build Revert "meson: Propagate gnutls dependency" 2024-07-03 18:41:26 +02:00
mirror.c blockcommit: Reopen base image as RO after abort 2024-05-28 15:52:15 +03:00
nbd.c block: remove separate bdrv_file_open callback 2024-06-28 14:44:51 +02:00
nfs.c block: remove separate bdrv_file_open callback 2024-06-28 14:44:51 +02:00
null.c block: rename former bdrv_file_open callbacks 2024-06-28 14:44:51 +02:00
nvme.c block: rename former bdrv_file_open callbacks 2024-06-28 14:44:51 +02:00
parallels-ext.c
parallels.c
parallels.h
preallocate.c
progress_meter.c
qapi-sysemu.c
qapi.c
qcow.c crypto/block: drop qcrypto_block_open() n_threads argument 2024-06-10 11:05:43 +02:00
qcow2-bitmap.c block/qcow2-bitmap: Replace g_memdup() by g_memdup2() 2024-05-08 19:11:34 +02:00
qcow2-cache.c
qcow2-cluster.c
qcow2-refcount.c
qcow2-snapshot.c
qcow2-threads.c
qcow2.c qcow2: Don't open data_file with BDRV_O_NO_IO 2024-07-02 18:09:51 +02:00
qcow2.h
qed-check.c
qed-cluster.c
qed-l2-cache.c
qed-table.c
qed.c
qed.h
quorum.c
raw-format.c
rbd.c block: remove separate bdrv_file_open callback 2024-06-28 14:44:51 +02:00
replication.c qapi: blockdev-backup: add discard-source parameter 2024-05-28 15:52:15 +03:00
reqlist.c
snapshot-access.c
snapshot.c qapi: Inline and remove QERR_DEVICE_HAS_NO_MEDIUM definition 2024-04-24 09:50:58 +02:00
ssh.c block: rename former bdrv_file_open callbacks 2024-06-28 14:44:51 +02:00
stream.c
throttle-groups.c
throttle.c
trace-events
trace.h
vdi.c
vhdx-endian.c
vhdx-log.c
vhdx.c
vhdx.h
vmdk.c block/vmdk: Improve error messages on extent write error 2024-05-27 12:42:29 +02:00
vpc.c
vvfat.c block: remove separate bdrv_file_open callback 2024-06-28 14:44:51 +02:00
win32-aio.c
write-threshold.c