mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-10-01 06:33:07 +00:00
gfs2: convert gfs2_getjdatabuf to use a folio
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>
This commit is contained in:
parent
0eb751791d
commit
c646e57372
1 changed files with 8 additions and 14 deletions
|
@ -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)
|
||||
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;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue