Just used to prepare for extent-based metadata. No logic changes. Signed-off-by: Gao Xiang <hsiang...@linux.alibaba.com> --- no change.
lib/compress.c | 52 ++++++++++++++++++++++++++++---------------------- 1 file changed, 29 insertions(+), 23 deletions(-) diff --git a/lib/compress.c b/lib/compress.c index da3fded..1072451 100644 --- a/lib/compress.c +++ b/lib/compress.c @@ -120,7 +120,7 @@ static bool z_erofs_mt_enabled; #define Z_EROFS_LEGACY_MAP_HEADER_SIZE Z_EROFS_FULL_INDEX_ALIGN(0) -static void z_erofs_write_indexes_final(struct z_erofs_compress_ictx *ctx) +static void z_erofs_fini_full_indexes(struct z_erofs_compress_ictx *ctx) { const unsigned int type = Z_EROFS_LCLUSTER_TYPE_PLAIN; struct z_erofs_lcluster_index di; @@ -136,8 +136,8 @@ static void z_erofs_write_indexes_final(struct z_erofs_compress_ictx *ctx) ctx->metacur += sizeof(di); } -static void z_erofs_write_extent(struct z_erofs_compress_ictx *ctx, - struct z_erofs_inmem_extent *e) +static void z_erofs_write_full_indexes(struct z_erofs_compress_ictx *ctx, + struct z_erofs_inmem_extent *e) { struct erofs_inode *inode = ctx->inode; struct erofs_sb_info *sbi = inode->sbi; @@ -233,20 +233,6 @@ static void z_erofs_write_extent(struct z_erofs_compress_ictx *ctx, ctx->clusterofs = clusterofs + count; } -static void z_erofs_write_indexes(struct z_erofs_compress_ictx *ctx) -{ - struct z_erofs_extent_item *ei, *n; - - ctx->clusterofs = 0; - list_for_each_entry_safe(ei, n, &ctx->extents, list) { - z_erofs_write_extent(ctx, &ei->e); - - list_del(&ei->list); - free(ei); - } - z_erofs_write_indexes_final(ctx); -} - static bool z_erofs_need_refill(struct z_erofs_compress_sctx *ctx) { const bool final = !ctx->remaining; @@ -1006,6 +992,31 @@ static void z_erofs_write_mapheader(struct erofs_inode *inode, memcpy(compressmeta, &h, sizeof(struct z_erofs_map_header)); } +static void *z_erofs_write_indexes(struct z_erofs_compress_ictx *ctx) +{ + struct erofs_inode *inode = ctx->inode; + struct z_erofs_extent_item *ei, *n; + void *metabuf; + + metabuf = malloc(BLK_ROUND_UP(inode->sbi, inode->i_size) * + sizeof(struct z_erofs_lcluster_index) + + Z_EROFS_LEGACY_MAP_HEADER_SIZE); + if (!metabuf) + return ERR_PTR(-ENOMEM); + + ctx->metacur = metabuf + Z_EROFS_LEGACY_MAP_HEADER_SIZE; + ctx->clusterofs = 0; + list_for_each_entry_safe(ei, n, &ctx->extents, list) { + z_erofs_write_full_indexes(ctx, &ei->e); + + list_del(&ei->list); + free(ei); + } + z_erofs_fini_full_indexes(ctx); + z_erofs_write_mapheader(inode, metabuf); + return metabuf; +} + void z_erofs_drop_inline_pcluster(struct erofs_inode *inode) { struct erofs_sb_info *sbi = inode->sbi; @@ -1126,15 +1137,11 @@ int erofs_commit_compressed_file(struct z_erofs_compress_ictx *ictx, DBG_BUGON(compressed_blocks < !!inode->idata_size); compressed_blocks -= !!inode->idata_size; - compressmeta = malloc(BLK_ROUND_UP(sbi, inode->i_size) * - sizeof(struct z_erofs_lcluster_index) + - Z_EROFS_LEGACY_MAP_HEADER_SIZE); + compressmeta = z_erofs_write_indexes(ictx); if (!compressmeta) { ret = -ENOMEM; goto err_free_idata; } - ictx->metacur = compressmeta + Z_EROFS_LEGACY_MAP_HEADER_SIZE; - z_erofs_write_indexes(ictx); legacymetasize = ictx->metacur - compressmeta; /* estimate if data compression saves space or not */ @@ -1146,7 +1153,6 @@ int erofs_commit_compressed_file(struct z_erofs_compress_ictx *ictx, goto err_free_meta; } z_erofs_dedupe_commit(false); - z_erofs_write_mapheader(inode, compressmeta); if (!ictx->fragemitted) sbi->saved_by_deduplication += inode->fragment_size; -- 2.43.5