summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKent Overstreet <kent.overstreet@linux.dev>2023-02-13 18:21:40 -0500
committerKent Overstreet <kent.overstreet@linux.dev>2023-03-13 11:34:49 -0400
commit4b2231e9b8385e8fb92d64c25f84b234991cf592 (patch)
tree0a0d4ba1837c7fa73a8e85966b1f8784a8ac4b81
parent2d64cad2e888e57a6c6f84e37fd2c9522b69b424 (diff)
bcachefs: Fix verify_update_old_key()
This fixes a very-rare race in our assertion, with needs_whiteout being modified in the btree key. Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
-rw-r--r--fs/bcachefs/btree_update_leaf.c5
1 files changed, 3 insertions, 2 deletions
diff --git a/fs/bcachefs/btree_update_leaf.c b/fs/bcachefs/btree_update_leaf.c
index 0195b13de152..46f97b9c813c 100644
--- a/fs/bcachefs/btree_update_leaf.c
+++ b/fs/bcachefs/btree_update_leaf.c
@@ -56,9 +56,10 @@ static void verify_update_old_key(struct btree_trans *trans, struct btree_insert
k = bkey_i_to_s_c(j_k);
}
- i->old_k.needs_whiteout = k.k->needs_whiteout;
+ u = *k.k;
+ u.needs_whiteout = i->old_k.needs_whiteout;
- BUG_ON(memcmp(&i->old_k, k.k, sizeof(struct bkey)));
+ BUG_ON(memcmp(&i->old_k, &u, sizeof(struct bkey)));
BUG_ON(i->old_v != k.v);
#endif
}