Commit eb826a01 authored by Sergey Senozhatsky's avatar Sergey Senozhatsky Committed by Andrew Morton

zram: recalculate zstd compression params once

zstd compression params depends on level, but are constant for a given
instance of zstd compression backend.  Calculate once (during ctx
creation).

Link: https://lkml.kernel.org/r/20240902105656.1383858-15-senozhatsky@chromium.orgSigned-off-by: default avatarSergey Senozhatsky <senozhatsky@chromium.org>
Cc: Minchan Kim <minchan@kernel.org>
Cc: Nick Terrell <terrelln@fb.com>
Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
parent f2bac7ad
...@@ -10,6 +10,7 @@ ...@@ -10,6 +10,7 @@
struct zstd_ctx { struct zstd_ctx {
zstd_cctx *cctx; zstd_cctx *cctx;
zstd_dctx *dctx; zstd_dctx *dctx;
zstd_parameters cprm;
void *cctx_mem; void *cctx_mem;
void *dctx_mem; void *dctx_mem;
s32 level; s32 level;
...@@ -40,6 +41,7 @@ static void *zstd_create(struct zcomp_params *params) ...@@ -40,6 +41,7 @@ static void *zstd_create(struct zcomp_params *params)
ctx->level = zstd_default_clevel(); ctx->level = zstd_default_clevel();
prm = zstd_get_params(ctx->level, PAGE_SIZE); prm = zstd_get_params(ctx->level, PAGE_SIZE);
ctx->cprm = zstd_get_params(ctx->level, PAGE_SIZE);
sz = zstd_cctx_workspace_bound(&prm.cParams); sz = zstd_cctx_workspace_bound(&prm.cParams);
ctx->cctx_mem = vzalloc(sz); ctx->cctx_mem = vzalloc(sz);
if (!ctx->cctx_mem) if (!ctx->cctx_mem)
...@@ -69,11 +71,10 @@ static int zstd_compress(void *ctx, const unsigned char *src, size_t src_len, ...@@ -69,11 +71,10 @@ static int zstd_compress(void *ctx, const unsigned char *src, size_t src_len,
unsigned char *dst, size_t *dst_len) unsigned char *dst, size_t *dst_len)
{ {
struct zstd_ctx *zctx = ctx; struct zstd_ctx *zctx = ctx;
const zstd_parameters prm = zstd_get_params(zctx->level, PAGE_SIZE);
size_t ret; size_t ret;
ret = zstd_compress_cctx(zctx->cctx, dst, *dst_len, ret = zstd_compress_cctx(zctx->cctx, dst, *dst_len,
src, src_len, &prm); src, src_len, &zctx->cprm);
if (zstd_is_error(ret)) if (zstd_is_error(ret))
return -EINVAL; return -EINVAL;
*dst_len = ret; *dst_len = ret;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment