aboutsummaryrefslogtreecommitdiff
path: root/include
diff options
context:
space:
mode:
authorGao Xiang <xiang@kernel.org>2021-04-11 11:48:38 +0800
committerGao Xiang <xiang@kernel.org>2021-04-16 20:41:11 +0800
commita70f35adc1b0eec1870f00e79a14c1d02b597ac6 (patch)
tree5c1fcd8d9052a4dc9900c83a372675b1fe1d1d07 /include
parent68102c671d04841641dddb266abb6e4e968af05e (diff)
downloaderofs-utils-a70f35adc1b0eec1870f00e79a14c1d02b597ac6.tar.gz
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 <xiang@kernel.org>
Diffstat (limited to 'include')
-rw-r--r--include/erofs/compress.h2
-rw-r--r--include/erofs/internal.h3
-rw-r--r--include/erofs_fs.h17
3 files changed, 19 insertions, 3 deletions
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;