[PATCH 2/4] perf: zstd: factor out zstd_init_{c,d}stream()
From: Ivan Shapovalov
Date: Wed Oct 14 2026 - 13:42:20 EST
Factor out functions to manage CStream/DStream in `struct zstd_data`
for reuse across multiple zstd (de)compression entry points.
Signed-off-by: Ivan Shapovalov <intelfx@xxxxxxxxxxxx>
---
tools/perf/util/zstd.c | 82 ++++++++++++++++++++++++++++++++------------------
1 file changed, 52 insertions(+), 30 deletions(-)
diff --git a/tools/perf/util/zstd.c b/tools/perf/util/zstd.c
index af113660d1ce0..3af8910bb87cf 100644
--- a/tools/perf/util/zstd.c
+++ b/tools/perf/util/zstd.c
@@ -14,6 +14,50 @@ int zstd_init(struct zstd_data *data, int level)
return 0;
}
+static int zstd_init_cstream(struct zstd_data *data)
+{
+ size_t ret;
+
+ if (!data->cstream) {
+ data->cstream = ZSTD_createCStream();
+ if (data->cstream == NULL) {
+ pr_err("zstd: failed to create compression stream\n");
+ return -1;
+ }
+
+ ret = ZSTD_initCStream(data->cstream, data->comp_level);
+ if (ZSTD_isError(ret)) {
+ pr_err("zstd: failed to initialize compression stream: %s\n",
+ ZSTD_getErrorName(ret));
+ return -1;
+ }
+ }
+
+ return 0;
+}
+
+static int zstd_init_dstream(struct zstd_data *data)
+{
+ size_t ret;
+
+ if (!data->dstream) {
+ data->dstream = ZSTD_createDStream();
+ if (data->dstream == NULL) {
+ pr_err("zstd: failed to create decompression stream\n");
+ return -1;
+ }
+
+ ret = ZSTD_initDStream(data->dstream);
+ if (ZSTD_isError(ret)) {
+ pr_err("zstd: failed to initialize decompression stream: %s\n",
+ ZSTD_getErrorName(ret));
+ return -1;
+ }
+ }
+
+ return 0;
+}
+
int zstd_fini(struct zstd_data *data)
{
if (data->dstream) {
@@ -34,26 +78,14 @@ ssize_t zstd_compress_stream_to_records(struct zstd_data *data, void *dst, size_
ssize_t process_header(void *record, size_t dst_size,
size_t data_size))
{
- size_t ret, compressed = 0;
- ssize_t size;
+ ssize_t ret, size, compressed = 0;
ZSTD_inBuffer input = { src, src_size, 0 };
ZSTD_outBuffer output;
void *record;
- if (!data->cstream) {
- data->cstream = ZSTD_createCStream();
- if (data->cstream == NULL) {
- pr_err("Couldn't create compression stream.\n");
- return -1;
- }
-
- ret = ZSTD_initCStream(data->cstream, data->comp_level);
- if (ZSTD_isError(ret)) {
- pr_err("Failed to initialize compression stream: %s\n",
- ZSTD_getErrorName(ret));
- return -1;
- }
- }
+ ret = zstd_init_cstream(data);
+ if (ret < 0)
+ return ret;
while (input.pos < input.size) {
record = dst;
@@ -107,24 +139,14 @@ ssize_t zstd_compress_stream_to_records(struct zstd_data *data, void *dst, size_
size_t zstd_decompress_buffer(struct zstd_data *data, void *src, size_t src_size,
void *dst, size_t dst_size)
{
- size_t ret;
+ ssize_t ret;
ZSTD_inBuffer input = { src, src_size, 0 };
ZSTD_outBuffer output = { dst, dst_size, 0 };
- if (!data->dstream) {
- data->dstream = ZSTD_createDStream();
- if (data->dstream == NULL) {
- pr_err("Couldn't create decompression stream.\n");
- return 0;
- }
+ ret = zstd_init_dstream(data);
+ if (ret < 0)
+ return ret;
- ret = ZSTD_initDStream(data->dstream);
- if (ZSTD_isError(ret)) {
- pr_err("Failed to initialize decompression stream: %s\n",
- ZSTD_getErrorName(ret));
- return 0;
- }
- }
while (input.pos < input.size) {
size_t prev_in = input.pos;
size_t prev_out = output.pos;
--
2.55.0.8.g37e2a0019f