]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
erofs: use Z_EROFS_LCLUSTER_TYPE_MAX to simplify switches
authorHongzhen Luo <hongzhen@linux.alibaba.com>
Wed, 23 Jul 2025 13:50:06 +0000 (09:50 -0400)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Fri, 1 Aug 2025 08:48:45 +0000 (09:48 +0100)
[ Upstream commit 3b7781aeaefb627d4e07c1af9be923f9e8047d8b ]

There's no need to enumerate each type.  No logic changes.

Signed-off-by: Hongzhen Luo <hongzhen@linux.alibaba.com>
Reviewed-by: Gao Xiang <hsiangkao@linux.alibaba.com>
Reviewed-by: Chao Yu <chao@kernel.org>
Link: https://lore.kernel.org/r/20250210032923.3382136-1-hongzhen@linux.alibaba.com
Signed-off-by: Gao Xiang <hsiangkao@linux.alibaba.com>
Stable-dep-of: b44686c8391b ("erofs: fix large fragment handling")
Signed-off-by: Sasha Levin <sashal@kernel.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
fs/erofs/zmap.c

index 689437e99a5a3483b2a894e9972c5e61fedee377..d278ebd6028164b508cd128c97b151e7527e2bb7 100644 (file)
@@ -265,26 +265,22 @@ static int z_erofs_extent_lookback(struct z_erofs_maprecorder *m,
                if (err)
                        return err;
 
-               switch (m->type) {
-               case Z_EROFS_LCLUSTER_TYPE_NONHEAD:
+               if (m->type >= Z_EROFS_LCLUSTER_TYPE_MAX) {
+                       erofs_err(sb, "unknown type %u @ lcn %lu of nid %llu",
+                                 m->type, lcn, vi->nid);
+                       DBG_BUGON(1);
+                       return -EOPNOTSUPP;
+               } else if (m->type == Z_EROFS_LCLUSTER_TYPE_NONHEAD) {
                        lookback_distance = m->delta[0];
                        if (!lookback_distance)
-                               goto err_bogus;
+                               break;
                        continue;
-               case Z_EROFS_LCLUSTER_TYPE_PLAIN:
-               case Z_EROFS_LCLUSTER_TYPE_HEAD1:
-               case Z_EROFS_LCLUSTER_TYPE_HEAD2:
+               } else {
                        m->headtype = m->type;
                        m->map->m_la = (lcn << lclusterbits) | m->clusterofs;
                        return 0;
-               default:
-                       erofs_err(sb, "unknown type %u @ lcn %lu of nid %llu",
-                                 m->type, lcn, vi->nid);
-                       DBG_BUGON(1);
-                       return -EOPNOTSUPP;
                }
        }
-err_bogus:
        erofs_err(sb, "bogus lookback distance %u @ lcn %lu of nid %llu",
                  lookback_distance, m->lcn, vi->nid);
        DBG_BUGON(1);
@@ -329,35 +325,28 @@ static int z_erofs_get_extent_compressedlen(struct z_erofs_maprecorder *m,
        DBG_BUGON(lcn == initial_lcn &&
                  m->type == Z_EROFS_LCLUSTER_TYPE_NONHEAD);
 
-       switch (m->type) {
-       case Z_EROFS_LCLUSTER_TYPE_PLAIN:
-       case Z_EROFS_LCLUSTER_TYPE_HEAD1:
-       case Z_EROFS_LCLUSTER_TYPE_HEAD2:
+       if (m->type == Z_EROFS_LCLUSTER_TYPE_NONHEAD) {
+               if (m->delta[0] != 1) {
+                       erofs_err(sb, "bogus CBLKCNT @ lcn %lu of nid %llu", lcn, vi->nid);
+                       DBG_BUGON(1);
+                       return -EFSCORRUPTED;
+               }
+               if (m->compressedblks)
+                       goto out;
+       } else if (m->type < Z_EROFS_LCLUSTER_TYPE_MAX) {
                /*
                 * if the 1st NONHEAD lcluster is actually PLAIN or HEAD type
                 * rather than CBLKCNT, it's a 1 block-sized pcluster.
                 */
                m->compressedblks = 1;
-               break;
-       case Z_EROFS_LCLUSTER_TYPE_NONHEAD:
-               if (m->delta[0] != 1)
-                       goto err_bonus_cblkcnt;
-               if (m->compressedblks)
-                       break;
-               fallthrough;
-       default:
-               erofs_err(sb, "cannot found CBLKCNT @ lcn %lu of nid %llu", lcn,
-                         vi->nid);
-               DBG_BUGON(1);
-               return -EFSCORRUPTED;
+               goto out;
        }
+       erofs_err(sb, "cannot found CBLKCNT @ lcn %lu of nid %llu", lcn, vi->nid);
+       DBG_BUGON(1);
+       return -EFSCORRUPTED;
 out:
        m->map->m_plen = erofs_pos(sb, m->compressedblks);
        return 0;
-err_bonus_cblkcnt:
-       erofs_err(sb, "bogus CBLKCNT @ lcn %lu of nid %llu", lcn, vi->nid);
-       DBG_BUGON(1);
-       return -EFSCORRUPTED;
 }
 
 static int z_erofs_get_extent_decompressedlen(struct z_erofs_maprecorder *m)
@@ -386,9 +375,7 @@ static int z_erofs_get_extent_decompressedlen(struct z_erofs_maprecorder *m)
                                m->delta[1] = 1;
                                DBG_BUGON(1);
                        }
-               } else if (m->type == Z_EROFS_LCLUSTER_TYPE_PLAIN ||
-                          m->type == Z_EROFS_LCLUSTER_TYPE_HEAD1 ||
-                          m->type == Z_EROFS_LCLUSTER_TYPE_HEAD2) {
+               } else if (m->type < Z_EROFS_LCLUSTER_TYPE_MAX) {
                        if (lcn != headlcn)
                                break;  /* ends at the next HEAD lcluster */
                        m->delta[1] = 1;
@@ -452,8 +439,7 @@ static int z_erofs_do_map_blocks(struct inode *inode,
                }
                /* m.lcn should be >= 1 if endoff < m.clusterofs */
                if (!m.lcn) {
-                       erofs_err(inode->i_sb,
-                                 "invalid logical cluster 0 at nid %llu",
+                       erofs_err(inode->i_sb, "invalid logical cluster 0 at nid %llu",
                                  vi->nid);
                        err = -EFSCORRUPTED;
                        goto unmap_out;
@@ -469,8 +455,7 @@ static int z_erofs_do_map_blocks(struct inode *inode,
                        goto unmap_out;
                break;
        default:
-               erofs_err(inode->i_sb,
-                         "unknown type %u @ offset %llu of nid %llu",
+               erofs_err(inode->i_sb, "unknown type %u @ offset %llu of nid %llu",
                          m.type, ofs, vi->nid);
                err = -EOPNOTSUPP;
                goto unmap_out;