diff options
author | 2023-02-13 18:21:40 -0500 | |
---|---|---|
committer | 2023-10-22 17:09:53 -0400 | |
commit | 70f0b0fd7e9b85a14fdb8b3f229572b7439d8915 (patch) | |
tree | 06c545c4a5f94990b2c778c8eee5ef3de07c7356 /fs/bcachefs | |
parent | bcachefs: New backtrace utility code (diff) | |
download | linux-70f0b0fd7e9b85a14fdb8b3f229572b7439d8915.tar.gz linux-70f0b0fd7e9b85a14fdb8b3f229572b7439d8915.tar.bz2 linux-70f0b0fd7e9b85a14fdb8b3f229572b7439d8915.zip |
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>
Diffstat (limited to 'fs/bcachefs')
-rw-r--r-- | fs/bcachefs/btree_update_leaf.c | 5 |
1 files changed, 3 insertions, 2 deletions
diff --git a/fs/bcachefs/btree_update_leaf.c b/fs/bcachefs/btree_update_leaf.c index cefe62d28cc0..3773439d031a 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 } |