]> git.dujemihanovic.xyz Git - u-boot.git/commitdiff
fs/squashfs: enable LZ4 compression support
authorDavid Oberhollenzer <goliath@infraroot.at>
Mon, 6 Nov 2023 10:14:03 +0000 (11:14 +0100)
committerTom Rini <trini@konsulko.com>
Thu, 16 Nov 2023 23:53:09 +0000 (18:53 -0500)
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>
fs/squashfs/sqfs_decompressor.c

index 6b3e01cdad76e2de4f00ec52fd0b9f6cfcd853e6..cfd1153fd74a3de2a42575863b578d5ca15a063c 100644 (file)
 #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);