diff options
author | Gao Xiang <hsiangkao@linux.alibaba.com> | 2024-04-30 14:37:30 +0800 |
---|---|---|
committer | Gao Xiang <hsiangkao@linux.alibaba.com> | 2024-05-01 14:43:30 +0800 |
commit | 2bd9d039bed6d30946074302e0c315ef2e5ed536 (patch) | |
tree | e67afe44e926431710e2d988a1417f11af6ad733 | |
parent | 6f382ad449fde3e94f9e6081f42ff914f00eeb36 (diff) | |
download | erofs-utils-upstream-dev.tar.gz |
erofs-utils: lib: adjust MicroLZMA default dictionary sizeupstream-dev
If dict_size is not given, it will be set as max(32k, pclustersize * 8)
but no more than Z_EROFS_LZMA_MAX_DICT_SIZE.
Also kill an obsolete warning since multi-threaded support is landed.
Signed-off-by: Gao Xiang <hsiangkao@linux.alibaba.com>
Link: https://lore.kernel.org/r/20240430063730.599937-2-hsiangkao@linux.alibaba.com
-rw-r--r-- | lib/compressor_liblzma.c | 19 | ||||
-rw-r--r-- | mkfs/main.c | 8 |
2 files changed, 17 insertions, 10 deletions
diff --git a/lib/compressor_liblzma.c b/lib/compressor_liblzma.c index 2f19a93..d609a28 100644 --- a/lib/compressor_liblzma.c +++ b/lib/compressor_liblzma.c @@ -70,11 +70,18 @@ static int erofs_compressor_liblzma_setlevel(struct erofs_compress *c, static int erofs_compressor_liblzma_setdictsize(struct erofs_compress *c, u32 dict_size) { - if (!dict_size) - dict_size = erofs_compressor_lzma.default_dictsize; + if (!dict_size) { + if (erofs_compressor_lzma.default_dictsize) { + dict_size = erofs_compressor_lzma.default_dictsize; + } else { + dict_size = min_t(u32, Z_EROFS_LZMA_MAX_DICT_SIZE, + cfg.c_mkfs_pclustersize_max << 3); + if (dict_size < 32768) + dict_size = 32768; + } + } - if (dict_size > erofs_compressor_lzma.max_dictsize || - dict_size < 4096) { + if (dict_size > Z_EROFS_LZMA_MAX_DICT_SIZE || dict_size < 4096) { erofs_err("invalid dictionary size %u", dict_size); return -EINVAL; } @@ -86,7 +93,6 @@ static int erofs_compressor_liblzma_init(struct erofs_compress *c) { struct erofs_liblzma_context *ctx; u32 preset; - static erofs_atomic_bool_t __warnonce; ctx = malloc(sizeof(*ctx)); if (!ctx) @@ -105,15 +111,12 @@ static int erofs_compressor_liblzma_init(struct erofs_compress *c) ctx->opt.dict_size = c->dict_size; c->private_data = ctx; - if (!erofs_atomic_test_and_set(&__warnonce)) - erofs_warn("It may take a longer time since MicroLZMA is still single-threaded for now."); return 0; } const struct erofs_compressor erofs_compressor_lzma = { .default_level = LZMA_PRESET_DEFAULT, .best_level = 109, - .default_dictsize = Z_EROFS_LZMA_MAX_DICT_SIZE, .max_dictsize = Z_EROFS_LZMA_MAX_DICT_SIZE, .init = erofs_compressor_liblzma_init, .exit = erofs_compressor_liblzma_exit, diff --git a/mkfs/main.c b/mkfs/main.c index a047dfa..4c3620d 100644 --- a/mkfs/main.c +++ b/mkfs/main.c @@ -137,8 +137,12 @@ static void usage(int argc, char **argv) spaces, s->c->best_level, s->c->default_level); } if (s->c->setdictsize) { - printf("%s [,dictsize=<dictsize>]\t(default=%u, max=%u)\n", - spaces, s->c->default_dictsize, s->c->max_dictsize); + if (s->c->default_dictsize) + printf("%s [,dictsize=<dictsize>]\t(default=%u, max=%u)\n", + spaces, s->c->default_dictsize, s->c->max_dictsize); + else + printf("%s [,dictsize=<dictsize>]\t(default=<auto>, max=%u)\n", + spaces, s->c->max_dictsize); } } printf( |