On Mon, 11 Aug 2025 03:41:39 -0700, Christoph Hellwig wrote: > Where "the whole thing" is the current iteration in the write loop. > Can you spell this out a bit better? Hahaha, I was also confused about "the whole thing". I guess it refers to a partial write in a folio. It appears in the comments of __iomap_write_end(). static bool __iomap_write_end(struct inode *inode, loff_t pos, size_t len, size_t copied, struct folio *folio) { flush_dcache_folio(folio); /* * The blocks that were entirely written will now be uptodate, so we * don't have to worry about a read_folio reading them and overwriting a * partial write. However, if we've encountered a short write and only * partially written into a block, it will not be marked uptodate, so a * read_folio might come in and destroy our partial write. * * Do the simplest thing and just treat any short write to a * non-uptodate page as a zero-length write, and force the caller to * redo the whole thing. ^^^^^^^^^^^^^^^ <------------------ look look look, it's here :) */ if (unlikely(copied < len && !folio_test_uptodate(folio))) return false; iomap_set_range_uptodate(folio, offset_in_folio(folio, pos), len); iomap_set_range_dirty(folio, offset_in_folio(folio, pos), copied); filemap_dirty_folio(inode->i_mapping, folio); return true; } > > Also please include the rationale why you are changing the logic > here in the commit log. Hahaha, what I want to express is that we no longer need to define partial write based on folio granularity, it is more appropriate to use block granularity. Please forgive my poor English. :-< thanks, Jinliang Zheng :)