bcachefs: set_btree_iter_dontneed also clears should_be_locked
authorKent Overstreet <kent.overstreet@linux.dev>
Sat, 13 Apr 2024 22:02:15 +0000 (18:02 -0400)
committerKent Overstreet <kent.overstreet@linux.dev>
Mon, 15 Apr 2024 17:31:15 +0000 (13:31 -0400)
This is part of a larger series cleaning up the semantics of
should_be_locked and adding assertions around it; if we don't need an
iterator/path anymore, it clearly doesn't need to be locked.

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

index 1d58d447b386cdf74ecce2609f8aa23851ae4057..1c70836dd7cce4988ef8cf166ee0797fd8f8269e 100644 (file)
@@ -498,8 +498,13 @@ static inline void set_btree_iter_dontneed(struct btree_iter *iter)
 {
        struct btree_trans *trans = iter->trans;
 
-       if (!trans->restarted)
-               btree_iter_path(trans, iter)->preserve = false;
+       if (!iter->path || trans->restarted)
+               return;
+
+       struct btree_path *path = btree_iter_path(trans, iter);
+       path->preserve          = false;
+       if (path->ref == 1)
+               path->should_be_locked  = false;
 }
 
 void *__bch2_trans_kmalloc(struct btree_trans *, size_t);