[PATCH v2] erofs-utils: avoid the potentially wrong m_plen for big pcluster
Gao Xiang
hsiangkao at linux.alibaba.com
Mon Oct 31 20:12:09 AEDT 2022
On Mon, Oct 31, 2022 at 10:26:53AM +0800, Yue Hu wrote:
> From: Yue Hu <huyue2 at coolpad.com>
>
> Keep in sync with the kernel commit 0d53d2e882f9 ("erofs: avoid the
> potentially wrong m_plen for big pcluster").
>
> Signed-off-by: Yue Hu <huyue2 at coolpad.com>
Reviewed-by: Gao Xiang <hsiangkao at linux.alibaba.com>
Thanks,
Gao Xiang
> ---
> v2: rebase on latest dev branch
>
> lib/zmap.c | 16 ++++++++--------
> 1 file changed, 8 insertions(+), 8 deletions(-)
>
> diff --git a/lib/zmap.c b/lib/zmap.c
> index 1c6706a..89e9da1 100644
> --- a/lib/zmap.c
> +++ b/lib/zmap.c
> @@ -115,7 +115,7 @@ struct z_erofs_maprecorder {
> u8 type, headtype;
> u16 clusterofs;
> u16 delta[2];
> - erofs_blk_t pblk, compressedlcs;
> + erofs_blk_t pblk, compressedblks;
> erofs_off_t nextpackoff;
> bool partialref;
> };
> @@ -172,7 +172,7 @@ static int legacy_load_cluster_from_disk(struct z_erofs_maprecorder *m,
> DBG_BUGON(1);
> return -EFSCORRUPTED;
> }
> - m->compressedlcs = m->delta[0] &
> + m->compressedblks = m->delta[0] &
> ~Z_EROFS_VLE_DI_D0_CBLKCNT;
> m->delta[0] = 1;
> }
> @@ -274,7 +274,7 @@ static int unpack_compacted_index(struct z_erofs_maprecorder *m,
> DBG_BUGON(1);
> return -EFSCORRUPTED;
> }
> - m->compressedlcs = lo & ~Z_EROFS_VLE_DI_D0_CBLKCNT;
> + m->compressedblks = lo & ~Z_EROFS_VLE_DI_D0_CBLKCNT;
> m->delta[0] = 1;
> return 0;
> } else if (i + 1 != (int)vcnt) {
> @@ -471,7 +471,7 @@ static int z_erofs_get_extent_compressedlen(struct z_erofs_maprecorder *m,
> }
>
> lcn = m->lcn + 1;
> - if (m->compressedlcs)
> + if (m->compressedblks)
> goto out;
>
> err = z_erofs_load_cluster_from_disk(m, lcn, false);
> @@ -480,7 +480,7 @@ static int z_erofs_get_extent_compressedlen(struct z_erofs_maprecorder *m,
>
> /*
> * If the 1st NONHEAD lcluster has already been handled initially w/o
> - * valid compressedlcs, which means at least it mustn't be CBLKCNT, or
> + * valid compressedblks, which means at least it mustn't be CBLKCNT, or
> * an internal implemenatation error is detected.
> *
> * The following code can also handle it properly anyway, but let's
> @@ -496,12 +496,12 @@ static int z_erofs_get_extent_compressedlen(struct z_erofs_maprecorder *m,
> * if the 1st NONHEAD lcluster is actually PLAIN or HEAD type
> * rather than CBLKCNT, it's a 1 lcluster-sized pcluster.
> */
> - m->compressedlcs = 1;
> + m->compressedblks = 1 << (lclusterbits - LOG_BLOCK_SIZE);
> break;
> case Z_EROFS_VLE_CLUSTER_TYPE_NONHEAD:
> if (m->delta[0] != 1)
> goto err_bonus_cblkcnt;
> - if (m->compressedlcs)
> + if (m->compressedblks)
> break;
> /* fallthrough */
> default:
> @@ -511,7 +511,7 @@ static int z_erofs_get_extent_compressedlen(struct z_erofs_maprecorder *m,
> return -EFSCORRUPTED;
> }
> out:
> - map->m_plen = m->compressedlcs << lclusterbits;
> + map->m_plen = m->compressedblks << LOG_BLOCK_SIZE;
> return 0;
> err_bonus_cblkcnt:
> erofs_err("bogus CBLKCNT @ lcn %lu of nid %llu",
> --
> 2.17.1
More information about the Linux-erofs
mailing list