bcachefs: bch2_trans_unlock_noassert()
authorKent Overstreet <kent.overstreet@linux.dev>
Sun, 18 Jun 2023 17:25:09 +0000 (13:25 -0400)
committerKent Overstreet <kent.overstreet@linux.dev>
Sun, 22 Oct 2023 21:10:04 +0000 (17:10 -0400)
This fixes a spurious assert in the btree node read path.

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

index 681a47b70a65bd0b34b37456c16e2dda45adccef..435e688889187acc67ac3eb1466e81d41674ba82 100644 (file)
@@ -744,7 +744,7 @@ static noinline struct btree *bch2_btree_node_fill(struct btree_trans *trans,
 
        /* Unlock before doing IO: */
        if (trans && sync)
-               bch2_trans_unlock(trans);
+               bch2_trans_unlock_noassert(trans);
 
        bch2_btree_node_read(c, b, sync);
 
index 23a6d63223afd5df665012a0ed486cf676c8956b..dc3aa70a0380a3ff41e2dad50e68c7d634fe9abe 100644 (file)
@@ -715,6 +715,14 @@ int bch2_trans_relock_notrace(struct btree_trans *trans)
        return 0;
 }
 
+void bch2_trans_unlock_noassert(struct btree_trans *trans)
+{
+       struct btree_path *path;
+
+       trans_for_each_path(trans, path)
+               __bch2_btree_path_unlock(trans, path);
+}
+
 void bch2_trans_unlock(struct btree_trans *trans)
 {
        struct btree_path *path;
index d3837c25f110a1ef7110306df986746b0c4898fc..3b537e451d2c165f9e4fe86ef41e2811e5dd4925 100644 (file)
@@ -21,6 +21,8 @@ void bch2_assert_btree_nodes_not_locked(void);
 static inline void bch2_assert_btree_nodes_not_locked(void) {}
 #endif
 
+void bch2_trans_unlock_noassert(struct btree_trans *);
+
 static inline bool is_btree_node(struct btree_path *path, unsigned l)
 {
        return l < BTREE_MAX_DEPTH && !IS_ERR_OR_NULL(path->l[l].b);