On Mon, Aug 12, 2024 at 08:11:55PM +0800, Zhang Yi wrote: > From: Zhang Yi <yi.zhang@xxxxxxxxxx> > > Current iomap_invalidate_folio() could only invalidate an entire folio, > if we truncate a partial folio on a filesystem with blocksize < folio > size, it will left over the dirty bits of truncated/punched blocks, and > the write back process will try to map the invalid hole range, but > fortunately it hasn't trigger any real problems now since ->map_blocks() > will fix the length. Fix this by supporting invalidating partial folios. > > Signed-off-by: Zhang Yi <yi.zhang@xxxxxxxxxx> Seems ok to me Reviewed-by: Darrick J. Wong <djwong@xxxxxxxxxx> --D > --- > fs/iomap/buffered-io.c | 2 ++ > 1 file changed, 2 insertions(+) > > diff --git a/fs/iomap/buffered-io.c b/fs/iomap/buffered-io.c > index 4da453394aaf..763deabe8331 100644 > --- a/fs/iomap/buffered-io.c > +++ b/fs/iomap/buffered-io.c > @@ -644,6 +644,8 @@ void iomap_invalidate_folio(struct folio *folio, size_t offset, size_t len) > WARN_ON_ONCE(folio_test_writeback(folio)); > folio_cancel_dirty(folio); > ifs_free(folio); > + } else { > + iomap_clear_range_dirty(folio, offset, len); > } > } > EXPORT_SYMBOL_GPL(iomap_invalidate_folio); > -- > 2.39.2 > >