]> git.sesse.net Git - bcachefs-tools-debian/blobdiff - libbcachefs/btree_update_interior.c
Update bcachefs sources to c887148ebf99 thread_with_file: add f_ops.flush
[bcachefs-tools-debian] / libbcachefs / btree_update_interior.c
index 44f9dfa28a09d89984150b19d3831077a18485f1..70da4fa25c01e21bb7ca27ddf5048a1762fc8c4c 100644 (file)
@@ -159,7 +159,7 @@ static bool bch2_btree_node_format_fits(struct bch_fs *c, struct btree *b,
 {
        size_t u64s = btree_node_u64s_with_format(nr, &b->format, new_f);
 
-       return __vstruct_bytes(struct btree_node, u64s) < btree_bytes(c);
+       return __vstruct_bytes(struct btree_node, u64s) < btree_buf_bytes(b);
 }
 
 /* Btree node freeing/allocation: */
@@ -280,7 +280,8 @@ retry:
                                      writepoint_ptr(&c->btree_write_point),
                                      &devs_have,
                                      res->nr_replicas,
-                                     c->opts.metadata_replicas_required,
+                                     min(res->nr_replicas,
+                                         c->opts.metadata_replicas_required),
                                      watermark, 0, cl, &wp);
        if (unlikely(ret))
                return ERR_PTR(ret);
@@ -516,7 +517,7 @@ static void bch2_btree_update_free(struct btree_update *as, struct btree_trans *
        bch2_disk_reservation_put(c, &as->disk_res);
        bch2_btree_reserve_put(as, trans);
 
-       bch2_time_stats_update(&c->times[BCH_TIME_btree_interior_update_total],
+       time_stats_update(&c->times[BCH_TIME_btree_interior_update_total],
                               as->start_time);
 
        mutex_lock(&c->btree_interior_update_lock);
@@ -1038,7 +1039,7 @@ static void bch2_btree_update_done(struct btree_update *as, struct btree_trans *
        continue_at(&as->cl, btree_update_set_nodes_written,
                    as->c->btree_interior_update_worker);
 
-       bch2_time_stats_update(&c->times[BCH_TIME_btree_interior_update_foreground],
+       time_stats_update(&c->times[BCH_TIME_btree_interior_update_foreground],
                               start_time);
 }
 
@@ -1097,7 +1098,7 @@ bch2_btree_update_start(struct btree_trans *trans, struct btree_path *path,
                 * Always check for space for two keys, even if we won't have to
                 * split at prior level - it might have been a merge instead:
                 */
-               if (bch2_btree_node_insert_fits(c, path->l[update_level].b,
+               if (bch2_btree_node_insert_fits(path->l[update_level].b,
                                                BKEY_BTREE_PTR_U64s_MAX * 2))
                        break;
 
@@ -1401,7 +1402,7 @@ static void __btree_split_node(struct btree_update *as,
 
                unsigned u64s = nr_keys[i].nr_keys * n[i]->data->format.key_u64s +
                        nr_keys[i].val_u64s;
-               if (__vstruct_bytes(struct btree_node, u64s) > btree_bytes(as->c))
+               if (__vstruct_bytes(struct btree_node, u64s) > btree_buf_bytes(b))
                        n[i]->data->format = b->format;
 
                btree_node_set_format(n[i], n[i]->data->format);
@@ -1629,7 +1630,7 @@ out:
 
        bch2_trans_verify_locks(trans);
 
-       bch2_time_stats_update(&c->times[n2
+       time_stats_update(&c->times[n2
                               ? BCH_TIME_btree_node_split
                               : BCH_TIME_btree_node_compact],
                               start_time);
@@ -1703,7 +1704,7 @@ static int bch2_btree_insert_node(struct btree_update *as, struct btree_trans *t
 
        bch2_btree_node_prep_for_write(trans, path, b);
 
-       if (!bch2_btree_node_insert_fits(c, b, bch2_keylist_u64s(keys))) {
+       if (!bch2_btree_node_insert_fits(b, bch2_keylist_u64s(keys))) {
                bch2_btree_node_unlock_write(trans, path, b);
                goto split;
        }
@@ -1844,8 +1845,7 @@ int __bch2_foreground_maybe_merge(struct btree_trans *trans,
                        __func__, buf1.buf, buf2.buf);
                printbuf_exit(&buf1);
                printbuf_exit(&buf2);
-               bch2_topology_error(c);
-               ret = -EIO;
+               ret = bch2_topology_error(c);
                goto err;
        }
 
@@ -1935,7 +1935,7 @@ int __bch2_foreground_maybe_merge(struct btree_trans *trans,
 
        bch2_btree_update_done(as, trans);
 
-       bch2_time_stats_update(&c->times[BCH_TIME_btree_node_merge], start_time);
+       time_stats_update(&c->times[BCH_TIME_btree_node_merge], start_time);
 out:
 err:
        if (new_path)
@@ -2484,7 +2484,7 @@ void bch2_fs_btree_interior_update_init_early(struct bch_fs *c)
 int bch2_fs_btree_interior_update_init(struct bch_fs *c)
 {
        c->btree_interior_update_worker =
-               alloc_workqueue("btree_update", WQ_UNBOUND|WQ_MEM_RECLAIM, 1);
+               alloc_workqueue("btree_update", WQ_UNBOUND|WQ_MEM_RECLAIM, 8);
        if (!c->btree_interior_update_worker)
                return -BCH_ERR_ENOMEM_btree_interior_update_worker_init;