bcachefs: struct bch_extent_rebalance
authorKent Overstreet <kent.overstreet@linux.dev>
Tue, 27 Jun 2023 23:02:17 +0000 (19:02 -0400)
committerKent Overstreet <kent.overstreet@linux.dev>
Sun, 22 Oct 2023 21:10:05 +0000 (17:10 -0400)
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>
fs/bcachefs/bcachefs_format.h
fs/bcachefs/extents.c
fs/bcachefs/extents.h

index a73f1de8e87260b522a29966d7f069c8a75e6c54..158cefb87684f030aefcd01910786cc7800a04ed 100644 (file)
@@ -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;
index 7e00550980de3f4c9a8c1eef3079677f8177c502..753a846eaf8126f9de0766de1dcec00ecb1749c5 100644 (file)
@@ -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))
index 3ba41e37d8649610e94c56e26477baec8a53c7e6..c573a40d366aa1256540dae774cdb5217ee33f31 100644 (file)
@@ -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);                                                \