Source kernel commit: b7710262d743aca112877d12abed61ce8a5d0d98

Signed-off-by: Gao Xiang <hsiang...@linux.alibaba.com>
---
 include/erofs/internal.h |  4 ++--
 lib/zmap.c               | 20 ++++++++++----------
 2 files changed, 12 insertions(+), 12 deletions(-)

diff --git a/include/erofs/internal.h b/include/erofs/internal.h
index 90bee07..36df13a 100644
--- a/include/erofs/internal.h
+++ b/include/erofs/internal.h
@@ -270,8 +270,8 @@ struct erofs_inode {
                                erofs_off_t fragment_size;
                        };
                        union {
-                               unsigned int z_idataoff;
-                               erofs_off_t fragmentoff;
+                               erofs_off_t     fragmentoff;
+                               erofs_off_t     z_fragmentoff;
                        };
 #define z_idata_size   idata_size
                };
diff --git a/lib/zmap.c b/lib/zmap.c
index 30bb7e3..d47ed6b 100644
--- a/lib/zmap.c
+++ b/lib/zmap.c
@@ -414,8 +414,8 @@ static int z_erofs_do_map_blocks(struct erofs_inode *vi,
                                 int flags)
 {
        struct erofs_sb_info *sbi = vi->sbi;
-       bool ztailpacking = vi->z_advise & Z_EROFS_ADVISE_INLINE_PCLUSTER;
        bool fragment = vi->z_advise & Z_EROFS_ADVISE_FRAGMENT_PCLUSTER;
+       bool ztailpacking = vi->z_idata_size;
        struct z_erofs_maprecorder m = {
                .inode = vi,
                .map = map,
@@ -435,9 +435,8 @@ static int z_erofs_do_map_blocks(struct erofs_inode *vi,
        if (err)
                goto out;
 
-       if (ztailpacking && (flags & EROFS_GET_BLOCKS_FINDTAIL))
-               vi->z_idataoff = m.nextpackoff;
-
+       if ((flags & EROFS_GET_BLOCKS_FINDTAIL) && ztailpacking)
+               vi->z_fragmentoff = m.nextpackoff;
        map->m_flags = EROFS_MAP_MAPPED | EROFS_MAP_ENCODED;
        end = (m.lcn + 1ULL) << lclusterbits;
 
@@ -492,7 +491,7 @@ static int z_erofs_do_map_blocks(struct erofs_inode *vi,
        }
        if (ztailpacking && m.lcn == vi->z_tailextent_headlcn) {
                map->m_flags |= EROFS_MAP_META;
-               map->m_pa = vi->z_idataoff;
+               map->m_pa = vi->z_fragmentoff;
                map->m_plen = vi->z_idata_size;
        } else if (fragment && m.lcn == vi->z_tailextent_headlcn) {
                map->m_flags |= EROFS_MAP_FRAGMENT;
@@ -568,6 +567,10 @@ static int z_erofs_fill_inode_lazy(struct erofs_inode *vi)
        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_advise & Z_EROFS_ADVISE_FRAGMENT_PCLUSTER)
+               vi->z_fragmentoff = le32_to_cpu(h->h_fragmentoff);
+       else if (vi->z_advise & Z_EROFS_ADVISE_INLINE_PCLUSTER)
+               vi->z_idata_size = le16_to_cpu(h->h_idata_size);
 
        headnr = 0;
        if (vi->z_algorithmtype[0] >= Z_EROFS_COMPRESSION_MAX ||
@@ -586,14 +589,12 @@ static int z_erofs_fill_inode_lazy(struct erofs_inode *vi)
                return -EFSCORRUPTED;
        }
 
-       if (vi->z_advise & Z_EROFS_ADVISE_INLINE_PCLUSTER) {
+       if (vi->z_idata_size) {
                struct erofs_map_blocks map = { .index = UINT_MAX };
 
-               vi->idata_size = le16_to_cpu(h->h_idata_size);
                err = z_erofs_do_map_blocks(vi, &map,
                                            EROFS_GET_BLOCKS_FINDTAIL);
-               if (!map.m_plen ||
-                   erofs_blkoff(sbi, map.m_pa) + map.m_plen > 
erofs_blksiz(sbi)) {
+               if (erofs_blkoff(sbi, map.m_pa) + map.m_plen > 
erofs_blksiz(sbi)) {
                        erofs_err("invalid tail-packing pclustersize %llu",
                                  map.m_plen | 0ULL);
                        return -EFSCORRUPTED;
@@ -605,7 +606,6 @@ static int z_erofs_fill_inode_lazy(struct erofs_inode *vi)
            !(h->h_clusterbits >> Z_EROFS_FRAGMENT_INODE_BIT)) {
                struct erofs_map_blocks map = { .index = UINT_MAX };
 
-               vi->fragmentoff = le32_to_cpu(h->h_fragmentoff);
                err = z_erofs_do_map_blocks(vi, &map,
                                            EROFS_GET_BLOCKS_FINDTAIL);
                if (err < 0)
-- 
2.43.5


Reply via email to