From mboxrd@z Thu Jan 1 00:00:00 1970 From: Andrey Zhadchenko Date: Tue, 25 Aug 2026 15:24:19 +0300 Subject: [Devel] [PATCH VZ10 v3 00/11] dm-qcow2: improve discard and read-only merge handling Message-ID: <20260825122430.252094-1-andrey.zhadchenko@virtuozzo.com> List-Id: This series makes discard update qcow2 metadata and permits backward merge from read-only source images. First patch improves revert_cluster_alloc: this function didn't expect L2 entries to contain subcluster descriptions (when ext2_l2 is set). The second patch renames COW machinery to a more general 'replace entry'. Next five patches improve discard support in general: now it clears metadata and have a subcluster granularity. The next two patches support backward merge when the image we merge from is read-only. Such merges now leave the source mappings and metadata unchanged. Previously the module ignored file mode and submitted writes anyway. Last patch makes merge respect all metadata-zeroed blocks. For now it is writing zeroes as data, but we will improve this to metadata when we support REQ_OP_WRITE_ZEROES. v2: - patch "update metadata on subclusters discard": expand qio_discard_updates_metadata() condition to return true when backing file is present and fully covered sublcu zero bit isn't already set. prepare_cluster_discard() already handled this case but I forgot about it here. v3: - add new "drivers/md/dm-qcow2: do not attach a bvec to discard qios" patch which ensures discard qios do not have garbage bvecs. Otherwise COW operations before discard may use these them. Following patches move discard above COW and alleviate this problem, but let's be explicit. - various commit message and code formatting fixes, but nothing serious Andrey Zhadchenko (11): drivers/md/dm-qcow2: do not attach a bvec to discard qios drivers/md/dm-qcow2: fix revert_cluster_alloc() for ext_l2 case drivers/md/dm-qcow2: generalize COW index update machinery drivers/md/dm-qcow2: update metadata on whole cluster discard drivers/md/dm-qcow2: never trigger COW or allocation on discard drivers/md/dm-qcow2: set L2_READS_ALL_ZEROES after some discards drivers/md/dm-qcow2: update metadata on subclusters discard drivers/md/dm-qcow2: unmap cluster when discard clears last allocated subclusters drivers/md/dm-qcow2: do discards during backward merge only for writable image drivers/md/dm-qcow2: allow shared L1 entries during merge from RO image drivers/md/dm-qcow2: respect zeroes during merge drivers/md/dm-qcow2-cmd.c | 21 +- drivers/md/dm-qcow2-map.c | 415 +++++++++++++++++++++++++++-------- drivers/md/dm-qcow2-target.c | 2 +- drivers/md/dm-qcow2.h | 19 +- 4 files changed, 351 insertions(+), 106 deletions(-) -- 2.43.5