mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2026-08-31 14:04:27 -04:00
zram: reset per-priority params when changing algorithm before init
Parameters validated against one algorithm may be invalid for another (e.g. lz4 accepts level=65535 but zstd does not). Although algorithm changes are blocked after disksize is set, they are allowed before device initialization. Reset per-priority params on algorithm change so that stale parameters do not silently carry over. Link: https://lore.kernel.org/20260804093841.67920-6-haoqinhuang7@gmail.com Signed-off-by: Haoqin Huang <haoqinhuang@tencent.com> Signed-off-by: Rongwei Wang <zigiwang@tencent.com> Reviewed-by: Sergey Senozhatsky <senozhatsky@chromium.org> Tested-by: Sergey Senozhatsky <senozhatsky@chromium.org> Cc: David Sterba <dsterba@suse.com> Cc: Jens Axboe <axboe@kernel.dk> Cc: Minchan Kim <minchan@kernel.org> Cc: Nick Terrell <terrelln@fb.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
This commit is contained in:
committed by
Andrew Morton
parent
7b0f677c7b
commit
702c5a799d
@@ -1652,6 +1652,17 @@ static void comp_algorithm_set(struct zram *zram, u32 prio, const char *alg)
|
||||
zram->comp_algs[prio] = alg;
|
||||
}
|
||||
|
||||
static void comp_params_reset(struct zram *zram, u32 prio)
|
||||
{
|
||||
struct zcomp_params *params = &zram->params[prio];
|
||||
|
||||
vfree(params->dict);
|
||||
params->level = ZCOMP_PARAM_NOT_SET;
|
||||
params->deflate.winbits = ZCOMP_PARAM_NOT_SET;
|
||||
params->dict_sz = 0;
|
||||
params->dict = NULL;
|
||||
}
|
||||
|
||||
static int __comp_algorithm_store(struct zram *zram, u32 prio, const char *buf)
|
||||
{
|
||||
const char *alg;
|
||||
@@ -1672,20 +1683,10 @@ static int __comp_algorithm_store(struct zram *zram, u32 prio, const char *buf)
|
||||
}
|
||||
|
||||
comp_algorithm_set(zram, prio, alg);
|
||||
comp_params_reset(zram, prio);
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void comp_params_reset(struct zram *zram, u32 prio)
|
||||
{
|
||||
struct zcomp_params *params = &zram->params[prio];
|
||||
|
||||
vfree(params->dict);
|
||||
params->level = ZCOMP_PARAM_NOT_SET;
|
||||
params->deflate.winbits = ZCOMP_PARAM_NOT_SET;
|
||||
params->dict_sz = 0;
|
||||
params->dict = NULL;
|
||||
}
|
||||
|
||||
static int comp_params_store(struct zram *zram, u32 prio, s32 level,
|
||||
const char *dict_path,
|
||||
struct deflate_params *deflate_params)
|
||||
|
||||
Reference in New Issue
Block a user