Hi all, I've been poking around at testing zeroing behavior after a couple recent enhancements to iomap_zero_range() and fsx[1]. Running [1] on ext4 has uncovered a couple issues that I think share responsibility between the fs and pagecache. The details are in the commit logs, but patch 1 updates ext4 to do partial eof block zeroing in more cases and patch 2 tweaks pagecache_isize_extended() to do eof folio zeroing similar to as is done during writeback (i.e., ext4_bio_write_folio(), iomap_writepage_handle_eof(), etc.). These kind of overlap, but the fs changes handle the case of a block straddling eof (so we're writing to disk in that case) and the pagecache changes handle the case of a folio straddling eof that might be at least partially hole backed (i.e. sub-page block sizes, so we're just clearing pagecache). Aside from general review, my biggest questions WRT patch 1 are 1. whether the journalling bits are handled correctly and 2. whether the verity case is handled correctly. I recall seeing verity checks around the code and I don't know enough about the feature to quite understand why. FWIW, I have run fstests against this using various combinations of block size and journalling modes without any regression so far. That includes enabling generic/363 [1] for ext4, which afaict is now possible with these two proposed changes. WRT patch 2, I originally tested with unconditional zeroing and added the dirty check after. This still survives testing, but I'm having second thoughts on whether that is correct or introduces a small race window between writeback and an i_size update. I guess there's also a question of whether the fs or pagecache should be responsible for this, but given writeback and truncate_setsize() behavior this seemed fairly consistent to me. Thoughts, reviews, flames appreciated. Brian [1] https://lore.kernel.org/fstests/20240828181534.41054-1-bfoster@xxxxxxxxxx/ Brian Foster (2): ext4: partial zero eof block on unaligned inode size extension mm: zero range of eof folio exposed by inode size extension fs/ext4/extents.c | 7 ++++++- fs/ext4/inode.c | 51 +++++++++++++++++++++++++++++++++-------------- mm/truncate.c | 15 ++++++++++++++ 3 files changed, 57 insertions(+), 16 deletions(-) -- 2.45.0