On Tue, Oct 01, 2024 at 09:54:51AM -0700, Joanne Koong wrote: > On Mon, Sep 30, 2024 at 6:46 AM Josef Bacik <josef@xxxxxxxxxxxxxx> wrote: > > > > Now that the buffered write path is using folios, convert > > fuse_do_readpage() to take a folio instead of a page, update it to use > > the appropriate folio helpers, and update the callers to pass in the > > folio directly instead of a page. > > > > Signed-off-by: Josef Bacik <josef@xxxxxxxxxxxxxx> > > Reviewed-by: Joanne Koong <joannelkoong@xxxxxxxxx> > > > --- > > fs/fuse/file.c | 26 +++++++++++++------------- > > 1 file changed, 13 insertions(+), 13 deletions(-) > > > > diff --git a/fs/fuse/file.c b/fs/fuse/file.c > > index 2af9ec67a8e7..45667c40de7a 100644 > > --- a/fs/fuse/file.c > > +++ b/fs/fuse/file.c > > @@ -858,12 +858,13 @@ static void fuse_short_read(struct inode *inode, u64 attr_ver, size_t num_read, > > } > > } > > > > -static int fuse_do_readpage(struct file *file, struct page *page) > > +static int fuse_do_readfolio(struct file *file, struct folio *folio) > > { > > - struct inode *inode = page->mapping->host; > > + struct inode *inode = folio->mapping->host; > > struct fuse_mount *fm = get_fuse_mount(inode); > > - loff_t pos = page_offset(page); > > + loff_t pos = folio_pos(folio); > > struct fuse_page_desc desc = { .length = PAGE_SIZE }; > > + struct page *page = &folio->page; > > struct fuse_io_args ia = { > > .ap.args.page_zeroing = true, > > .ap.args.out_pages = true, > > @@ -875,11 +876,11 @@ static int fuse_do_readpage(struct file *file, struct page *page) > > u64 attr_ver; > > > > /* > > - * Page writeback can extend beyond the lifetime of the > > - * page-cache page, so make sure we read a properly synced > > - * page. > > + * With the temporary pages that are used to complete writeback, we can > > + * have writeback that extends beyond the lifetime of the folio. So > > + * make sure we read a properly synced folio. > > */ > > - fuse_wait_on_page_writeback(inode, page->index); > > + fuse_wait_on_folio_writeback(inode, folio); > > > > attr_ver = fuse_get_attr_version(fm->fc); > > > > @@ -897,25 +898,24 @@ static int fuse_do_readpage(struct file *file, struct page *page) > > if (res < desc.length) > > fuse_short_read(inode, attr_ver, res, &ia.ap); > > > > - SetPageUptodate(page); > > + folio_mark_uptodate(folio); > > > > return 0; > > } > > > > static int fuse_read_folio(struct file *file, struct folio *folio) > > { > > - struct page *page = &folio->page; > > - struct inode *inode = page->mapping->host; > > + struct inode *inode = folio->mapping->host; > > int err; > > > > err = -EIO; > > if (fuse_is_bad(inode)) > > goto out; > > > > - err = fuse_do_readpage(file, page); > > + err = fuse_do_readfolio(file, folio); > > fuse_invalidate_atime(inode); > > out: > > - unlock_page(page); > > + folio_unlock(folio); > > return err; > > } > > > > @@ -2444,7 +2444,7 @@ static int fuse_write_begin(struct file *file, struct address_space *mapping, > > folio_zero_segment(folio, 0, off); > > goto success; > > } > > - err = fuse_do_readpage(file, &folio->page); > > + err = fuse_do_readfolio(file, folio); > > I'm on top of Miklos' for-next tree but I'm seeing this patch unable > to apply cleanly. On the top of the tree, I see the original line as: > > err = fuse_do_readpage(file, page); > > Is there another patch/patchset this stack is based on top of? Yeah Willy had a folio conversion that's in Linus's tree but is newer than Miklos's base for his tree. Thanks, Josef