From: David Sterba Date: Wed, 12 Feb 2025 20:22:02 +0000 (+0100) Subject: btrfs: zstd: move zstd_parameters to the workspace X-Git-Tag: v6.15-rc1~152^2~141 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=cfb999b81aa6285db1ecf090346be46d53213384;p=thirdparty%2Flinux.git btrfs: zstd: move zstd_parameters to the workspace Reduce stack consumption of zstd_compress_folios() by 40 bytes (10*sizeof(int)) as we can store struct zstd_parameters in the workspace that is reused for each call. typedef struct { ZSTD_compressionParameters cParams; ZSTD_frameParameters fParams; } ZSTD_parameters; typedef struct { unsigned windowLog; unsigned chainLog; unsigned hashLog; unsigned searchLog; unsigned minMatch; unsigned targetLength; ZSTD_strategy strategy; } ZSTD_compressionParameters; typedef struct { int contentSizeFlag; int checksumFlag; int noDictIDFlag; } ZSTD_frameParameters; Signed-off-by: David Sterba --- diff --git a/fs/btrfs/zstd.c b/fs/btrfs/zstd.c index a7bfbf8bea7d0..5419c47b854fc 100644 --- a/fs/btrfs/zstd.c +++ b/fs/btrfs/zstd.c @@ -53,6 +53,7 @@ struct workspace { struct list_head lru_list; zstd_in_buffer in_buf; zstd_out_buffer out_buf; + zstd_parameters params; }; /* @@ -402,15 +403,14 @@ int zstd_compress_folios(struct list_head *ws, struct address_space *mapping, unsigned long max_out = nr_dest_folios * PAGE_SIZE; unsigned int pg_off; unsigned int cur_len; - zstd_parameters params = zstd_get_btrfs_parameters(workspace->req_level, - len); + workspace->params = zstd_get_btrfs_parameters(workspace->req_level, len); *out_folios = 0; *total_out = 0; *total_in = 0; /* Initialize the stream */ - stream = zstd_init_cstream(¶ms, len, workspace->mem, + stream = zstd_init_cstream(&workspace->params, len, workspace->mem, workspace->size); if (unlikely(!stream)) { struct btrfs_inode *inode = BTRFS_I(mapping->host);