summaryrefslogtreecommitdiff
path: root/libbcachefs/btree_update_interior.c
diff options
context:
space:
mode:
Diffstat (limited to 'libbcachefs/btree_update_interior.c')
-rw-r--r--libbcachefs/btree_update_interior.c21
1 files changed, 11 insertions, 10 deletions
diff --git a/libbcachefs/btree_update_interior.c b/libbcachefs/btree_update_interior.c
index d9ac09fa..8e3d3db2 100644
--- a/libbcachefs/btree_update_interior.c
+++ b/libbcachefs/btree_update_interior.c
@@ -217,7 +217,7 @@ static void __btree_node_free(struct btree_trans *trans, struct btree *b)
{
struct bch_fs *c = trans->c;
- trace_and_count(c, btree_node_free, trans, b);
+ trace_btree_node(c, b, btree_node_free);
BUG_ON(btree_node_write_blocked(b));
BUG_ON(btree_node_dirty(b));
@@ -406,7 +406,7 @@ static struct btree *bch2_btree_node_alloc(struct btree_update *as,
ret = bch2_btree_node_hash_insert(&c->btree_cache, b, level, as->btree_id);
BUG_ON(ret);
- trace_and_count(c, btree_node_alloc, trans, b);
+ trace_btree_node(c, b, btree_node_alloc);
bch2_increment_clock(c, btree_sectors(c), WRITE);
return b;
}
@@ -1278,10 +1278,11 @@ bch2_btree_update_start(struct btree_trans *trans, struct btree_path *path,
do {
ret = bch2_btree_reserve_get(trans, as, nr_nodes, target, flags, &cl);
-
+ if (!bch2_err_matches(ret, BCH_ERR_operation_blocked))
+ break;
bch2_trans_unlock(trans);
bch2_wait_on_allocator(c, &cl);
- } while (bch2_err_matches(ret, BCH_ERR_operation_blocked));
+ } while (1);
}
if (ret) {
@@ -1330,7 +1331,7 @@ static int bch2_btree_set_root(struct btree_update *as,
{
struct bch_fs *c = as->c;
- trace_and_count(c, btree_node_set_root, trans, b);
+ trace_btree_node(c, b, btree_node_set_root);
struct btree *old = btree_node_root(c, b);
@@ -1640,7 +1641,7 @@ static int btree_split(struct btree_update *as, struct btree_trans *trans,
if (b->nr.live_u64s > BTREE_SPLIT_THRESHOLD(c)) {
struct btree *n[2];
- trace_and_count(c, btree_node_split, trans, b);
+ trace_btree_node(c, b, btree_node_split);
n[0] = n1 = bch2_btree_node_alloc(as, trans, b->c.level);
n[1] = n2 = bch2_btree_node_alloc(as, trans, b->c.level);
@@ -1702,7 +1703,7 @@ static int btree_split(struct btree_update *as, struct btree_trans *trans,
goto err;
}
} else {
- trace_and_count(c, btree_node_compact, trans, b);
+ trace_btree_node(c, b, btree_node_compact);
n1 = bch2_btree_node_alloc_replacement(as, trans, b);
@@ -2118,7 +2119,7 @@ int __bch2_foreground_maybe_merge(struct btree_trans *trans,
as->node_start = prev->data->min_key;
as->node_end = next->data->max_key;
- trace_and_count(c, btree_node_merge, trans, b);
+ trace_btree_node(c, b, btree_node_merge);
n = bch2_btree_node_alloc(as, trans, b->c.level);
@@ -2250,8 +2251,6 @@ int bch2_btree_node_rewrite(struct btree_trans *trans,
mark_btree_node_locked(trans, trans->paths + new_path, n->c.level, BTREE_NODE_INTENT_LOCKED);
bch2_btree_path_level_init(trans, trans->paths + new_path, n);
- trace_and_count(c, btree_node_rewrite, trans, b);
-
if (parent) {
bch2_keylist_add(&as->parent_keys, &n->key);
ret = bch2_btree_insert_node(as, trans, iter->path, parent, &as->parent_keys);
@@ -2262,6 +2261,8 @@ int bch2_btree_node_rewrite(struct btree_trans *trans,
if (ret)
goto err;
+ trace_btree_node(c, b, btree_node_rewrite);
+
bch2_btree_interior_update_will_free_node(as, b);
bch2_btree_update_get_open_buckets(as, n);