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? Thanks, Joanne > if (err) > goto cleanup; > success: > -- > 2.43.0 > >