bcachefs: bch2_trans_node_drop()
authorKent Overstreet <kent.overstreet@linux.dev>
Wed, 25 Dec 2024 17:19:08 +0000 (12:19 -0500)
committerKent Overstreet <kent.overstreet@linux.dev>
Fri, 10 Jan 2025 04:38:42 +0000 (23:38 -0500)
Factor out a small common helper.

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

index 291eb5eb0203cb0a4f846474dc94840fa2eb5ba9..c291d495b85baddccbd24bcc8bbac0167965584e 100644 (file)
@@ -699,6 +699,19 @@ void bch2_trans_node_add(struct btree_trans *trans,
        bch2_trans_revalidate_updates_in_node(trans, b);
 }
 
+void bch2_trans_node_drop(struct btree_trans *trans,
+                         struct btree *b)
+{
+       struct btree_path *path;
+       unsigned i, level = b->c.level;
+
+       trans_for_each_path(trans, path, i)
+               if (path->l[level].b == b) {
+                       btree_node_unlock(trans, path, level);
+                       path->l[level].b = ERR_PTR(-BCH_ERR_no_btree_node_init);
+               }
+}
+
 /*
  * A btree node has been modified in such a way as to invalidate iterators - fix
  * them:
index e23608d2a26dd5856d08efa2bdffa29b7ade702e..b9538e6e6d65eeb8f5aa5c2aa259f6a1372b60f0 100644 (file)
@@ -372,6 +372,7 @@ static inline void bch2_btree_path_downgrade(struct btree_trans *trans,
 void bch2_trans_downgrade(struct btree_trans *);
 
 void bch2_trans_node_add(struct btree_trans *trans, struct btree_path *, struct btree *);
+void bch2_trans_node_drop(struct btree_trans *trans, struct btree *);
 void bch2_trans_node_reinit_iter(struct btree_trans *, struct btree *);
 
 int __must_check __bch2_btree_iter_traverse(struct btree_iter *iter);
index 76c8602601dd6e3d45d9a89e54fdff065e0bca7e..f4aeadbe53c1ad78161399c9421b050fc951e66b 100644 (file)
@@ -238,7 +238,6 @@ static void bch2_btree_node_free_inmem(struct btree_trans *trans,
                                       struct btree *b)
 {
        struct bch_fs *c = trans->c;
-       unsigned i, level = b->c.level;
 
        bch2_btree_node_lock_write_nofail(trans, path, &b->c);
 
@@ -249,13 +248,9 @@ static void bch2_btree_node_free_inmem(struct btree_trans *trans,
        mutex_unlock(&c->btree_cache.lock);
 
        six_unlock_write(&b->c.lock);
-       mark_btree_node_locked_noreset(path, level, BTREE_NODE_INTENT_LOCKED);
+       mark_btree_node_locked_noreset(path, b->c.level, BTREE_NODE_INTENT_LOCKED);
 
-       trans_for_each_path(trans, path, i)
-               if (path->l[level].b == b) {
-                       btree_node_unlock(trans, path, level);
-                       path->l[level].b = ERR_PTR(-BCH_ERR_no_btree_node_init);
-               }
+       bch2_trans_node_drop(trans, b);
 }
 
 static void bch2_btree_node_free_never_used(struct btree_update *as,
@@ -264,8 +259,6 @@ static void bch2_btree_node_free_never_used(struct btree_update *as,
 {
        struct bch_fs *c = as->c;
        struct prealloc_nodes *p = &as->prealloc_nodes[b->c.lock.readers != NULL];
-       struct btree_path *path;
-       unsigned i, level = b->c.level;
 
        BUG_ON(!list_empty(&b->write_blocked));
        BUG_ON(b->will_make_reachable != (1UL|(unsigned long) as));
@@ -287,11 +280,7 @@ static void bch2_btree_node_free_never_used(struct btree_update *as,
 
        six_unlock_intent(&b->c.lock);
 
-       trans_for_each_path(trans, path, i)
-               if (path->l[level].b == b) {
-                       btree_node_unlock(trans, path, level);
-                       path->l[level].b = ERR_PTR(-BCH_ERR_no_btree_node_init);
-               }
+       bch2_trans_node_drop(trans, b);
 }
 
 static struct btree *__bch2_btree_node_alloc(struct btree_trans *trans,