bcachefs: better __bch2_snapshot_is_ancestor() assert
authorKent Overstreet <kent.overstreet@linux.dev>
Fri, 13 Jun 2025 19:17:37 +0000 (15:17 -0400)
committerKent Overstreet <kent.overstreet@linux.dev>
Mon, 16 Jun 2025 02:11:56 +0000 (22:11 -0400)
Previously, we weren't checking the result of the skiplist walk, just
the is_ancestor bitmap.

Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
fs/bcachefs/snapshot.c

index 23a332d76b327679201d2be756dc8a9ad4e88f89..38aeaa128d2733c99ecdf8f2cd5c6cbf1bafcf37 100644 (file)
@@ -135,7 +135,9 @@ static bool test_ancestor_bitmap(struct snapshot_table *t, u32 id, u32 ancestor)
 
 bool __bch2_snapshot_is_ancestor(struct bch_fs *c, u32 id, u32 ancestor)
 {
-       bool ret;
+#ifdef CONFIG_BCACHEFS_DEBUG
+       u32 orig_id = id;
+#endif
 
        guard(rcu)();
        struct snapshot_table *t = rcu_dereference(c->snapshots);
@@ -147,11 +149,11 @@ bool __bch2_snapshot_is_ancestor(struct bch_fs *c, u32 id, u32 ancestor)
                while (id && id < ancestor - IS_ANCESTOR_BITMAP)
                        id = get_ancestor_below(t, id, ancestor);
 
-       ret = id && id < ancestor
+       bool ret = id && id < ancestor
                ? test_ancestor_bitmap(t, id, ancestor)
                : id == ancestor;
 
-       EBUG_ON(ret != __bch2_snapshot_is_ancestor_early(t, id, ancestor));
+       EBUG_ON(ret != __bch2_snapshot_is_ancestor_early(t, orig_id, ancestor));
        return ret;
 }