From 014ff864d8f104a73cfca7f85ff85c242ebf608e Mon Sep 17 00:00:00 2001 From: Rob Norris Date: Fri, 12 Jan 2024 15:30:49 +1100 Subject: [PATCH] slack: fix decompression Turns out decompression never worked at all; likely an oversight converting the original "transparent" versions to a true compression option. This makes it work. Signed-off-by: Rob Norris --- include/sys/zio_compress.h | 2 ++ module/zfs/slack.c | 8 ++++++++ module/zfs/zio_compress.c | 2 +- 3 files changed, 11 insertions(+), 1 deletion(-) diff --git a/include/sys/zio_compress.h b/include/sys/zio_compress.h index 4c0d920fc2..6e96ed6cb3 100644 --- a/include/sys/zio_compress.h +++ b/include/sys/zio_compress.h @@ -182,6 +182,8 @@ extern int lz4_decompress_zfs(void *src, void *dst, size_t s_len, size_t d_len, int level); extern size_t slack_compress(void *src, void *dst, size_t s_len, size_t d_len, int level); +extern int slack_decompress(void *src, void *dst, size_t s_len, size_t d_len, + int level); /* * Compress and decompress data if necessary. diff --git a/module/zfs/slack.c b/module/zfs/slack.c index 6c9a041806..cbf797dd9c 100644 --- a/module/zfs/slack.c +++ b/module/zfs/slack.c @@ -54,3 +54,11 @@ slack_compress(void *src, void *dst, size_t s_len, size_t d_len, int level) memcpy(dst, src, c_len); return (c_len); } + +int +slack_decompress(void *src, void *dst, size_t s_len, size_t d_len, int level) +{ + ASSERT3U(d_len, >=, s_len); + memcpy(dst, src, s_len); + return (0); +} diff --git a/module/zfs/zio_compress.c b/module/zfs/zio_compress.c index 7c8188f7d7..cafcc8879e 100644 --- a/module/zfs/zio_compress.c +++ b/module/zfs/zio_compress.c @@ -68,7 +68,7 @@ zio_compress_info_t zio_compress_table[ZIO_COMPRESS_FUNCTIONS] = { {"lz4", 0, lz4_compress_zfs, lz4_decompress_zfs, NULL}, {"zstd", ZIO_ZSTD_LEVEL_DEFAULT, zfs_zstd_compress, zfs_zstd_decompress, zfs_zstd_decompress_level}, - {"slack", 0, slack_compress, NULL, NULL }, + {"slack", 0, slack_compress, slack_decompress, NULL }, }; uint8_t