bcachefs: bch2_btree_root_alloc_fake_trans()
authorKent Overstreet <kent.overstreet@linux.dev>
Sun, 14 Apr 2024 22:42:42 +0000 (18:42 -0400)
committerKent Overstreet <kent.overstreet@linux.dev>
Wed, 8 May 2024 21:29:19 +0000 (17:29 -0400)
We're starting to be more strict about transaction locked state, and
multiple transactions in a task.

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

index 4c5bd256d2511b219fccccd72c0353f56362e8f8..7549e806a6f48df28189ae6a664dbc95f15cd374 100644 (file)
@@ -540,9 +540,9 @@ reconstruct_root:
                        if (!bch2_btree_has_scanned_nodes(c, i)) {
                                mustfix_fsck_err(c, btree_root_unreadable_and_scan_found_nothing,
                                                 "no nodes found for btree %s, continue?", bch2_btree_id_str(i));
-                               bch2_btree_root_alloc_fake(c, i, 0);
+                               bch2_btree_root_alloc_fake_trans(trans, i, 0);
                        } else {
-                               bch2_btree_root_alloc_fake(c, i, 1);
+                               bch2_btree_root_alloc_fake_trans(trans, i, 1);
                                bch2_shoot_down_journal_keys(c, i, 1, BTREE_MAX_DEPTH, POS_MIN, SPOS_MAX);
                                ret = bch2_get_scanned_nodes(c, i, 0, POS_MIN, SPOS_MAX);
                                if (ret)
@@ -570,7 +570,7 @@ reconstruct_root:
                                goto reconstruct_root;
 
                        bch_err(c, "empty btree root %s", bch2_btree_id_str(i));
-                       bch2_btree_root_alloc_fake(c, i, 0);
+                       bch2_btree_root_alloc_fake_trans(trans, i, 0);
                        r->alive = false;
                        ret = 0;
                }
index 35f80c97b9737631848002dad42b25b1969db8ac..a87608dd74c6d08756090664013ad6d8fcffa4f6 100644 (file)
@@ -2513,7 +2513,7 @@ void bch2_btree_set_root_for_read(struct bch_fs *c, struct btree *b)
        bch2_btree_set_root_inmem(c, b);
 }
 
-static int __bch2_btree_root_alloc_fake(struct btree_trans *trans, enum btree_id id, unsigned level)
+int bch2_btree_root_alloc_fake_trans(struct btree_trans *trans, enum btree_id id, unsigned level)
 {
        struct bch_fs *c = trans->c;
        struct closure cl;
@@ -2561,7 +2561,7 @@ static int __bch2_btree_root_alloc_fake(struct btree_trans *trans, enum btree_id
 
 void bch2_btree_root_alloc_fake(struct bch_fs *c, enum btree_id id, unsigned level)
 {
-       bch2_trans_run(c, __bch2_btree_root_alloc_fake(trans, id, level));
+       bch2_trans_run(c, bch2_btree_root_alloc_fake_trans(trans, id, level));
 }
 
 static void bch2_btree_update_to_text(struct printbuf *out, struct btree_update *as)
index b2f7f8110c50d5d55f1425ab9caec17f4426cb28..b5b76ce01cfcb66ec5e761cb93b45f0f83c3da9c 100644 (file)
@@ -175,6 +175,8 @@ int bch2_btree_node_update_key_get_iter(struct btree_trans *, struct btree *,
                                        struct bkey_i *, unsigned, bool);
 
 void bch2_btree_set_root_for_read(struct bch_fs *, struct btree *);
+
+int bch2_btree_root_alloc_fake_trans(struct btree_trans *, enum btree_id, unsigned);
 void bch2_btree_root_alloc_fake(struct bch_fs *, enum btree_id, unsigned);
 
 static inline unsigned btree_update_reserve_required(struct bch_fs *c,