v2: https://lore.kernel.org/linux-fsdevel/cover.1724879414.git.josef@xxxxxxxxxxxxxx/ v1: https://lore.kernel.org/linux-fsdevel/cover.1724791233.git.josef@xxxxxxxxxxxxxx/ v2->v3: - Discussions with Willy at Plumbers helped clarify expectations around large folio usage, he had already converted the generic_perform_write to deal with large folios, so I dropped the iomap conversion since it's a bit overkill for FUSE's buffered use case. - Rebased onto linus + fuse/for-next. I had to combine the branches because fuse/for-next is behind linus and there are fixes from Jann and Willy that aren't in the FUSE tree. - Pushed a new GH branch since I had to combine everything https://github.com/josefbacik/linux/tree/fuse-folio-prep v1->v2: - Fixed my fstests setup to use --nopassthrough so my code actually got tested this time. - Fixed a bug where we double put on the folio in readpages, because previous behavior was the reference was maintained until the endio, but readahead_folio() drops the reference on the folio, so we need to not call put in the endio anymore. - Fixed the IS_ERR inversion pointed out by Joanne. - Made the various adjustments pointed out by Willy. - Updated the Kconfig per hch's suggestion. - Pushed to my GH tree since there are dependencies to make it easier to see what the code is https://github.com/josefbacik/linux/tree/fuse-iomap --- Original email --- Hello, This is a prep series for my work to enable large folios on fuse. It has two dependencies, one is Joanne's writeback clean patches https://lore.kernel.org/linux-fsdevel/20240826211908.75190-1-joannelkoong@xxxxxxxxx/ and an iomap patch to allow us to pass the file through the buffered write path https://lore.kernel.org/linux-fsdevel/7f55c7c32275004ba00cddf862d970e6e633f750.1724755651.git.josef@xxxxxxxxxxxxxx/ I've run these through an fstests run with passthrough_hp --direct-io, everything looks good. The last remaining bit that needs to be made to use folios is the splice/pipe code, which I need to be a lot more careful about. The next step is to plumb through the ability to handle large folios. But this is a decent start and removes the bulk of FUSE's use of struct page, and is relatively safe and straightforward. Thanks, Josef Josef Bacik (10): fuse: convert readahead to use folios fuse: convert fuse_send_write_pages to use folios fuse: convert fuse_fill_write_pages to use folios fuse: convert fuse_page_mkwrite to use folios fuse: use kiocb_modified in buffered write path fuse: convert fuse_do_readpage to use folios fuse: convert fuse_writepage_need_send to take a folio fuse: use the folio based vmstat helpers fuse: convert fuse_retrieve to use folios fuse: convert fuse_notify_store to use folios fs/fuse/dev.c | 38 ++++++------ fs/fuse/file.c | 163 ++++++++++++++++++++++++++++--------------------- 2 files changed, 116 insertions(+), 85 deletions(-) -- 2.43.0