[PATCH v2 1/4] erofs-utils: lib: refactor erofs compressors init
Gao Xiang
hsiangkao at linux.alibaba.com
Thu Jun 15 20:44:25 AEST 2023
On 2023/6/15 18:17, Guo Xuenan via Linux-erofs wrote:
> using struct erofs_compressors_cfg for erofs compressor
> global configuration.
>
> Signed-off-by: Guo Xuenan <guoxuenan at huawei.com>
> ---
> lib/compressor.c | 68 ++++++++++++++++++++++++++++++++++++++++++++++++
> lib/compressor.h | 14 ++++++++++
> 2 files changed, 82 insertions(+)
>
> diff --git a/lib/compressor.c b/lib/compressor.c
> index 52eb761..88a2fb0 100644
> --- a/lib/compressor.c
> +++ b/lib/compressor.c
> @@ -22,6 +22,74 @@ static const struct erofs_compressor *compressors[] = {
> #endif
> };
>
> +/* for compressors type configuration */
This comment might be unnecessary.
> +static struct erofs_supported_algothrim {
^ algorithm
> + int algtype;
> + const char *name;
> +} erofs_supported_algothrims[] = {
> + { Z_EROFS_COMPRESSION_LZ4, "lz4"},
> + { Z_EROFS_COMPRESSION_LZ4, "lz4hc"},
> + { Z_EROFS_COMPRESSION_LZMA, "lzma"},
> +};
> +
> +/* global compressors configuration */
Let's avoid this comment as well.
> +static struct erofs_compressors_cfg erofs_ccfg;
> +
> +static void erofs_init_compressor(struct compressor *compressor,
> + const struct erofs_compressor *alg)
> +{
> +
> + compressor->handle.alg = alg;
> +
> + /* should be written in "minimum compression ratio * 100" */
> + compressor->handle.compress_threshold = 100;
> +
> + /* optimize for 4k size page */
> + compressor->handle.destsize_alignsize = erofs_blksiz();
> + compressor->handle.destsize_redzone_begin = erofs_blksiz() - 16;
> + compressor->handle.destsize_redzone_end = EROFS_CONFIG_COMPR_DEF_BOUNDARY;
> +
> + if (alg && alg->init)
> + alg->init(&compressor->handle);
> +}
> +
> +static void erofs_compressor_register(const char *name, const struct erofs_compressor *alg)
> +{
> + int i;
> +
> + for (i = 0; i < erofs_ccfg.erofs_ccfg_num; i++) {
> + if (!strcmp(erofs_ccfg.compressors[i].name, name)) {
> + erofs_init_compressor(&erofs_ccfg.compressors[i], alg);
> + return;
> + }
> + }
> +
> + erofs_ccfg.compressors[i].name = name;
> + erofs_ccfg.compressors[i].algorithmtype = erofs_supported_algothrims[i].algtype;
> + erofs_init_compressor(&erofs_ccfg.compressors[i], alg);
> + erofs_ccfg.erofs_ccfg_num = ++i;
> +}
> +
> +void erofs_register_compressors(void)
> +{
> + int i;
> +
> + erofs_ccfg.erofs_ccfg_num = 0;
> + for (i = 0; i < ARRAY_SIZE(erofs_supported_algothrims); i++) {
> + erofs_compressor_register(erofs_supported_algothrims[i].name, NULL);
> + }
> +
> +#if LZ4_ENABLED
> + erofs_compressor_register("lz4", &erofs_compressor_lz4);
> +#if LZ4HC_ENABLED
> + erofs_compressor_register("lz4hc", &erofs_compressor_lz4hc);
> +#endif
> +#endif
> +#if HAVE_LIBLZMA
> + erofs_compressor_register("lzma", &erofs_compressor_lzma);
> +#endif
> +}
> +
> int erofs_compress_destsize(const struct erofs_compress *c,
> const void *src, unsigned int *srcsize,
> void *dst, unsigned int dstsize, bool inblocks)
> diff --git a/lib/compressor.h b/lib/compressor.h
> index cf063f1..1e760b6 100644
> --- a/lib/compressor.h
> +++ b/lib/compressor.h
> @@ -8,6 +8,7 @@
> #define __EROFS_LIB_COMPRESSOR_H
>
> #include "erofs/defs.h"
> +#include "erofs/config.h"
>
> struct erofs_compress;
>
> @@ -40,6 +41,18 @@ struct erofs_compress {
> void *private_data;
> };
>
> +struct compressor {
> + const char *name;
> + struct erofs_compress handle;
> + unsigned int algorithmtype;
> + bool enable;
could we just use a struct erofs_supported_algothrim * to replace
name and algorithmtype?
Also, please use `struct erofs_compressor` here.
Thanks,
Gao Xiang
More information about the Linux-erofs
mailing list