Message ID | 20240812121159.3775074-3-yi.zhang@huaweicloud.com (mailing list archive) |
---|---|
State | Accepted, archived |
Headers | show |
Series | iomap: some minor non-critical fixes and improvements when block size < folio size | expand |
On Mon, Aug 12, 2024 at 08:11:55PM +0800, Zhang Yi wrote: > From: Zhang Yi <yi.zhang@huawei.com> > > 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@huawei.com> Seems ok to me Reviewed-by: Darrick J. Wong <djwong@kernel.org> --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 > >
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);