summaryrefslogtreecommitdiffstats
path: root/fs/bcachefs
diff options
context:
space:
mode:
authorKent Overstreet <kent.overstreet@linux.dev>2023-06-27 19:02:17 -0400
committerKent Overstreet <kent.overstreet@linux.dev>2023-10-22 17:10:05 -0400
commit2766876d5d118abd59d14fbe5b31e7e208ea11f2 (patch)
tree8b12ea230e8b3bb2a8c58e78b2d7bfdb9247458e /fs/bcachefs
parent4e1430a728499ce8088e1bdd0dd6467ce3447ca0 (diff)
downloadlinux-2766876d5d118abd59d14fbe5b31e7e208ea11f2.tar.gz
linux-2766876d5d118abd59d14fbe5b31e7e208ea11f2.tar.bz2
linux-2766876d5d118abd59d14fbe5b31e7e208ea11f2.zip
bcachefs: struct bch_extent_rebalance
This adds the extent entry for extents that rebalance needs to do something with. We're adding this ahead of the main rebalance_work patchset, because adding new extent entries can't be done in a forwards-compatible way. Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
Diffstat (limited to 'fs/bcachefs')
-rw-r--r--fs/bcachefs/bcachefs_format.h19
-rw-r--r--fs/bcachefs/extents.c6
-rw-r--r--fs/bcachefs/extents.h3
3 files changed, 26 insertions, 2 deletions
diff --git a/fs/bcachefs/bcachefs_format.h b/fs/bcachefs/bcachefs_format.h
index a73f1de8e872..158cefb87684 100644
--- a/fs/bcachefs/bcachefs_format.h
+++ b/fs/bcachefs/bcachefs_format.h
@@ -488,8 +488,9 @@ struct bch_csum {
x(crc32, 1) \
x(crc64, 2) \
x(crc128, 3) \
- x(stripe_ptr, 4)
-#define BCH_EXTENT_ENTRY_MAX 5
+ x(stripe_ptr, 4) \
+ x(rebalance, 5)
+#define BCH_EXTENT_ENTRY_MAX 6
enum bch_extent_entry_type {
#define x(f, n) BCH_EXTENT_ENTRY_##f = n,
@@ -624,6 +625,20 @@ struct bch_extent_reservation {
#endif
};
+struct bch_extent_rebalance {
+#if defined(__LITTLE_ENDIAN_BITFIELD)
+ __u64 type:7,
+ unused:33,
+ compression:8,
+ target:16;
+#elif defined (__BIG_ENDIAN_BITFIELD)
+ __u64 target:16,
+ compression:8,
+ unused:33,
+ type:7;
+#endif
+};
+
union bch_extent_entry {
#if __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__ || __BITS_PER_LONG == 64
unsigned long type;
diff --git a/fs/bcachefs/extents.c b/fs/bcachefs/extents.c
index 7e00550980de..753a846eaf81 100644
--- a/fs/bcachefs/extents.c
+++ b/fs/bcachefs/extents.c
@@ -1202,6 +1202,8 @@ int bch2_bkey_ptrs_invalid(const struct bch_fs *c, struct bkey_s_c k,
}
have_ec = true;
break;
+ case BCH_EXTENT_ENTRY_rebalance:
+ break;
}
}
@@ -1260,6 +1262,8 @@ void bch2_ptr_swab(struct bkey_s k)
break;
case BCH_EXTENT_ENTRY_stripe_ptr:
break;
+ case BCH_EXTENT_ENTRY_rebalance:
+ break;
}
}
}
@@ -1310,6 +1314,8 @@ int bch2_cut_front_s(struct bpos where, struct bkey_s k)
break;
case BCH_EXTENT_ENTRY_stripe_ptr:
break;
+ case BCH_EXTENT_ENTRY_rebalance:
+ break;
}
if (extent_entry_is_crc(entry))
diff --git a/fs/bcachefs/extents.h b/fs/bcachefs/extents.h
index 3ba41e37d864..c573a40d366a 100644
--- a/fs/bcachefs/extents.h
+++ b/fs/bcachefs/extents.h
@@ -318,6 +318,9 @@ static inline struct bkey_ptrs bch2_bkey_ptrs(struct bkey_s k)
(_ptr).ec = _entry->stripe_ptr; \
(_ptr).has_ec = true; \
break; \
+ default: \
+ /* nothing */ \
+ break; \
} \
out: \
_entry < (_end); \