summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--fs/bcachefs/bcachefs_format.h10
-rw-r--r--fs/bcachefs/move.c3
-rw-r--r--fs/bcachefs/opts.h7
3 files changed, 16 insertions, 4 deletions
diff --git a/fs/bcachefs/bcachefs_format.h b/fs/bcachefs/bcachefs_format.h
index 5e406275d5f6..f70977dbf4b9 100644
--- a/fs/bcachefs/bcachefs_format.h
+++ b/fs/bcachefs/bcachefs_format.h
@@ -608,12 +608,16 @@ BKEY_VAL_TYPE(inode_generation, BCH_INODE_GENERATION);
BCH_INODE_FIELD(bi_dev, 32) \
BCH_INODE_FIELD(bi_data_checksum, 8) \
BCH_INODE_FIELD(bi_compression, 8) \
- BCH_INODE_FIELD(bi_project, 32)
+ BCH_INODE_FIELD(bi_project, 32) \
+ BCH_INODE_FIELD(bi_background_compression, 8) \
+ BCH_INODE_FIELD(bi_data_replicas, 8)
#define BCH_INODE_FIELDS_INHERIT() \
BCH_INODE_FIELD(bi_data_checksum) \
BCH_INODE_FIELD(bi_compression) \
- BCH_INODE_FIELD(bi_project)
+ BCH_INODE_FIELD(bi_project) \
+ BCH_INODE_FIELD(bi_background_compression) \
+ BCH_INODE_FIELD(bi_data_replicas)
enum {
/*
@@ -1077,6 +1081,8 @@ LE64_BITMASK(BCH_SB_ENCODED_EXTENT_MAX_BITS,
LE64_BITMASK(BCH_SB_META_REPLICAS_REQ, struct bch_sb, flags[1], 20, 24);
LE64_BITMASK(BCH_SB_DATA_REPLICAS_REQ, struct bch_sb, flags[1], 24, 28);
+LE64_BITMASK(BCH_SB_BACKGROUND_COMPRESSION_TYPE,
+ struct bch_sb, flags[1], 28, 32);
/* Features: */
enum bch_sb_features {
diff --git a/fs/bcachefs/move.c b/fs/bcachefs/move.c
index a176484ae91d..99a6635ecf4c 100644
--- a/fs/bcachefs/move.c
+++ b/fs/bcachefs/move.c
@@ -222,7 +222,8 @@ int bch2_migrate_write_init(struct bch_fs *c, struct migrate_write *m,
bch2_write_op_init(&m->op, c);
m->op.csum_type = bch2_data_checksum_type(c, io_opts.data_checksum);
m->op.compression_type =
- bch2_compression_opt_to_type[io_opts.compression];
+ bch2_compression_opt_to_type[io_opts.background_compression ?:
+ io_opts.compression];
m->op.devs = devs;
m->op.write_point = wp;
diff --git a/fs/bcachefs/opts.h b/fs/bcachefs/opts.h
index 8a3ac66b948c..a0bc2ca6dba0 100644
--- a/fs/bcachefs/opts.h
+++ b/fs/bcachefs/opts.h
@@ -94,6 +94,9 @@ enum opt_type {
BCH_OPT(compression, u8, OPT_RUNTIME, \
OPT_STR(bch2_compression_types), \
BCH_SB_COMPRESSION_TYPE, BCH_COMPRESSION_OPT_NONE)\
+ BCH_OPT(background_compression, u8, OPT_RUNTIME, \
+ OPT_STR(bch2_compression_types), \
+ BCH_SB_BACKGROUND_COMPRESSION_TYPE,BCH_COMPRESSION_OPT_NONE)\
BCH_OPT(str_hash, u8, OPT_RUNTIME, \
OPT_STR(bch2_str_hash_types), \
BCH_SB_STR_HASH_TYPE, BCH_STR_HASH_SIPHASH) \
@@ -238,7 +241,9 @@ int bch2_parse_mount_opts(struct bch_opts *, char *);
#define BCH_INODE_OPTS() \
BCH_INODE_OPT(data_checksum, 8) \
- BCH_INODE_OPT(compression, 8)
+ BCH_INODE_OPT(compression, 8) \
+ BCH_INODE_OPT(background_compression, 8) \
+ BCH_INODE_OPT(data_replicas, 8)
struct bch_io_opts {
#define BCH_INODE_OPT(_name, _bits) unsigned _name##_defined:1;