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.c16
1 files changed, 10 insertions, 6 deletions
diff --git a/libbcachefs/btree_update_interior.c b/libbcachefs/btree_update_interior.c
index 350e2f9b..98e85627 100644
--- a/libbcachefs/btree_update_interior.c
+++ b/libbcachefs/btree_update_interior.c
@@ -1310,7 +1310,7 @@ static void btree_split(struct btree_update *as, struct btree *b,
btree_split_insert_keys(as, n1, iter, keys);
if (vstruct_blocks(n1->data, c->block_bits) > BTREE_SPLIT_THRESHOLD(c)) {
- trace_btree_node_split(c, b, b->nr.live_u64s);
+ trace_btree_split(c, b);
n2 = __btree_split_node(as, n1, iter);
@@ -1340,7 +1340,7 @@ static void btree_split(struct btree_update *as, struct btree *b,
bch2_btree_node_write(c, n3, &as->cl, SIX_LOCK_intent);
}
} else {
- trace_btree_node_compact(c, b, b->nr.live_u64s);
+ trace_btree_compact(c, b);
bch2_btree_build_aux_trees(n1);
six_unlock_write(&n1->lock);
@@ -1882,12 +1882,13 @@ retry:
if (new_hash) {
mutex_lock(&c->btree_cache_lock);
+ bch2_btree_node_hash_remove(c, new_hash);
+
bch2_btree_node_hash_remove(c, b);
bkey_copy(&b->key, &new_key->k_i);
- __bch2_btree_node_hash_insert(c, b);
-
- bch2_btree_node_hash_remove(c, new_hash);
+ ret = __bch2_btree_node_hash_insert(c, b);
+ BUG_ON(ret);
mutex_unlock(&c->btree_cache_lock);
} else {
bkey_copy(&b->key, &new_key->k_i);
@@ -1959,7 +1960,10 @@ int bch2_btree_root_alloc(struct bch_fs *c, enum btree_id id,
while (1) {
/* XXX haven't calculated capacity yet :/ */
- as = bch2_btree_update_start(c, id, 1, 0, &cl);
+ as = bch2_btree_update_start(c, id, 1,
+ BTREE_INSERT_USE_RESERVE|
+ BTREE_INSERT_USE_ALLOC_RESERVE,
+ &cl);
if (!IS_ERR(as))
break;