projects
/
linux.git
/ commitdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
| commitdiff |
tree
raw
|
patch
| inline |
side by side
(parent:
2aeed87
)
bcachefs: fix race in bch2_btree_node_evict()
author
Kent Overstreet
<kent.overstreet@linux.dev>
Fri, 12 Apr 2024 03:58:36 +0000
(23:58 -0400)
committer
Kent Overstreet
<kent.overstreet@linux.dev>
Sun, 14 Apr 2024 02:48:16 +0000
(22:48 -0400)
Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
fs/bcachefs/btree_cache.c
patch
|
blob
|
history
diff --git
a/fs/bcachefs/btree_cache.c
b/fs/bcachefs/btree_cache.c
index 84474324dba9b508141f0e886bafbd8a95d47537..c7f156320a35dc194d3e3d1c28fb6ef40fc6831c 100644
(file)
--- a/
fs/bcachefs/btree_cache.c
+++ b/
fs/bcachefs/btree_cache.c
@@
-1148,6
+1148,8
@@
wait_on_io:
btree_node_lock_nopath_nofail(trans, &b->c, SIX_LOCK_intent);
btree_node_lock_nopath_nofail(trans, &b->c, SIX_LOCK_write);
+ if (unlikely(b->hash_val != btree_ptr_hash_val(k)))
+ goto out;
if (btree_node_dirty(b)) {
__bch2_btree_node_write(c, b, BTREE_WRITE_cache_reclaim);
@@
-1162,7
+1164,7
@@
wait_on_io:
btree_node_data_free(c, b);
bch2_btree_node_hash_remove(bc, b);
mutex_unlock(&bc->lock);
-
+out:
six_unlock_write(&b->c.lock);
six_unlock_intent(&b->c.lock);
}