On Fri, Jun 13, 2025 at 1:14 PM Joanne Koong <joannelkoong@xxxxxxxxx> wrote: > > On Fri, Jun 13, 2025 at 9:46 AM Matthew Wilcox (Oracle) > <willy@xxxxxxxxxxxxx> wrote: > > > > Retrieve a folio from the page cache and use it throughout. > > Removes three hidden calls to compound_head(). > > > > Signed-off-by: Matthew Wilcox (Oracle) <willy@xxxxxxxxxxxxx> > > Reviewed-by: Joanne Koong <joannelkoong@xxxxxxxxx> > > > --- > > fs/fuse/readdir.c | 23 ++++++++++++----------- > > 1 file changed, 12 insertions(+), 11 deletions(-) > > > > diff --git a/fs/fuse/readdir.c b/fs/fuse/readdir.c > > index c2aae2eef086..09bed488ee35 100644 > > --- a/fs/fuse/readdir.c > > +++ b/fs/fuse/readdir.c > > @@ -35,7 +35,7 @@ static void fuse_add_dirent_to_cache(struct file *file, > > struct fuse_inode *fi = get_fuse_inode(file_inode(file)); > > size_t reclen = FUSE_DIRENT_SIZE(dirent); > > pgoff_t index; > > - struct page *page; > > + struct folio *folio; > > loff_t size; > > u64 version; > > unsigned int offset; > > @@ -62,12 +62,13 @@ static void fuse_add_dirent_to_cache(struct file *file, > > spin_unlock(&fi->rdc.lock); > > > > if (offset) { > > - page = find_lock_page(file->f_mapping, index); > > + folio = filemap_lock_folio(file->f_mapping, index); > > } else { > > - page = find_or_create_page(file->f_mapping, index, > > - mapping_gfp_mask(file->f_mapping)); > > + folio = __filemap_get_folio(file->f_mapping, index, > > + FGP_LOCK | FGP_ACCESSED | FGP_CREAT, > > + mapping_gfp_mask(file->f_mapping)); > > nit: in the fuse codebase, the convention for line breaks is for the > next line to have the same indentation as where the previous line's > args start Just noticed this, it looks like the filemap_grab_folio() api does the same thing and can be used here. > > > } > > - if (!page) > > + if (!folio) I think this needs to be "if (IS_ERR(folio))" instead > > return;