OSDN Git Service

erofs: use meta buffers for erofs_read_superblock()
authorJeffle Xu <jefflexu@linux.alibaba.com>
Wed, 9 Feb 2022 06:00:52 +0000 (14:00 +0800)
committerGao Xiang <hsiangkao@linux.alibaba.com>
Wed, 16 Mar 2022 01:34:40 +0000 (09:34 +0800)
The only change is that, meta buffers read cache page without __GFP_FS
flag, which shall not matter.

Link: https://lore.kernel.org/r/20220209060108.43051-7-jefflexu@linux.alibaba.com
Signed-off-by: Jeffle Xu <jefflexu@linux.alibaba.com>
Reviewed-by: Gao Xiang <hsiangkao@linux.alibaba.com>
Reviewed-by: Chao Yu <chao@kernel.org>
Signed-off-by: Gao Xiang <hsiangkao@linux.alibaba.com>
fs/erofs/super.c

index 915eefe..1275521 100644 (file)
@@ -281,21 +281,19 @@ static int erofs_init_devices(struct super_block *sb,
 static int erofs_read_superblock(struct super_block *sb)
 {
        struct erofs_sb_info *sbi;
-       struct page *page;
+       struct erofs_buf buf = __EROFS_BUF_INITIALIZER;
        struct erofs_super_block *dsb;
        unsigned int blkszbits;
        void *data;
        int ret;
 
-       page = read_mapping_page(sb->s_bdev->bd_inode->i_mapping, 0, NULL);
-       if (IS_ERR(page)) {
+       data = erofs_read_metabuf(&buf, sb, 0, EROFS_KMAP);
+       if (IS_ERR(data)) {
                erofs_err(sb, "cannot read erofs superblock");
-               return PTR_ERR(page);
+               return PTR_ERR(data);
        }
 
        sbi = EROFS_SB(sb);
-
-       data = kmap(page);
        dsb = (struct erofs_super_block *)(data + EROFS_SUPER_OFFSET);
 
        ret = -EINVAL;
@@ -365,8 +363,7 @@ static int erofs_read_superblock(struct super_block *sb)
        if (erofs_sb_has_ztailpacking(sbi))
                erofs_info(sb, "EXPERIMENTAL compressed inline data feature in use. Use at your own risk!");
 out:
-       kunmap(page);
-       put_page(page);
+       erofs_put_metabuf(&buf);
        return ret;
 }