Re: [PATCH v2 2/2] fuse: use iomap helper to mark folio uptodate
"Darrick J. Wong" <[email protected]> Wed, 24 Jun 2026 15:18:20 -0700
| Newsgroups | dev.linux.lists.fuse-devel,org.kernel.vger.linux-fsdevel |
|---|---|
| Message-ID | <20260624221820.GB6095@frogsfrogsfrogs> |
On Wed, Jun 24, 2026 at 02:29:25PM -0700, Joanne Koong wrote: > When fuse enables large folios, a large folio will be backed by > iomap_folio_state that keeps track of uptodate and dirty state in an > internal bitmap. > > Fuse writethrough and notify store paths currently set folio uptodate > state with folio_mark_uptodate(), which touches only the folio-level > flag, but on an iomap-backed folio, that leaves the uptodate bitmap out > of sync. > > Use the iomap_folio_mark_uptodate() helper to update both the folio > uptodate state and the iomap uptodate bitmap. > > Signed-off-by: Joanne Koong <[email protected]> > --- > fs/fuse/file.c | 2 +- > fs/fuse/notify.c | 4 +++- > 2 files changed, 4 insertions(+), 2 deletions(-) > > diff --git a/fs/fuse/file.c b/fs/fuse/file.c > index e052a0d44dee..26f27e113e9c 100644 > --- a/fs/fuse/file.c > +++ b/fs/fuse/file.c > @@ -1335,7 +1335,7 @@ static ssize_t fuse_fill_write_pages(struct fuse_io_args *ia, > > /* If we copied full folio, mark it uptodate */ > if (tmp == folio_size(folio)) > - folio_mark_uptodate(folio); > + iomap_folio_mark_uptodate(folio); > > if (folio_test_uptodate(folio)) { > folio_unlock(folio); > diff --git a/fs/fuse/notify.c b/fs/fuse/notify.c > index 29578104ae6c..1ba763705d91 100644 > --- a/fs/fuse/notify.c > +++ b/fs/fuse/notify.c > @@ -2,6 +2,8 @@ > > #include "dev.h" > #include "fuse_i.h" > + > +#include <linux/iomap.h> > #include <linux/pagemap.h> > > static int fuse_notify_poll(struct fuse_conn *fc, unsigned int size, > @@ -192,7 +194,7 @@ static int fuse_notify_store(struct fuse_conn *fc, unsigned int size, > if (!folio_test_uptodate(folio) && !err && folio_offset == 0 && > (nr_bytes == folio_size(folio) || file_size == end)) { > folio_zero_segment(folio, nr_bytes, folio_size(folio)); > - folio_mark_uptodate(folio); > + iomap_folio_mark_uptodate(folio); I wonder, if a fuse server stores to a range of dirty pagecache and completely over-stores the dirty range, can that folio still get scheduled for writeback? I guess it's no big deal if that writeback happens since the fuse server already knew about that content. --D > } > folio_unlock(folio); > folio_put(folio); > -- > 2.52.0 >