From a70f35adc1b0eec1870f00e79a14c1d02b597ac6 Mon Sep 17 00:00:00 2001 From: Gao Xiang Date: Sun, 11 Apr 2021 11:48:38 +0800 Subject: erofs-utils: introduce ondisk compression cfgs Add support to generate ondisk compression cfgs, which can generate lz4 compression cfgs now. Link: https://lore.kernel.org/r/20210411034844.12673-3-xiang@kernel.org Signed-off-by: Gao Xiang --- include/erofs/compress.h | 2 +- include/erofs/internal.h | 3 +++ include/erofs_fs.h | 17 +++++++++++++++-- 3 files changed, 19 insertions(+), 3 deletions(-) (limited to 'include') diff --git a/include/erofs/compress.h b/include/erofs/compress.h index 952f287..d234e8b 100644 --- a/include/erofs/compress.h +++ b/include/erofs/compress.h @@ -18,7 +18,7 @@ int erofs_write_compressed_file(struct erofs_inode *inode); -int z_erofs_compress_init(void); +int z_erofs_compress_init(struct erofs_buffer_head *bh); int z_erofs_compress_exit(void); const char *z_erofs_list_available_compressors(unsigned int i); diff --git a/include/erofs/internal.h b/include/erofs/internal.h index 3849980..6e481fa 100644 --- a/include/erofs/internal.h +++ b/include/erofs/internal.h @@ -79,6 +79,8 @@ struct erofs_sb_info { u64 inos; u8 uuid[16]; + + u16 available_compr_algs; u16 lz4_max_distance; }; @@ -105,6 +107,7 @@ static inline void erofs_sb_clear_##name(void) \ } EROFS_FEATURE_FUNCS(lz4_0padding, incompat, INCOMPAT_LZ4_0PADDING) +EROFS_FEATURE_FUNCS(compr_cfgs, incompat, INCOMPAT_COMPR_CFGS) EROFS_FEATURE_FUNCS(sb_chksum, compat, COMPAT_SB_CHKSUM) #define EROFS_I_EA_INITED (1 << 0) diff --git a/include/erofs_fs.h b/include/erofs_fs.h index ae2305c..a24deb0 100644 --- a/include/erofs_fs.h +++ b/include/erofs_fs.h @@ -20,7 +20,10 @@ * be incompatible with this kernel version. */ #define EROFS_FEATURE_INCOMPAT_LZ4_0PADDING 0x00000001 -#define EROFS_ALL_FEATURE_INCOMPAT EROFS_FEATURE_INCOMPAT_LZ4_0PADDING +#define EROFS_FEATURE_INCOMPAT_COMPR_CFGS 0x00000002 +#define EROFS_ALL_FEATURE_INCOMPAT \ + (EROFS_FEATURE_INCOMPAT_LZ4_0PADDING | \ + EROFS_FEATURE_INCOMPAT_COMPR_CFGS) /* 128-byte erofs on-disk super block */ struct erofs_super_block { @@ -41,7 +44,11 @@ struct erofs_super_block { __u8 uuid[16]; /* 128-bit uuid for volume */ __u8 volume_name[16]; /* volume name */ __le32 feature_incompat; - __le16 lz4_max_distance; + union { + /* bitmap for available compression algorithms */ + __le16 available_compr_algs; + __le16 lz4_max_distance; + } u1; __u8 reserved2[42]; }; @@ -198,6 +205,12 @@ enum { Z_EROFS_COMPRESSION_MAX }; +/* 14 bytes (+ length field = 16 bytes) */ +struct z_erofs_lz4_cfgs { + __le16 max_distance; + u8 reserved[12]; +} __packed; + /* * bit 0 : COMPACTED_2B indexes (0 - off; 1 - on) * e.g. for 4k logical cluster size, 4B if compacted 2B is off; -- cgit v1.2.3