fs/squashfs: enable LZ4 compression support

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>
This commit is contained in:
David Oberhollenzer 2023-11-06 11:14:03 +01:00 committed by Tom Rini
parent 99374ff189
commit fa894a36a9

View file

@ -18,6 +18,10 @@
#include <u-boot/zlib.h> #include <u-boot/zlib.h>
#endif #endif
#if IS_ENABLED(CONFIG_LZ4)
#include <u-boot/lz4.h>
#endif
#if IS_ENABLED(CONFIG_ZSTD) #if IS_ENABLED(CONFIG_ZSTD)
#include <linux/zstd.h> #include <linux/zstd.h>
#endif #endif
@ -38,6 +42,10 @@ int sqfs_decompressor_init(struct squashfs_ctxt *ctxt)
case SQFS_COMP_ZLIB: case SQFS_COMP_ZLIB:
break; break;
#endif #endif
#if IS_ENABLED(CONFIG_LZ4)
case SQFS_COMP_LZ4:
break;
#endif
#if IS_ENABLED(CONFIG_ZSTD) #if IS_ENABLED(CONFIG_ZSTD)
case SQFS_COMP_ZSTD: case SQFS_COMP_ZSTD:
ctxt->zstd_workspace = malloc(zstd_dctx_workspace_bound()); ctxt->zstd_workspace = malloc(zstd_dctx_workspace_bound());
@ -66,6 +74,10 @@ void sqfs_decompressor_cleanup(struct squashfs_ctxt *ctxt)
case SQFS_COMP_ZLIB: case SQFS_COMP_ZLIB:
break; break;
#endif #endif
#if IS_ENABLED(CONFIG_LZ4)
case SQFS_COMP_LZ4:
break;
#endif
#if IS_ENABLED(CONFIG_ZSTD) #if IS_ENABLED(CONFIG_ZSTD)
case SQFS_COMP_ZSTD: case SQFS_COMP_ZSTD:
free(ctxt->zstd_workspace); free(ctxt->zstd_workspace);
@ -139,6 +151,17 @@ int sqfs_decompress(struct squashfs_ctxt *ctxt, void *dest,
break; break;
#endif #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) #if IS_ENABLED(CONFIG_ZSTD)
case SQFS_COMP_ZSTD: case SQFS_COMP_ZSTD:
ret = sqfs_zstd_decompress(ctxt, dest, *dest_len, source, src_len); ret = sqfs_zstd_decompress(ctxt, dest, *dest_len, source, src_len);