summaryrefslogtreecommitdiff
path: root/fs/bcachefs/alloc_background.h
diff options
context:
space:
mode:
authorKent Overstreet <kent.overstreet@gmail.com>2020-10-20 05:36:24 +0300
committerKent Overstreet <kent.overstreet@linux.dev>2023-10-23 00:08:44 +0300
commit39283c712e6df927c7c49e8b738ca110551bb399 (patch)
treedea8074dd781389429dd7af9d440a687d2091705 /fs/bcachefs/alloc_background.h
parent289980195ffaa949ecd4216337a70a8e23cf8e86 (diff)
downloadlinux-39283c712e6df927c7c49e8b738ca110551bb399.tar.xz
bcachefs: Fix for bad stripe pointers
The allocator usually doesn't increment bucket gens right away on buckets that it's about to hand out (for reasons that need to be documented), instead deferring that to whatever extent update first references that bucket. But stripe pointers reference buckets without changing bucket sector counts, meaning we could end up with a pointer in a stripe with a gen newer than the bucket it points to. Fix this by adding a transactional trigger for KEY_TYPE_stripe that just writes out the keys in the alloc btree for the buckets it points to. Also - consolidate the code that checks pointer validity. Signed-off-by: Kent Overstreet <kent.overstreet@gmail.com> Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
Diffstat (limited to 'fs/bcachefs/alloc_background.h')
-rw-r--r--fs/bcachefs/alloc_background.h3
1 files changed, 3 insertions, 0 deletions
diff --git a/fs/bcachefs/alloc_background.h b/fs/bcachefs/alloc_background.h
index 56a846fde8dd..66ce54724e93 100644
--- a/fs/bcachefs/alloc_background.h
+++ b/fs/bcachefs/alloc_background.h
@@ -13,6 +13,9 @@ struct bkey_alloc_unpacked {
#undef x
};
+/* How out of date a pointer gen is allowed to be: */
+#define BUCKET_GC_GEN_MAX 96U
+
/* returns true if not equal */
static inline bool bkey_alloc_unpacked_cmp(struct bkey_alloc_unpacked l,
struct bkey_alloc_unpacked r)