diff options
Diffstat (limited to 'libbcachefs/btree_update_interior.c')
-rw-r--r-- | libbcachefs/btree_update_interior.c | 21 |
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); |