summaryrefslogtreecommitdiffstats
path: root/fs/erofs/super.c
diff options
context:
space:
mode:
authorGao Xiang <gaoxiang25@huawei.com>2019-09-04 10:09:10 +0800
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>2019-09-05 20:10:09 +0200
commitfe7c2423570dca4ffb9adc53225344ffd4a9f49a (patch)
tree411970f8276d246ecf177e4eabf642b22e51fa3a /fs/erofs/super.c
parent4f761fa253b49f657de7ef6f695a124e08e56c3a (diff)
downloadlinux-fe7c2423570dca4ffb9adc53225344ffd4a9f49a.tar.gz
linux-fe7c2423570dca4ffb9adc53225344ffd4a9f49a.tar.bz2
linux-fe7c2423570dca4ffb9adc53225344ffd4a9f49a.zip
erofs: use read_mapping_page instead of sb_bread
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/20190902125109.GA9826@infradead.org/ Reported-by: Christoph Hellwig <hch@infradead.org> Signed-off-by: Gao Xiang <gaoxiang25@huawei.com> Link: https://lore.kernel.org/r/20190904020912.63925-24-gaoxiang25@huawei.com Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Diffstat (limited to 'fs/erofs/super.c')
-rw-r--r--fs/erofs/super.c15
1 files changed, 9 insertions, 6 deletions
diff --git a/fs/erofs/super.c b/fs/erofs/super.c
index 1d9880195ef0..caf9a95173b0 100644
--- a/fs/erofs/super.c
+++ b/fs/erofs/super.c
@@ -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) {
@@ -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;
}