mirror of https://github.com/torvalds/linux.git
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:
parent
80e54e8491
commit
3b7781aeae
|
|
@ -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)
|
erofs_err(sb, "cannot found CBLKCNT @ lcn %lu of nid %llu", lcn, vi->nid);
|
||||||
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);
|
DBG_BUGON(1);
|
||||||
return -EFSCORRUPTED;
|
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;
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue