summaryrefslogtreecommitdiff
path: root/libbcachefs/compress.h
diff options
context:
space:
mode:
authorKent Overstreet <kent.overstreet@linux.dev>2023-07-10 20:31:34 -0400
committerKent Overstreet <kent.overstreet@linux.dev>2023-07-15 17:36:15 -0400
commitc8bec83e307f28751c433ba1d3f648429fb5a34c (patch)
tree6e70e0cf8f25117f706214d86a0689ee8495dca0 /libbcachefs/compress.h
parent1c156d5c4667c1c2e2949b229dfef75696196d35 (diff)
Update bcachefs sources to e14d7c7195 bcachefs: Compression levels
Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
Diffstat (limited to 'libbcachefs/compress.h')
-rw-r--r--libbcachefs/compress.h37
1 files changed, 37 insertions, 0 deletions
diff --git a/libbcachefs/compress.h b/libbcachefs/compress.h
index 4bab1f61..052ea303 100644
--- a/libbcachefs/compress.h
+++ b/libbcachefs/compress.h
@@ -4,6 +4,35 @@
#include "extents_types.h"
+struct bch_compression_opt {
+ u8 type:4,
+ level:4;
+};
+
+static inline struct bch_compression_opt bch2_compression_decode(unsigned v)
+{
+ return (struct bch_compression_opt) {
+ .type = v & 15,
+ .level = v >> 4,
+ };
+}
+
+static inline unsigned bch2_compression_encode(struct bch_compression_opt opt)
+{
+ return opt.type|(opt.level << 4);
+}
+
+static const unsigned __bch2_compression_opt_to_type[] = {
+#define x(t, n) [BCH_COMPRESSION_OPT_##t] = BCH_COMPRESSION_TYPE_##t,
+ BCH_COMPRESSION_OPTS()
+#undef x
+};
+
+static inline enum bch_compression_type bch2_compression_opt_to_type(unsigned v)
+{
+ return __bch2_compression_opt_to_type[bch2_compression_decode(v).type];
+}
+
int bch2_bio_uncompress_inplace(struct bch_fs *, struct bio *,
struct bch_extent_crc_unpacked *);
int bch2_bio_uncompress(struct bch_fs *, struct bio *, struct bio *,
@@ -15,4 +44,12 @@ int bch2_check_set_has_compressed_data(struct bch_fs *, unsigned);
void bch2_fs_compress_exit(struct bch_fs *);
int bch2_fs_compress_init(struct bch_fs *);
+int bch2_opt_compression_parse(struct bch_fs *, const char *, u64 *, struct printbuf *);
+void bch2_opt_compression_to_text(struct printbuf *, struct bch_fs *, struct bch_sb *, u64);
+
+#define bch2_opt_compression (struct bch_opt_fn) { \
+ .parse = bch2_opt_compression_parse, \
+ .to_text = bch2_opt_compression_to_text, \
+}
+
#endif /* _BCACHEFS_COMPRESS_H */