Skip to content

Commit

Permalink
erofs: use read_mapping_page instead of sb_bread
Browse files Browse the repository at this point in the history
As Christoph said [1], "This seems to be your only direct
use of buffer heads, which while not deprecated are a bit
of an ugly step child.  So if you can easily avoid creating
a buffer_head dependency in a new filesystem I think you
should avoid it. "

[1] https://lore.kernel.org/r/[email protected]/
Reported-by: Christoph Hellwig <[email protected]>
Signed-off-by: Gao Xiang <[email protected]>
Link: https://lore.kernel.org/r/[email protected]
Signed-off-by: Greg Kroah-Hartman <[email protected]>
  • Loading branch information
Gao Xiang authored and gregkh committed Sep 5, 2019
1 parent 4f761fa commit fe7c242
Showing 1 changed file with 9 additions and 6 deletions.
15 changes: 9 additions & 6 deletions fs/erofs/super.c
Original file line number Diff line number Diff line change
Expand Up @@ -98,20 +98,22 @@ static bool check_layout_compatibility(struct super_block *sb,
static int erofs_read_superblock(struct super_block *sb)
{
struct erofs_sb_info *sbi;
struct buffer_head *bh;
struct page *page;
struct erofs_super_block *dsb;
unsigned int blkszbits;
void *data;
int ret;

bh = sb_bread(sb, 0);

if (!bh) {
page = read_mapping_page(sb->s_bdev->bd_inode->i_mapping, 0, NULL);
if (!page) {
erofs_err(sb, "cannot read erofs superblock");
return -EIO;
}

sbi = EROFS_SB(sb);
dsb = (struct erofs_super_block *)(bh->b_data + EROFS_SUPER_OFFSET);

data = kmap_atomic(page);
dsb = (struct erofs_super_block *)(data + EROFS_SUPER_OFFSET);

ret = -EINVAL;
if (le32_to_cpu(dsb->magic) != EROFS_SUPER_MAGIC_V1) {
Expand Down Expand Up @@ -153,7 +155,8 @@ static int erofs_read_superblock(struct super_block *sb)
}
ret = 0;
out:
brelse(bh);
kunmap_atomic(data);
put_page(page);
return ret;
}

Expand Down

0 comments on commit fe7c242

Please sign in to comment.