From: Andrew Morton <akpm@linux-foundation.org>
To: mm-commits@vger.kernel.org,zhangbo56@xiaomi.com,zhangbo0325@gmail.com,
richardycc@google.com,minchan@kernel.org,hdanton@sina.com,bgeffon@google.com,
baohua@kernel.org,senozhatsky@chromium.org,akpm@linux-foundation.org
Subject: + zram-lz4hc-pre-initialize-dictionary-stream-in-setup_params.patch added to mm-nonmm-unstable branch
Date: Thu, 29 Oct 2026 20:02:31 -0700 [thread overview]
Message-ID: <20261030030231.6DC021F000C1@smtp.kernel.org> (raw)
The patch titled
Subject: zram: lz4hc: pre-initialize dictionary stream in setup_params
has been added to the -mm mm-nonmm-unstable branch. Its filename is
zram-lz4hc-pre-initialize-dictionary-stream-in-setup_params.patch
This patch will shortly appear at
https://git.kernel.org/pub/scm/linux/kernel/git/akpm/25-new.git/tree/patches/zram-lz4hc-pre-initialize-dictionary-stream-in-setup_params.patch
This patch will later appear in the mm-nonmm-unstable branch at
git://git.kernel.org/pub/scm/linux/kernel/git/akpm/mm
Before you just go and hit "reply", please:
a) Consider who else should be cc'ed
b) Prefer to cc a suitable mailing list as well
c) Ideally: find the original patch on the mailing list and do a
reply-to-all to that, adding suitable additional cc's
*** Remember to use Documentation/process/submit-checklist.rst when testing your code ***
The -mm tree is included into linux-next via various
branches at git://git.kernel.org/pub/scm/linux/kernel/git/akpm/mm
and is updated there most days
------------------------------------------------------
From: Sergey Senozhatsky <senozhatsky@chromium.org>
Subject: zram: lz4hc: pre-initialize dictionary stream in setup_params
Date: Sun, 25 Oct 2026 11:18:23 +0900
Pre-initialize the dictionary stream once in lz4hc_setup_params(), store
it in params->drv_data, and memcpy() it into the per-CPU stream before
LZ4_compress_HC_continue(), matching backend_lz4. This avoids resetting
and hashing the dictionary on every page compression.
This also rejects dictionaries larger than 64 KB at device init time
(matching backend_lz4), instead of failing every page compression with
-EINVAL.
Link: https://lore.kernel.org/20261025021839.1542805-8-senozhatsky@chromium.org
Signed-off-by: Sergey Senozhatsky <senozhatsky@chromium.org>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Cc: Brian Geffon <bgeffon@google.com>
Cc: Barry Song <baohua@kernel.org>
Cc: Bo Zhang <zhangbo0325@gmail.com>
Cc: Minchan Kim <minchan@kernel.org>
Cc: Richard Chang <richardycc@google.com>
Cc: Bo Zhang <zhangbo56@xiaomi.com>
Cc: Hillf Danton <hdanton@sina.com>
---
drivers/block/zram/backend_lz4hc.c | 31 ++++++++++++++++++++++-----
1 file changed, 26 insertions(+), 5 deletions(-)
--- a/drivers/block/zram/backend_lz4hc.c~zram-lz4hc-pre-initialize-dictionary-stream-in-setup_params
+++ a/drivers/block/zram/backend_lz4hc.c
@@ -18,10 +18,20 @@ struct lz4hc_ctx {
static void lz4hc_release_params(struct zcomp_params *params)
{
+ LZ4_streamHC_t *dict_stream = params->drv_data;
+
+ params->drv_data = NULL;
+ if (!dict_stream)
+ return;
+
+ vfree(dict_stream);
}
static int lz4hc_setup_params(struct zcomp_params *params)
{
+ LZ4_streamHC_t *dict_stream;
+ int ret;
+
if (params->level == ZCOMP_PARAM_NOT_SET) {
params->level = LZ4HC_DEFAULT_CLEVEL;
} else if (params->level < 1 || params->level > LZ4HC_MAX_CLEVEL) {
@@ -35,6 +45,21 @@ static int lz4hc_setup_params(struct zco
return -EINVAL;
}
+ if (!params->dict || !params->dict_sz)
+ return 0;
+
+ dict_stream = vzalloc(sizeof(*dict_stream));
+ if (!dict_stream)
+ return -ENOMEM;
+
+ LZ4_resetStreamHC(dict_stream, params->level);
+ ret = LZ4_loadDictHC(dict_stream, params->dict, params->dict_sz);
+ if (ret != params->dict_sz) {
+ vfree(dict_stream);
+ return -EINVAL;
+ }
+ params->drv_data = dict_stream;
+
return 0;
}
@@ -93,11 +118,7 @@ static int lz4hc_compress(struct zcomp_p
zctx->mem);
} else {
/* Cstrm needs to be reset */
- LZ4_resetStreamHC(zctx->cstrm, params->level);
- ret = LZ4_loadDictHC(zctx->cstrm, params->dict,
- params->dict_sz);
- if (ret != params->dict_sz)
- return -EINVAL;
+ memcpy(zctx->cstrm, params->drv_data, sizeof(*zctx->cstrm));
ret = LZ4_compress_HC_continue(zctx->cstrm, req->src, req->dst,
req->src_len, req->dst_len);
}
_
Patches currently in -mm which might be from senozhatsky@chromium.org are
zram-prefix-backends-printk-s.patch
zram-remove-debugfs-entry-on-init-failure.patch
zram-reset-writeback-state-in-zram_reset_device.patch
zram-move-mark_slot_accessed-under-existing-slot-lock-sections.patch
zram-remove-stale-warn_on-from-zram_read_page.patch
zram-zstd-do-not-allocate-empty-c-d-dictionaries.patch
zram-lz4hc-pre-initialize-dictionary-stream-in-setup_params.patch
zram-lz4-use-lz4_decompress_safe_usingdict.patch
zram-lz4hc-use-lz4_decompress_safe_usingdict.patch
zram-zstd-do-not-use-kvzalloc-for-zstd-allocations.patch
zram-split-zcomp-into-separate-r-w-streams.patch
zram-introduce-shared-decompression-streams.patch
zram-allocate-bounce-buffer-for-spanning-objects.patch
zram-borrow-idle-decompression-streams-in-exclusive-mode.patch
zram-use-a-singleton-compression-context-for-recompression.patch
reply other threads:[~2026-10-30 3:02 UTC|newest]
Thread overview: [no followups] expand[flat|nested] mbox.gz Atom feed
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20261030030231.6DC021F000C1@smtp.kernel.org \
--to=akpm@linux-foundation.org \
--cc=baohua@kernel.org \
--cc=bgeffon@google.com \
--cc=hdanton@sina.com \
--cc=minchan@kernel.org \
--cc=mm-commits@vger.kernel.org \
--cc=richardycc@google.com \
--cc=senozhatsky@chromium.org \
--cc=zhangbo0325@gmail.com \
--cc=zhangbo56@xiaomi.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox