Hello Christoph! On 2024/2/29 6:13, Christoph Hellwig wrote: > On Wed, Feb 28, 2024 at 04:53:32PM +0800, Zhang Yi wrote: >> So, we have to handle above case for xfs. I suppose we could keep >> increasing i_size if the zeroed folio is entirely outside of i_size, >> make sure we could write back and allocate blocks for the >> zeroed & delayed extent, something like below, any suggestions ? > > Sorry for being dumb, but what was the problem solved by not updating > the size for ext4 again? (for unshare I can't see any reason to > ever update the inode size) > The problem I want to slove by not updating the size for ext4 is truncate. Now ext4 use iomap_zero_range() for the case of zero partial blocks, and ext4's truncate is different from xfs. Let's think about a simple case, we have a reg file with size 3K, then truncate it to 1K. ext4 first set i_size to 1K and then call ext4_block_truncate_page() to zero out data after 1K(EOF) through iomap_zero_range(). But now it will update i_size in iomap_write_end(), so the size of the file will increase to 4K, this is wrong. xfs first zero out data through iomap_truncate_page() and then set file size to 1K, so the file size is 3K->4K->1K. Although the result is correct, but the increasing in iomap_zero_range() is also not necessary, so so I'm just gonna delete the i_size updating in iomap_zero_range(). It's not for unhare. Thanks, Yi.