erofs: use Z_EROFS_LCLUSTER_TYPE_MAX to simplify switches

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>
This commit is contained in:
Hongzhen Luo 2025-02-10 11:29:23 +08:00 committed by Gao Xiang
parent 80e54e8491
commit 3b7781aeae
1 changed files with 26 additions and 41 deletions

View File

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