| From: "Matthew Wilcox (Oracle)" <willy@infradead.org> |
| Subject: gfs2: convert gfs2_getjdatabuf to use a folio |
| Date: Mon, 16 Oct 2023 21:10:55 +0100 |
| |
| Use the folio APIs, saving four hidden calls to compound_head(). |
| |
| Link: https://lkml.kernel.org/r/20231016201114.1928083-9-willy@infradead.org |
| Signed-off-by: Matthew Wilcox (Oracle) <willy@infradead.org> |
| Reviewed-by: Andreas Gruenbacher <agruenba@redhat.com> |
| Cc: Pankaj Raghav <p.raghav@samsung.com> |
| Cc: Ryusuke Konishi <konishi.ryusuke@gmail.com> |
| Signed-off-by: Andrew Morton <akpm@linux-foundation.org> |
| --- |
| |
| fs/gfs2/meta_io.c | 22 ++++++++-------------- |
| 1 file changed, 8 insertions(+), 14 deletions(-) |
| |
| --- a/fs/gfs2/meta_io.c~gfs2-convert-gfs2_getjdatabuf-to-use-a-folio |
| +++ a/fs/gfs2/meta_io.c |
| @@ -400,26 +400,20 @@ static struct buffer_head *gfs2_getjdata |
| { |
| 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) |
| + folio = __filemap_get_folio(mapping, index, FGP_LOCK | FGP_ACCESSED, 0); |
| + if (IS_ERR(folio)) |
| return NULL; |
| - if (!page_has_buffers(page)) { |
| - unlock_page(page); |
| - put_page(page); |
| - 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) |
| + bh = get_nth_bh(bh, bufnum); |
| + folio_unlock(folio); |
| + folio_put(folio); |
| return bh; |
| } |
| |
| _ |