summaryrefslogtreecommitdiff
path: root/libbcachefs/btree_gc.c
diff options
context:
space:
mode:
Diffstat (limited to 'libbcachefs/btree_gc.c')
-rw-r--r--libbcachefs/btree_gc.c15
1 files changed, 13 insertions, 2 deletions
diff --git a/libbcachefs/btree_gc.c b/libbcachefs/btree_gc.c
index d907ef58..78132e40 100644
--- a/libbcachefs/btree_gc.c
+++ b/libbcachefs/btree_gc.c
@@ -142,14 +142,25 @@ int bch2_btree_mark_key_initial(struct bch_fs *c, enum bkey_type type,
struct bucket *g = PTR_BUCKET(ca, ptr);
struct bucket_mark new;
+ if (!g->mark.gen_valid) {
+ bucket_cmpxchg(g, new, ({
+ new.gen = ptr->gen;
+ new.gen_valid = 1;
+ }));
+ ca->need_prio_write = true;
+ }
+
if (fsck_err_on(gen_cmp(ptr->gen, g->mark.gen) > 0, c,
"%s ptr gen in the future: %u > %u",
type == BKEY_TYPE_BTREE
? "btree" : "data",
ptr->gen, g->mark.gen)) {
- bucket_cmpxchg(g, new, new.gen = ptr->gen);
- set_bit(BCH_FS_FIXED_GENS, &c->flags);
+ bucket_cmpxchg(g, new, ({
+ new.gen = ptr->gen;
+ new.gen_valid = 1;
+ }));
ca->need_prio_write = true;
+ set_bit(BCH_FS_FIXED_GENS, &c->flags);
}
}