summaryrefslogtreecommitdiff
path: root/fs/erofs/decompressor.c
diff options
context:
space:
mode:
authorGao Xiang <hsiangkao@redhat.com>2021-03-29 09:23:07 +0800
committerGao Xiang <hsiangkao@redhat.com>2021-03-29 10:24:58 +0800
commit46249cded18ac0c4ffb7b177219510a133a51c00 (patch)
tree71682f8e22563f0c126c81d6848b276f3284f239 /fs/erofs/decompressor.c
parent5d50538fc567c6f3692dec1825fb38c5a0884d93 (diff)
erofs: introduce on-disk lz4 fs configurations
Introduce z_erofs_lz4_cfgs to store all lz4 configurations. Currently it's only max_distance, but will be used for new features later. Link: https://lore.kernel.org/r/20210329012308.28743-4-hsiangkao@aol.com Reviewed-by: Chao Yu <yuchao0@huawei.com> Signed-off-by: Gao Xiang <hsiangkao@redhat.com>
Diffstat (limited to 'fs/erofs/decompressor.c')
-rw-r--r--fs/erofs/decompressor.c15
1 files changed, 13 insertions, 2 deletions
diff --git a/fs/erofs/decompressor.c b/fs/erofs/decompressor.c
index 93411e9df9b6..97538ff24a19 100644
--- a/fs/erofs/decompressor.c
+++ b/fs/erofs/decompressor.c
@@ -29,9 +29,20 @@ struct z_erofs_decompressor {
};
int z_erofs_load_lz4_config(struct super_block *sb,
- struct erofs_super_block *dsb)
+ struct erofs_super_block *dsb,
+ struct z_erofs_lz4_cfgs *lz4, int size)
{
- u16 distance = le16_to_cpu(dsb->lz4_max_distance);
+ u16 distance;
+
+ if (lz4) {
+ if (size < sizeof(struct z_erofs_lz4_cfgs)) {
+ erofs_err(sb, "invalid lz4 cfgs, size=%u", size);
+ return -EINVAL;
+ }
+ distance = le16_to_cpu(lz4->max_distance);
+ } else {
+ distance = le16_to_cpu(dsb->lz4_max_distance);
+ }
EROFS_SB(sb)->lz4.max_distance_pages = distance ?
DIV_ROUND_UP(distance, PAGE_SIZE) + 1 :