erofs: get rid of z_erofs_do_map_blocks() forward declaration
authorGao Xiang <hsiangkao@linux.alibaba.com>
Sat, 4 Feb 2023 09:30:39 +0000 (17:30 +0800)
committerGao Xiang <hsiangkao@linux.alibaba.com>
Wed, 15 Feb 2023 00:11:25 +0000 (08:11 +0800)
The code can be neater without forward declarations.  Let's
get rid of z_erofs_do_map_blocks() forward declaration.

Reviewed-by: Yue Hu <huyue2@coolpad.com>
Reviewed-by: Chao Yu <chao@kernel.org>
Signed-off-by: Gao Xiang <hsiangkao@linux.alibaba.com>
Link: https://lore.kernel.org/r/20230204093040.97967-5-hsiangkao@linux.alibaba.com
fs/erofs/zmap.c

index 3aeffc762b2f18c3655a14bd83643149b3968afc..8bf6d30518b64834de5e3c859825f3680efc675d 100644 (file)
@@ -7,10 +7,6 @@
 #include <asm/unaligned.h>
 #include <trace/events/erofs.h>
 
-static int z_erofs_do_map_blocks(struct inode *inode,
-                                struct erofs_map_blocks *map,
-                                int flags);
-
 int z_erofs_fill_inode(struct inode *inode)
 {
        struct erofs_inode *const vi = EROFS_I(inode);
@@ -29,125 +25,6 @@ int z_erofs_fill_inode(struct inode *inode)
        return 0;
 }
 
-static int z_erofs_fill_inode_lazy(struct inode *inode)
-{
-       struct erofs_inode *const vi = EROFS_I(inode);
-       struct super_block *const sb = inode->i_sb;
-       int err, headnr;
-       erofs_off_t pos;
-       struct erofs_buf buf = __EROFS_BUF_INITIALIZER;
-       void *kaddr;
-       struct z_erofs_map_header *h;
-
-       if (test_bit(EROFS_I_Z_INITED_BIT, &vi->flags)) {
-               /*
-                * paired with smp_mb() at the end of the function to ensure
-                * fields will only be observed after the bit is set.
-                */
-               smp_mb();
-               return 0;
-       }
-
-       if (wait_on_bit_lock(&vi->flags, EROFS_I_BL_Z_BIT, TASK_KILLABLE))
-               return -ERESTARTSYS;
-
-       err = 0;
-       if (test_bit(EROFS_I_Z_INITED_BIT, &vi->flags))
-               goto out_unlock;
-
-       pos = ALIGN(erofs_iloc(inode) + vi->inode_isize + vi->xattr_isize, 8);
-       kaddr = erofs_read_metabuf(&buf, sb, erofs_blknr(pos), EROFS_KMAP);
-       if (IS_ERR(kaddr)) {
-               err = PTR_ERR(kaddr);
-               goto out_unlock;
-       }
-
-       h = kaddr + erofs_blkoff(pos);
-       /*
-        * if the highest bit of the 8-byte map header is set, the whole file
-        * is stored in the packed inode. The rest bits keeps z_fragmentoff.
-        */
-       if (h->h_clusterbits >> Z_EROFS_FRAGMENT_INODE_BIT) {
-               vi->z_advise = Z_EROFS_ADVISE_FRAGMENT_PCLUSTER;
-               vi->z_fragmentoff = le64_to_cpu(*(__le64 *)h) ^ (1ULL << 63);
-               vi->z_tailextent_headlcn = 0;
-               goto done;
-       }
-       vi->z_advise = le16_to_cpu(h->h_advise);
-       vi->z_algorithmtype[0] = h->h_algorithmtype & 15;
-       vi->z_algorithmtype[1] = h->h_algorithmtype >> 4;
-
-       headnr = 0;
-       if (vi->z_algorithmtype[0] >= Z_EROFS_COMPRESSION_MAX ||
-           vi->z_algorithmtype[++headnr] >= Z_EROFS_COMPRESSION_MAX) {
-               erofs_err(sb, "unknown HEAD%u format %u for nid %llu, please upgrade kernel",
-                         headnr + 1, vi->z_algorithmtype[headnr], vi->nid);
-               err = -EOPNOTSUPP;
-               goto out_put_metabuf;
-       }
-
-       vi->z_logical_clusterbits = LOG_BLOCK_SIZE + (h->h_clusterbits & 7);
-       if (!erofs_sb_has_big_pcluster(EROFS_SB(sb)) &&
-           vi->z_advise & (Z_EROFS_ADVISE_BIG_PCLUSTER_1 |
-                           Z_EROFS_ADVISE_BIG_PCLUSTER_2)) {
-               erofs_err(sb, "per-inode big pcluster without sb feature for nid %llu",
-                         vi->nid);
-               err = -EFSCORRUPTED;
-               goto out_put_metabuf;
-       }
-       if (vi->datalayout == EROFS_INODE_FLAT_COMPRESSION &&
-           !(vi->z_advise & Z_EROFS_ADVISE_BIG_PCLUSTER_1) ^
-           !(vi->z_advise & Z_EROFS_ADVISE_BIG_PCLUSTER_2)) {
-               erofs_err(sb, "big pcluster head1/2 of compact indexes should be consistent for nid %llu",
-                         vi->nid);
-               err = -EFSCORRUPTED;
-               goto out_put_metabuf;
-       }
-
-       if (vi->z_advise & Z_EROFS_ADVISE_INLINE_PCLUSTER) {
-               struct erofs_map_blocks map = {
-                       .buf = __EROFS_BUF_INITIALIZER
-               };
-
-               vi->z_idata_size = le16_to_cpu(h->h_idata_size);
-               err = z_erofs_do_map_blocks(inode, &map,
-                                           EROFS_GET_BLOCKS_FINDTAIL);
-               erofs_put_metabuf(&map.buf);
-
-               if (!map.m_plen ||
-                   erofs_blkoff(map.m_pa) + map.m_plen > EROFS_BLKSIZ) {
-                       erofs_err(sb, "invalid tail-packing pclustersize %llu",
-                                 map.m_plen);
-                       err = -EFSCORRUPTED;
-               }
-               if (err < 0)
-                       goto out_put_metabuf;
-       }
-
-       if (vi->z_advise & Z_EROFS_ADVISE_FRAGMENT_PCLUSTER &&
-           !(h->h_clusterbits >> Z_EROFS_FRAGMENT_INODE_BIT)) {
-               struct erofs_map_blocks map = {
-                       .buf = __EROFS_BUF_INITIALIZER
-               };
-
-               vi->z_fragmentoff = le32_to_cpu(h->h_fragmentoff);
-               err = z_erofs_do_map_blocks(inode, &map,
-                                           EROFS_GET_BLOCKS_FINDTAIL);
-               erofs_put_metabuf(&map.buf);
-               if (err < 0)
-                       goto out_put_metabuf;
-       }
-done:
-       /* paired with smp_mb() at the beginning of the function */
-       smp_mb();
-       set_bit(EROFS_I_Z_INITED_BIT, &vi->flags);
-out_put_metabuf:
-       erofs_put_metabuf(&buf);
-out_unlock:
-       clear_and_wake_up_bit(EROFS_I_BL_Z_BIT, &vi->flags);
-       return err;
-}
-
 struct z_erofs_maprecorder {
        struct inode *inode;
        struct erofs_map_blocks *map;
@@ -729,6 +606,125 @@ unmap_out:
        return err;
 }
 
+static int z_erofs_fill_inode_lazy(struct inode *inode)
+{
+       struct erofs_inode *const vi = EROFS_I(inode);
+       struct super_block *const sb = inode->i_sb;
+       int err, headnr;
+       erofs_off_t pos;
+       struct erofs_buf buf = __EROFS_BUF_INITIALIZER;
+       void *kaddr;
+       struct z_erofs_map_header *h;
+
+       if (test_bit(EROFS_I_Z_INITED_BIT, &vi->flags)) {
+               /*
+                * paired with smp_mb() at the end of the function to ensure
+                * fields will only be observed after the bit is set.
+                */
+               smp_mb();
+               return 0;
+       }
+
+       if (wait_on_bit_lock(&vi->flags, EROFS_I_BL_Z_BIT, TASK_KILLABLE))
+               return -ERESTARTSYS;
+
+       err = 0;
+       if (test_bit(EROFS_I_Z_INITED_BIT, &vi->flags))
+               goto out_unlock;
+
+       pos = ALIGN(erofs_iloc(inode) + vi->inode_isize + vi->xattr_isize, 8);
+       kaddr = erofs_read_metabuf(&buf, sb, erofs_blknr(pos), EROFS_KMAP);
+       if (IS_ERR(kaddr)) {
+               err = PTR_ERR(kaddr);
+               goto out_unlock;
+       }
+
+       h = kaddr + erofs_blkoff(pos);
+       /*
+        * if the highest bit of the 8-byte map header is set, the whole file
+        * is stored in the packed inode. The rest bits keeps z_fragmentoff.
+        */
+       if (h->h_clusterbits >> Z_EROFS_FRAGMENT_INODE_BIT) {
+               vi->z_advise = Z_EROFS_ADVISE_FRAGMENT_PCLUSTER;
+               vi->z_fragmentoff = le64_to_cpu(*(__le64 *)h) ^ (1ULL << 63);
+               vi->z_tailextent_headlcn = 0;
+               goto done;
+       }
+       vi->z_advise = le16_to_cpu(h->h_advise);
+       vi->z_algorithmtype[0] = h->h_algorithmtype & 15;
+       vi->z_algorithmtype[1] = h->h_algorithmtype >> 4;
+
+       headnr = 0;
+       if (vi->z_algorithmtype[0] >= Z_EROFS_COMPRESSION_MAX ||
+           vi->z_algorithmtype[++headnr] >= Z_EROFS_COMPRESSION_MAX) {
+               erofs_err(sb, "unknown HEAD%u format %u for nid %llu, please upgrade kernel",
+                         headnr + 1, vi->z_algorithmtype[headnr], vi->nid);
+               err = -EOPNOTSUPP;
+               goto out_put_metabuf;
+       }
+
+       vi->z_logical_clusterbits = LOG_BLOCK_SIZE + (h->h_clusterbits & 7);
+       if (!erofs_sb_has_big_pcluster(EROFS_SB(sb)) &&
+           vi->z_advise & (Z_EROFS_ADVISE_BIG_PCLUSTER_1 |
+                           Z_EROFS_ADVISE_BIG_PCLUSTER_2)) {
+               erofs_err(sb, "per-inode big pcluster without sb feature for nid %llu",
+                         vi->nid);
+               err = -EFSCORRUPTED;
+               goto out_put_metabuf;
+       }
+       if (vi->datalayout == EROFS_INODE_FLAT_COMPRESSION &&
+           !(vi->z_advise & Z_EROFS_ADVISE_BIG_PCLUSTER_1) ^
+           !(vi->z_advise & Z_EROFS_ADVISE_BIG_PCLUSTER_2)) {
+               erofs_err(sb, "big pcluster head1/2 of compact indexes should be consistent for nid %llu",
+                         vi->nid);
+               err = -EFSCORRUPTED;
+               goto out_put_metabuf;
+       }
+
+       if (vi->z_advise & Z_EROFS_ADVISE_INLINE_PCLUSTER) {
+               struct erofs_map_blocks map = {
+                       .buf = __EROFS_BUF_INITIALIZER
+               };
+
+               vi->z_idata_size = le16_to_cpu(h->h_idata_size);
+               err = z_erofs_do_map_blocks(inode, &map,
+                                           EROFS_GET_BLOCKS_FINDTAIL);
+               erofs_put_metabuf(&map.buf);
+
+               if (!map.m_plen ||
+                   erofs_blkoff(map.m_pa) + map.m_plen > EROFS_BLKSIZ) {
+                       erofs_err(sb, "invalid tail-packing pclustersize %llu",
+                                 map.m_plen);
+                       err = -EFSCORRUPTED;
+               }
+               if (err < 0)
+                       goto out_put_metabuf;
+       }
+
+       if (vi->z_advise & Z_EROFS_ADVISE_FRAGMENT_PCLUSTER &&
+           !(h->h_clusterbits >> Z_EROFS_FRAGMENT_INODE_BIT)) {
+               struct erofs_map_blocks map = {
+                       .buf = __EROFS_BUF_INITIALIZER
+               };
+
+               vi->z_fragmentoff = le32_to_cpu(h->h_fragmentoff);
+               err = z_erofs_do_map_blocks(inode, &map,
+                                           EROFS_GET_BLOCKS_FINDTAIL);
+               erofs_put_metabuf(&map.buf);
+               if (err < 0)
+                       goto out_put_metabuf;
+       }
+done:
+       /* paired with smp_mb() at the beginning of the function */
+       smp_mb();
+       set_bit(EROFS_I_Z_INITED_BIT, &vi->flags);
+out_put_metabuf:
+       erofs_put_metabuf(&buf);
+out_unlock:
+       clear_and_wake_up_bit(EROFS_I_BL_Z_BIT, &vi->flags);
+       return err;
+}
+
 int z_erofs_map_blocks_iter(struct inode *inode, struct erofs_map_blocks *map,
                            int flags)
 {