Message ID | 20230919045135.3635437-8-willy@infradead.org |
---|---|
State | Not Applicable |
Headers | show |
Series | Finish the create_empty_buffers() transition | expand |
Thanks, but this patch has an unwanted semicolon in the subject. On Tue, Sep 19, 2023 at 7:00 AM Matthew Wilcox (Oracle) <willy@infradead.org> wrote: > > Use the folio APIs, saving four hidden calls to compound_head(). > > Signed-off-by: Matthew Wilcox (Oracle) <willy@infradead.org> > --- > 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@redhat.com>
On Wed, Sep 20, 2023 at 12:27:08AM +0200, Andreas Gruenbacher wrote: > Thanks, > > but this patch has an unwanted semicolon in the subject. Thanks. My laptop has a dodgy shift key, so this sometimes happens. The build quality on HP Spectre laptops has gone downhill in the last few years. > > - 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); Oof. I should make that __must_check so the compiler tells me I'm being an idiot. Thanks!
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); + folio_unlock(folio); + folio_put(folio); return bh; }
Use the folio APIs, saving four hidden calls to compound_head(). Signed-off-by: Matthew Wilcox (Oracle) <willy@infradead.org> --- fs/gfs2/meta_io.c | 22 ++++++++-------------- 1 file changed, 8 insertions(+), 14 deletions(-)