bcachefs: clear path->should_be_locked in bch2_btree_key_cache_drop()
authorKent Overstreet <kent.overstreet@linux.dev>
Thu, 22 Aug 2024 06:13:02 +0000 (02:13 -0400)
committerKent Overstreet <kent.overstreet@linux.dev>
Thu, 22 Aug 2024 07:12:57 +0000 (03:12 -0400)
bch2_btree_key_cache_drop() evicts the key cache entry - it's used when
we're doing an update that bypasses the key cache, because for cache
coherency reasons a key can't be in the key cache unless it also exists
in the btree - i.e. creates have to bypass the cache.

After evicting, the path no longer points to a key cache key, and
relock() will always fail if should_be_locked is true.

Prep for improving path->should_be_locked assertions

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

index 79954490627ccaa7416a27950482f1f8d5347a9f..9b3ec2a3b8cecfd31427c5ff17ac18ce82897746 100644 (file)
@@ -726,6 +726,7 @@ void bch2_btree_key_cache_drop(struct btree_trans *trans,
 
        mark_btree_node_locked(trans, path, 0, BTREE_NODE_UNLOCKED);
        btree_path_set_dirty(path, BTREE_ITER_NEED_TRAVERSE);
+       path->should_be_locked = false;
 }
 
 static unsigned long bch2_btree_key_cache_scan(struct shrinker *shrink,