erofs-utils: mkfs: fix `-Eall-fragments` for multi-threaded compression
authorGao Xiang <hsiangkao@linux.alibaba.com>
Thu, 2 Jan 2025 02:42:25 +0000 (10:42 +0800)
committerGao Xiang <hsiangkao@linux.alibaba.com>
Thu, 2 Jan 2025 02:58:00 +0000 (10:58 +0800)
`may_packing` in __z_erofs_compress_one() is still bypassed when
multi-threaded compression is enabled, which is unexpected.

Furthermore, multi-threaded `-Eall-fragments,ztailpacking` can
sometimes corrupt images.  Let's fix it.

Fixes: 882ad1c3157f ("erofs-utils: mkfs: fix `-Eall-fragments` for multi-threaded compression")
Fixes: 10c1590c0920 ("erofs-utils: enable multi-threaded support for `-Eall-fragments`")
Signed-off-by: Gao Xiang <hsiangkao@linux.alibaba.com>
Link: https://lore.kernel.org/r/20250102024225.2433419-1-hsiangkao@linux.alibaba.com
lib/compress.c

index a18b4b5a4a778fca14795ab2684863905d38ac00..0e8faada85a57f84f3ff4b18681b774ab9073259 100644 (file)
@@ -565,8 +565,7 @@ static int __z_erofs_compress_one(struct z_erofs_compress_sctx *ctx,
        unsigned int len = ctx->tail - ctx->head;
        bool is_packed_inode = erofs_is_packed_inode(inode);
        bool tsg = (ctx->seg_idx + 1 >= ictx->seg_num), final = !ctx->remaining;
-       bool may_packing = (cfg.c_fragments && tsg && final &&
-                           !is_packed_inode && !z_erofs_mt_enabled);
+       bool may_packing = (cfg.c_fragments && tsg && final && !is_packed_inode);
        bool may_inline = (cfg.c_ztailpacking && tsg && final && !may_packing);
        unsigned int compressedsize;
        int ret;