bcachefs: Fix verify_update_old_key()
authorKent Overstreet <kent.overstreet@linux.dev>
Mon, 13 Feb 2023 23:21:40 +0000 (18:21 -0500)
committerKent Overstreet <kent.overstreet@linux.dev>
Sun, 22 Oct 2023 21:09:53 +0000 (17:09 -0400)
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>
fs/bcachefs/btree_update_leaf.c

index cefe62d28cc0659bece917444eea8525501312c4..3773439d031a50b0dd4020d4933245afa18b3590 100644 (file)
@@ -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
 }