On 2023/3/6 17:25, Yue Hu wrote:
On Mon, 6 Mar 2023 17:00:25 +0800
Gao Xiang <[email protected]> wrote:

On 2023/3/6 16:54, Yue Hu wrote:
From: Yue Hu <[email protected]>

Keep in sync with the kernel commit 999f2f9a63f4 ("erofs: get rid of
z_erofs_do_map_blocks() forward declaration").

Does z_erofs_do_map_blocks() already keep in sync with the kernel
implementation?  Anyway, it's just another question indepentently
to this patch.

Ok, let me correct the message in v2.

Nope, you just need to submit a new patch to sync these.




Signed-off-by: Yue Hu <[email protected]>
---
   lib/zmap.c | 156 ++++++++++++++++++++++++++---------------------------
   1 file changed, 76 insertions(+), 80 deletions(-)

diff --git a/lib/zmap.c b/lib/zmap.c
index 69b468d..3c665f8 100644
--- a/lib/zmap.c
+++ b/lib/zmap.c
@@ -10,10 +10,6 @@
   #include "erofs/io.h"
   #include "erofs/print.h"
-static int z_erofs_do_map_blocks(struct erofs_inode *vi,
-                                struct erofs_map_blocks *map,
-                                int flags);
-
   int z_erofs_fill_inode(struct erofs_inode *vi)
   {
        if (!erofs_sb_has_big_pcluster() &&
@@ -29,82 +25,6 @@ int z_erofs_fill_inode(struct erofs_inode *vi)
        return 0;
   }
-static int z_erofs_fill_inode_lazy(struct erofs_inode *vi)
-{
-       int ret;
-       erofs_off_t pos;
-       struct z_erofs_map_header *h;
-       char buf[sizeof(struct z_erofs_map_header)];
-
-       if (vi->flags & EROFS_I_Z_INITED)
-               return 0;
-
-       pos = round_up(iloc(vi->nid) + vi->inode_isize + vi->xattr_isize, 8);
-       ret = dev_read(0, buf, pos, sizeof(buf));
-       if (ret < 0)
-               return -EIO;
-
-       h = (struct z_erofs_map_header *)buf;
-       /*
-        * 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->fragmentoff = le64_to_cpu(*(__le64 *)h) ^ (1ULL << 63);
-               vi->z_tailextent_headlcn = 0;
-               goto out;
-       }
-
-       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;
-
-       if (vi->z_algorithmtype[0] >= Z_EROFS_COMPRESSION_MAX) {
-               erofs_err("unknown compression format %u for nid %llu",
-                         vi->z_algorithmtype[0], (unsigned long long)vi->nid);
-               return -EOPNOTSUPP;
-       }
-
-       vi->z_logical_clusterbits = LOG_BLOCK_SIZE + (h->h_clusterbits & 7);
-       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("big pcluster head1/2 of compact indexes should be 
consistent for nid %llu",
-                         vi->nid * 1ULL);
-               return -EFSCORRUPTED;
-       }
-
-       if (vi->z_advise & Z_EROFS_ADVISE_INLINE_PCLUSTER) {
-               struct erofs_map_blocks map = { .index = UINT_MAX };
-
-               vi->idata_size = le16_to_cpu(h->h_idata_size);
-               ret = z_erofs_do_map_blocks(vi, &map,
-                                           EROFS_GET_BLOCKS_FINDTAIL);
-               if (!map.m_plen ||
-                   erofs_blkoff(map.m_pa) + map.m_plen > EROFS_BLKSIZ) {
-                       erofs_err("invalid tail-packing pclustersize %llu",
-                                 map.m_plen | 0ULL);
-                       return -EFSCORRUPTED;
-               }
-               if (ret < 0)
-                       return ret;
-       }
-       if (vi->z_advise & Z_EROFS_ADVISE_FRAGMENT_PCLUSTER &&
-           !(h->h_clusterbits >> Z_EROFS_FRAGMENT_INODE_BIT)) {
-               struct erofs_map_blocks map = { .index = UINT_MAX };
-
-               vi->fragmentoff = le32_to_cpu(h->h_fragmentoff);
-               ret = z_erofs_do_map_blocks(vi, &map,
-                                           EROFS_GET_BLOCKS_FINDTAIL);
-               if (ret < 0)
-                       return ret;
-       }
-out:
-       vi->flags |= EROFS_I_Z_INITED;
-       return 0;
-}
-
   struct z_erofs_maprecorder {
        struct erofs_inode *inode;
        struct erofs_map_blocks *map;
@@ -675,6 +595,82 @@ out:
        return err;
   }
+static int z_erofs_fill_inode_lazy(struct erofs_inode *vi)
+{
+       int ret;
+       erofs_off_t pos;
+       struct z_erofs_map_header *h;
+       char buf[sizeof(struct z_erofs_map_header)];
+
+       if (vi->flags & EROFS_I_Z_INITED)
+               return 0;
+
+       pos = round_up(iloc(vi->nid) + vi->inode_isize + vi->xattr_isize, 8);
+       ret = dev_read(0, buf, pos, sizeof(buf));
+       if (ret < 0)
+               return -EIO;
+
+       h = (struct z_erofs_map_header *)buf;
+       /*
+        * 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->fragmentoff = le64_to_cpu(*(__le64 *)h) ^ (1ULL << 63);
+               vi->z_tailextent_headlcn = 0;
+               goto out;
+       }
+
+       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;
+
+       if (vi->z_algorithmtype[0] >= Z_EROFS_COMPRESSION_MAX) {
+               erofs_err("unknown compression format %u for nid %llu",
+                         vi->z_algorithmtype[0], (unsigned long long)vi->nid);
+               return -EOPNOTSUPP;
+       }
+
+       vi->z_logical_clusterbits = LOG_BLOCK_SIZE + (h->h_clusterbits & 7);
+       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("big pcluster head1/2 of compact indexes should be 
consistent for nid %llu",
+                         vi->nid * 1ULL);
+               return -EFSCORRUPTED;
+       }
+
+       if (vi->z_advise & Z_EROFS_ADVISE_INLINE_PCLUSTER) {
+               struct erofs_map_blocks map = { .index = UINT_MAX };
+
+               vi->idata_size = le16_to_cpu(h->h_idata_size);
+               ret = z_erofs_do_map_blocks(vi, &map,
+                                           EROFS_GET_BLOCKS_FINDTAIL);
+               if (!map.m_plen ||
+                   erofs_blkoff(map.m_pa) + map.m_plen > EROFS_BLKSIZ) {
+                       erofs_err("invalid tail-packing pclustersize %llu",
+                                 map.m_plen | 0ULL);
+                       return -EFSCORRUPTED;
+               }
+               if (ret < 0)
+                       return ret;
+       }
+       if (vi->z_advise & Z_EROFS_ADVISE_FRAGMENT_PCLUSTER &&
+           !(h->h_clusterbits >> Z_EROFS_FRAGMENT_INODE_BIT)) {
+               struct erofs_map_blocks map = { .index = UINT_MAX };
+
+               vi->fragmentoff = le32_to_cpu(h->h_fragmentoff);
+               ret = z_erofs_do_map_blocks(vi, &map,
+                                           EROFS_GET_BLOCKS_FINDTAIL);
+               if (ret < 0)
+                       return ret;
+       }
+out:
+       vi->flags |= EROFS_I_Z_INITED;
+       return 0;
+}
+
   int z_erofs_map_blocks_iter(struct erofs_inode *vi,
                            struct erofs_map_blocks *map,
                            int flags)

Reply via email to