[PATCH] erofs-utils: move pclustersize to struct z_erofs_compress_sctx
Noboru Asai
asai at sijam.com
Thu Mar 21 18:02:36 AEDT 2024
With -E(all-)fragments, pclustersize has a different value per segment,
so move it to struct z_erofs_compress_sctx.
Signed-off-by: Noboru Asai <asai at sijam.com>
---
lib/compress.c | 17 +++++++++--------
1 file changed, 9 insertions(+), 8 deletions(-)
diff --git a/lib/compress.c b/lib/compress.c
index 9eb40b5..0803a63 100644
--- a/lib/compress.c
+++ b/lib/compress.c
@@ -40,7 +40,6 @@ struct z_erofs_extent_item {
struct z_erofs_compress_ictx { /* inode context */
struct erofs_inode *inode;
int fd;
- unsigned int pclustersize;
u32 tof_chksum;
bool fix_dedupedfrag;
@@ -64,6 +63,7 @@ struct z_erofs_compress_sctx { /* segment context */
unsigned int head, tail;
erofs_off_t remaining;
+ unsigned int pclustersize;
erofs_blk_t blkaddr; /* pointing to the next blkaddr */
u16 clusterofs;
@@ -479,7 +479,7 @@ static bool z_erofs_fixup_deduped_fragment(struct z_erofs_compress_sctx *ctx,
/* try to fix again if it gets larger (should be rare) */
if (inode->fragment_size < newsize) {
- ictx->pclustersize = min_t(erofs_off_t,
+ ctx->pclustersize = min_t(erofs_off_t,
z_erofs_get_max_pclustersize(inode),
roundup(newsize - inode->fragment_size,
erofs_blksiz(sbi)));
@@ -519,12 +519,12 @@ static int __z_erofs_compress_one(struct z_erofs_compress_sctx *ctx,
unsigned int compressedsize;
int ret;
- if (len <= ictx->pclustersize) {
+ if (len <= ctx->pclustersize) {
if (!final || !len)
return 1;
if (may_packing) {
if (inode->fragment_size && !ictx->fix_dedupedfrag) {
- ictx->pclustersize = roundup(len, blksz);
+ ctx->pclustersize = roundup(len, blksz);
goto fix_dedupedfrag;
}
e->length = len;
@@ -536,7 +536,7 @@ static int __z_erofs_compress_one(struct z_erofs_compress_sctx *ctx,
e->length = min(len, cfg.c_max_decompressed_extent_bytes);
ret = erofs_compress_destsize(h, ctx->queue + ctx->head,
- &e->length, dst, ictx->pclustersize);
+ &e->length, dst, ctx->pclustersize);
if (ret <= 0) {
erofs_err("failed to compress %s: %s", inode->i_srcpath,
erofs_strerror(ret));
@@ -573,7 +573,7 @@ nocompression:
e->compressedblks = 1;
e->raw = true;
} else if (may_packing && len == e->length &&
- compressedsize < ictx->pclustersize &&
+ compressedsize < ctx->pclustersize &&
(!inode->fragment_size || ictx->fix_dedupedfrag)) {
frag_packing:
ret = z_erofs_pack_fragments(inode, ctx->queue + ctx->head,
@@ -612,7 +612,7 @@ frag_packing:
if (may_packing && len == e->length &&
(compressedsize & (blksz - 1)) &&
ctx->tail < Z_EROFS_COMPR_QUEUE_SZ) {
- ictx->pclustersize = roundup(compressedsize, blksz);
+ ctx->pclustersize = roundup(compressedsize, blksz);
goto fix_dedupedfrag;
}
@@ -1202,6 +1202,7 @@ void z_erofs_mt_workfn(struct erofs_work *work, void *tlsp)
goto out;
}
sctx->memoff = 0;
+ sctx->pclustersize = z_erofs_get_max_pclustersize(sctx->ictx->inode);
ret = z_erofs_compress_segment(sctx, sctx->seg_idx * cfg.c_segment_size,
EROFS_NULL_ADDR);
@@ -1460,7 +1461,6 @@ int erofs_write_compressed_file(struct erofs_inode *inode, int fd)
}
ctx.inode = inode;
- ctx.pclustersize = z_erofs_get_max_pclustersize(inode);
ctx.metacur = compressmeta + Z_EROFS_LEGACY_MAP_HEADER_SIZE;
init_list_head(&ctx.extents);
ctx.fd = fd;
@@ -1500,6 +1500,7 @@ int erofs_write_compressed_file(struct erofs_inode *inode, int fd)
sctx.seg_num = 1;
sctx.seg_idx = 0;
sctx.pivot = &dummy_pivot;
+ sctx.pclustersize = z_erofs_get_max_pclustersize(inode);
ret = z_erofs_compress_segment(&sctx, -1, blkaddr);
if (ret)
--
2.44.0
More information about the Linux-erofs
mailing list