Thanks, but this patch has an unwanted semicolon in the subject. On Tue, Sep 19, 2023 at 7:00 AM Matthew Wilcox (Oracle) <willy@xxxxxxxxxxxxx> wrote: > > Use the folio APIs, saving four hidden calls to compound_head(). > > Signed-off-by: Matthew Wilcox (Oracle) <willy@xxxxxxxxxxxxx> > --- > fs/gfs2/meta_io.c | 22 ++++++++-------------- > 1 file changed, 8 insertions(+), 14 deletions(-) > > diff --git a/fs/gfs2/meta_io.c b/fs/gfs2/meta_io.c > index f1fac1b45059..b28196015543 100644 > --- a/fs/gfs2/meta_io.c > +++ b/fs/gfs2/meta_io.c > @@ -400,26 +400,20 @@ static struct buffer_head *gfs2_getjdatabuf(struct gfs2_inode *ip, u64 blkno) > { > struct address_space *mapping = ip->i_inode.i_mapping; > struct gfs2_sbd *sdp = GFS2_SB(&ip->i_inode); > - struct page *page; > + struct folio *folio; > struct buffer_head *bh; > unsigned int shift = PAGE_SHIFT - sdp->sd_sb.sb_bsize_shift; > unsigned long index = blkno >> shift; /* convert block to page */ > unsigned int bufnum = blkno - (index << shift); > > - page = find_get_page_flags(mapping, index, FGP_LOCK|FGP_ACCESSED); > - if (!page) > - return NULL; > - if (!page_has_buffers(page)) { > - unlock_page(page); > - put_page(page); > + folio = __filemap_get_folio(mapping, index, FGP_LOCK | FGP_ACCESSED, 0); > + if (IS_ERR(folio)) > return NULL; > - } > - /* Locate header for our buffer within our page */ > - for (bh = page_buffers(page); bufnum--; bh = bh->b_this_page) > - /* Do nothing */; > - get_bh(bh); > - unlock_page(page); > - put_page(page); > + bh = folio_buffers(folio); > + if (bh) > + get_nth_bh(bh, bufnum); And we need this here: bh = get_nth_bh(bh, bufnum); > + folio_unlock(folio); > + folio_put(folio); > return bh; > } > > -- > 2.40.1 > > Reviewed-by: Andreas Gruenbacher <agruenba@xxxxxxxxxx>