/* < 0, xattr disabled and INT_MAX, always use inline xattrs */
int c_inline_xattr_tolerance;
#ifdef EROFS_MT_ENABLED
- u64 c_segment_size;
+ u64 c_mkfs_segment_size;
u32 c_mt_workers;
#endif
-
u32 c_pclusterblks_max, c_pclusterblks_def, c_pclusterblks_packed;
u32 c_max_decompressed_extent_bytes;
u64 c_unix_timestamp;
}
sctx->memoff = 0;
- ret = z_erofs_compress_segment(sctx, sctx->seg_idx * cfg.c_segment_size,
+ ret = z_erofs_compress_segment(sctx, sctx->seg_idx * cfg.c_mkfs_segment_size,
EROFS_NULL_ADDR);
out:
struct erofs_compress_work *cur, *head = NULL, **last = &head;
struct erofs_compress_cfg *ccfg = ictx->ccfg;
struct erofs_inode *inode = ictx->inode;
- int nsegs = DIV_ROUND_UP(inode->i_size, cfg.c_segment_size);
+ int nsegs = DIV_ROUND_UP(inode->i_size, cfg.c_mkfs_segment_size);
int i;
ictx->seg_num = nsegs;
if (i == nsegs - 1)
cur->ctx.remaining = inode->i_size -
inode->fragment_size -
- i * cfg.c_segment_size;
+ i * cfg.c_mkfs_segment_size;
else
- cur->ctx.remaining = cfg.c_segment_size;
+ cur->ctx.remaining = cfg.c_mkfs_segment_size;
cur->alg_id = ccfg->handle.alg->id;
cur->alg_name = ccfg->handle.alg->name;
z_erofs_mt_enabled = false;
#ifdef EROFS_MT_ENABLED
+ if (cfg.c_mt_workers > 1 && (cfg.c_dedupe || cfg.c_fragments)) {
+ if (cfg.c_dedupe)
+ erofs_warn("multi-threaded dedupe is NOT implemented for now");
+ if (cfg.c_fragments)
+ erofs_warn("multi-threaded fragments is NOT implemented for now");
+ cfg.c_mt_workers = 0;
+ }
+
if (cfg.c_mt_workers > 1) {
ret = erofs_alloc_workqueue(&z_erofs_mt_ctrl.wq,
cfg.c_mt_workers,
cfg.c_pclusterblks_max = 1;
cfg.c_pclusterblks_def = 1;
cfg.c_max_decompressed_extent_bytes = -1;
-#ifdef EROFS_MT_ENABLED
- cfg.c_segment_size = 16ULL * 1024 * 1024;
- cfg.c_mt_workers = 1;
-#endif
-
erofs_stdout_tty = isatty(STDOUT_FILENO);
}
}
cfg.c_pclusterblks_packed = pclustersize_packed >> sbi.blkszbits;
}
-#ifdef EROFS_MT_ENABLED
- if (cfg.c_mt_workers > 1 && (cfg.c_dedupe || cfg.c_fragments)) {
- erofs_warn("Note that dedupe/fragments are NOT supported in multi-threaded mode for now, resetting --workers=1.");
- cfg.c_mt_workers = 1;
- }
-#endif
return 0;
}
cfg.c_legacy_compress = false;
cfg.c_inline_data = true;
cfg.c_xattr_name_filter = true;
+#ifdef EROFS_MT_ENABLED
+ cfg.c_mt_workers = erofs_get_available_processors();
+ cfg.c_mkfs_segment_size = 16ULL * 1024 * 1024;
+#endif
sbi.blkszbits = ilog2(min_t(u32, getpagesize(), EROFS_MAX_BLOCK_SIZE));
sbi.feature_incompat = EROFS_FEATURE_INCOMPAT_ZERO_PADDING;
sbi.feature_compat = EROFS_FEATURE_COMPAT_SB_CHKSUM |