diff mbox series

fs/squashfs: enable LZ4 compression support

Message ID 20231106101403.80409-1-goliath@infraroot.at
State Accepted
Commit fa894a36a9090c53050cf0e9cf186c4521209974
Delegated to: Tom Rini
Headers show
Series fs/squashfs: enable LZ4 compression support | expand

Commit Message

David Oberhollenzer Nov. 6, 2023, 10:14 a.m. UTC
The structure is identical to the existing compressor implementations,
trivially adding lz4 decompression to sqfs_decompress.

The changes were tested using a sandbox build. An LZ4 compressed
squashfs image was bound as a host block device.

Signed-off-by: David Oberhollenzer <goliath@infraroot.at>
---
 fs/squashfs/sqfs_decompressor.c | 23 +++++++++++++++++++++++
 1 file changed, 23 insertions(+)

Comments

João Marcos Costa Nov. 6, 2023, 10:42 a.m. UTC | #1
Hello, David

Thanks for this contribution!

Em seg., 6 de nov. de 2023 às 11:15, David Oberhollenzer <
goliath@infraroot.at> escreveu:

> The structure is identical to the existing compressor implementations,
> trivially adding lz4 decompression to sqfs_decompress.
>
> The changes were tested using a sandbox build. An LZ4 compressed
> squashfs image was bound as a host block device.
>
> Signed-off-by: David Oberhollenzer <goliath@infraroot.at>
> ---
>
[...]

Reviewed-by: Joao Marcos Costa <jmcosta944@gmail.com>
Tom Rini Nov. 17, 2023, 1:41 p.m. UTC | #2
On Mon, Nov 06, 2023 at 11:14:03AM +0100, David Oberhollenzer wrote:

> The structure is identical to the existing compressor implementations,
> trivially adding lz4 decompression to sqfs_decompress.
> 
> The changes were tested using a sandbox build. An LZ4 compressed
> squashfs image was bound as a host block device.
> 
> Signed-off-by: David Oberhollenzer <goliath@infraroot.at>
> Reviewed-by: Joao Marcos Costa <jmcosta944@gmail.com>

Applied to u-boot/next, thanks!
diff mbox series

Patch

diff --git a/fs/squashfs/sqfs_decompressor.c b/fs/squashfs/sqfs_decompressor.c
index 6b3e01cdad..cfd1153fd7 100644
--- a/fs/squashfs/sqfs_decompressor.c
+++ b/fs/squashfs/sqfs_decompressor.c
@@ -18,6 +18,10 @@ 
 #include <u-boot/zlib.h>
 #endif
 
+#if IS_ENABLED(CONFIG_LZ4)
+#include <u-boot/lz4.h>
+#endif
+
 #if IS_ENABLED(CONFIG_ZSTD)
 #include <linux/zstd.h>
 #endif
@@ -38,6 +42,10 @@  int sqfs_decompressor_init(struct squashfs_ctxt *ctxt)
 	case SQFS_COMP_ZLIB:
 		break;
 #endif
+#if IS_ENABLED(CONFIG_LZ4)
+	case SQFS_COMP_LZ4:
+		break;
+#endif
 #if IS_ENABLED(CONFIG_ZSTD)
 	case SQFS_COMP_ZSTD:
 		ctxt->zstd_workspace = malloc(zstd_dctx_workspace_bound());
@@ -66,6 +74,10 @@  void sqfs_decompressor_cleanup(struct squashfs_ctxt *ctxt)
 	case SQFS_COMP_ZLIB:
 		break;
 #endif
+#if IS_ENABLED(CONFIG_LZ4)
+	case SQFS_COMP_LZ4:
+		break;
+#endif
 #if IS_ENABLED(CONFIG_ZSTD)
 	case SQFS_COMP_ZSTD:
 		free(ctxt->zstd_workspace);
@@ -139,6 +151,17 @@  int sqfs_decompress(struct squashfs_ctxt *ctxt, void *dest,
 
 		break;
 #endif
+#if IS_ENABLED(CONFIG_LZ4)
+	case SQFS_COMP_LZ4:
+		ret = LZ4_decompress_safe(source, dest, src_len, *dest_len);
+		if (ret < 0) {
+			printf("LZ4 decompression failed.\n");
+			return -EINVAL;
+		}
+
+		ret = 0;
+		break;
+#endif
 #if IS_ENABLED(CONFIG_ZSTD)
 	case SQFS_COMP_ZSTD:
 		ret = sqfs_zstd_decompress(ctxt, dest, *dest_len, source, src_len);