summaryrefslogtreecommitdiffstats
path: root/fs/erofs/decompressor.c
diff options
context:
space:
mode:
authorGao Xiang <hsiangkao@linux.alibaba.com>2021-10-11 05:31:45 +0800
committerGao Xiang <hsiangkao@linux.alibaba.com>2021-10-19 23:44:30 +0800
commit622ceaddb7649ca328832f50ba1400af778d75fa (patch)
tree6e6a3db1cff711620944b9e283c2bd5f4dbd6171 /fs/erofs/decompressor.c
parent966edfb0a3dc2adf5aab461c298fa0feb02f49d6 (diff)
downloadlinux-622ceaddb7649ca328832f50ba1400af778d75fa.tar.gz
linux-622ceaddb7649ca328832f50ba1400af778d75fa.tar.bz2
linux-622ceaddb7649ca328832f50ba1400af778d75fa.zip
erofs: lzma compression support
Add MicroLZMA support in order to maximize compression ratios for specific scenarios. For example, it's useful for low-end embedded boards and as a secondary algorithm in a file for specific access patterns. MicroLZMA is a new container format for raw LZMA1, which was created by Lasse Collin aiming to minimize old LZMA headers and get rid of unnecessary EOPM (end of payload marker) as well as to enable fixed-sized output compression, especially for 4KiB pclusters. Similar to LZ4, inplace I/O approach is used to minimize runtime memory footprint when dealing with I/O. Overlapped decompression is handled with 1) bounced buffer for data under processing or 2) extra short-lived pages from the on-stack pagepool which will be shared in the same read request (128KiB for example). Link: https://lore.kernel.org/r/20211010213145.17462-8-xiang@kernel.org Acked-by: Chao Yu <chao@kernel.org> Signed-off-by: Gao Xiang <hsiangkao@linux.alibaba.com>
Diffstat (limited to 'fs/erofs/decompressor.c')
-rw-r--r--fs/erofs/decompressor.c12
1 files changed, 6 insertions, 6 deletions
diff --git a/fs/erofs/decompressor.c b/fs/erofs/decompressor.c
index 8fd7af9d6b38..8a624d73c185 100644
--- a/fs/erofs/decompressor.c
+++ b/fs/erofs/decompressor.c
@@ -16,12 +16,6 @@
#define LZ4_DECOMPRESS_INPLACE_MARGIN(srcsize) (((srcsize) >> 8) + 32)
#endif
-struct z_erofs_decompressor {
- int (*decompress)(struct z_erofs_decompress_req *rq,
- struct list_head *pagepool);
- char *name;
-};
-
int z_erofs_load_lz4_config(struct super_block *sb,
struct erofs_super_block *dsb,
struct z_erofs_lz4_cfgs *lz4, int size)
@@ -349,6 +343,12 @@ static struct z_erofs_decompressor decompressors[] = {
.decompress = z_erofs_lz4_decompress,
.name = "lz4"
},
+#ifdef CONFIG_EROFS_FS_ZIP_LZMA
+ [Z_EROFS_COMPRESSION_LZMA] = {
+ .decompress = z_erofs_lzma_decompress,
+ .name = "lzma"
+ },
+#endif
};
int z_erofs_decompress(struct z_erofs_decompress_req *rq,