diff options
author | Kent Overstreet <kent.overstreet@linux.dev> | 2023-06-28 02:02:17 +0300 |
---|---|---|
committer | Kent Overstreet <kent.overstreet@linux.dev> | 2023-10-23 00:10:05 +0300 |
commit | 2766876d5d118abd59d14fbe5b31e7e208ea11f2 (patch) | |
tree | 8b12ea230e8b3bb2a8c58e78b2d7bfdb9247458e /fs | |
parent | 4e1430a728499ce8088e1bdd0dd6467ce3447ca0 (diff) | |
download | linux-2766876d5d118abd59d14fbe5b31e7e208ea11f2.tar.xz |
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')
-rw-r--r-- | fs/bcachefs/bcachefs_format.h | 19 | ||||
-rw-r--r-- | fs/bcachefs/extents.c | 6 | ||||
-rw-r--r-- | fs/bcachefs/extents.h | 3 |
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); \ |