diff options
author | Gao Xiang <gaoxiang25@huawei.com> | 2019-09-04 05:09:10 +0300 |
---|---|---|
committer | Greg Kroah-Hartman <gregkh@linuxfoundation.org> | 2019-09-05 21:10:09 +0300 |
commit | fe7c2423570dca4ffb9adc53225344ffd4a9f49a (patch) | |
tree | 411970f8276d246ecf177e4eabf642b22e51fa3a | |
parent | 4f761fa253b49f657de7ef6f695a124e08e56c3a (diff) | |
download | linux-fe7c2423570dca4ffb9adc53225344ffd4a9f49a.tar.xz |
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>
-rw-r--r-- | fs/erofs/super.c | 15 |
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; } |