Lines Matching full:as

253 static void bch2_btree_node_free_never_used(struct btree_update *as,  in bch2_btree_node_free_never_used()  argument
257 struct bch_fs *c = as->c; in bch2_btree_node_free_never_used()
258 struct prealloc_nodes *p = &as->prealloc_nodes[b->c.lock.readers != NULL]; in bch2_btree_node_free_never_used()
261 BUG_ON(b->will_make_reachable != (1UL|(unsigned long) as)); in bch2_btree_node_free_never_used()
264 closure_put(&as->cl); in bch2_btree_node_free_never_used()
361 static struct btree *bch2_btree_node_alloc(struct btree_update *as, in bch2_btree_node_alloc() argument
365 struct bch_fs *c = as->c; in bch2_btree_node_alloc()
367 struct prealloc_nodes *p = &as->prealloc_nodes[!!level]; in bch2_btree_node_alloc()
384 b->c.btree_id = as->btree_id; in bch2_btree_node_alloc()
391 SET_BTREE_NODE_ID(b->data, as->btree_id); in bch2_btree_node_alloc()
406 ret = bch2_btree_node_hash_insert(&c->btree_cache, b, level, as->btree_id); in bch2_btree_node_alloc()
427 static struct btree *bch2_btree_node_alloc_replacement(struct btree_update *as, in bch2_btree_node_alloc_replacement() argument
431 struct btree *n = bch2_btree_node_alloc(as, trans, b->c.level); in bch2_btree_node_alloc_replacement()
438 if (!bch2_btree_node_format_fits(as->c, b, b->nr, &format)) in bch2_btree_node_alloc_replacement()
449 bch2_btree_sort_into(as->c, n, b); in bch2_btree_node_alloc_replacement()
455 static struct btree *__btree_root_alloc(struct btree_update *as, in __btree_root_alloc() argument
458 struct btree *b = bch2_btree_node_alloc(as, trans, level); in __btree_root_alloc()
470 static void bch2_btree_reserve_put(struct btree_update *as, struct btree_trans *trans) in bch2_btree_reserve_put() argument
472 struct bch_fs *c = as->c; in bch2_btree_reserve_put()
475 for (p = as->prealloc_nodes; in bch2_btree_reserve_put()
476 p < as->prealloc_nodes + ARRAY_SIZE(as->prealloc_nodes); in bch2_btree_reserve_put()
506 struct btree_update *as, in bch2_btree_reserve_get() argument
526 struct prealloc_nodes *p = as->prealloc_nodes + interior; in bch2_btree_reserve_get()
529 b = __bch2_btree_node_alloc(trans, &as->disk_res, cl, in bch2_btree_reserve_get()
546 static void bch2_btree_update_free(struct btree_update *as, struct btree_trans *trans) in bch2_btree_update_free() argument
548 struct bch_fs *c = as->c; in bch2_btree_update_free()
550 if (as->took_gc_lock) in bch2_btree_update_free()
552 as->took_gc_lock = false; in bch2_btree_update_free()
554 bch2_journal_pin_drop(&c->journal, &as->journal); in bch2_btree_update_free()
555 bch2_journal_pin_flush(&c->journal, &as->journal); in bch2_btree_update_free()
556 bch2_disk_reservation_put(c, &as->disk_res); in bch2_btree_update_free()
557 bch2_btree_reserve_put(as, trans); in bch2_btree_update_free()
560 as->start_time); in bch2_btree_update_free()
563 list_del(&as->unwritten_list); in bch2_btree_update_free()
564 list_del(&as->list); in bch2_btree_update_free()
566 closure_debug_destroy(&as->cl); in bch2_btree_update_free()
567 mempool_free(as, &c->btree_interior_update_pool); in bch2_btree_update_free()
578 static void btree_update_add_key(struct btree_update *as, in btree_update_add_key() argument
584 ARRAY_SIZE(as->_old_keys)); in btree_update_add_key()
592 static bool btree_update_new_nodes_marked_sb(struct btree_update *as) in btree_update_new_nodes_marked_sb() argument
594 for_each_keylist_key(&as->new_keys, k) in btree_update_new_nodes_marked_sb()
595 if (!bch2_dev_btree_bitmap_marked(as->c, bkey_i_to_s_c(k))) in btree_update_new_nodes_marked_sb()
600 static void btree_update_new_nodes_mark_sb(struct btree_update *as) in btree_update_new_nodes_mark_sb() argument
602 struct bch_fs *c = as->c; in btree_update_new_nodes_mark_sb()
605 for_each_keylist_key(&as->new_keys, k) in btree_update_new_nodes_mark_sb()
617 struct btree_update *as) in btree_update_nodes_written_trans() argument
619 struct jset_entry *e = bch2_trans_jset_entry_alloc(trans, as->journal_u64s); in btree_update_nodes_written_trans()
624 memcpy(e, as->journal_entries, as->journal_u64s * sizeof(u64)); in btree_update_nodes_written_trans()
626 trans->journal_pin = &as->journal; in btree_update_nodes_written_trans()
628 for_each_keylist_key(&as->old_keys, k) { in btree_update_nodes_written_trans()
631 ret = bch2_key_trigger_old(trans, as->btree_id, level, bkey_i_to_s_c(k), in btree_update_nodes_written_trans()
637 for_each_keylist_key(&as->new_keys, k) { in btree_update_nodes_written_trans()
640 ret = bch2_key_trigger_new(trans, as->btree_id, level, bkey_i_to_s(k), in btree_update_nodes_written_trans()
657 static void btree_update_nodes_written(struct btree_update *as) in btree_update_nodes_written() argument
659 struct bch_fs *c = as->c; in btree_update_nodes_written()
669 * node here, but it won't have been marked as allocated and we'll see in btree_update_nodes_written()
677 if (!btree_update_new_nodes_marked_sb(as)) in btree_update_nodes_written()
678 btree_update_new_nodes_mark_sb(as); in btree_update_nodes_written()
684 for (i = 0; i < as->nr_old_nodes; i++) { in btree_update_nodes_written()
685 b = as->old_nodes[i]; in btree_update_nodes_written()
687 if (btree_node_seq_matches(b, as->old_nodes_seq[i])) in btree_update_nodes_written()
703 * which may require allocations as well. in btree_update_nodes_written()
705 ret = commit_do(trans, &as->disk_res, &journal_seq, in btree_update_nodes_written()
710 btree_update_nodes_written_trans(trans, as)); in btree_update_nodes_written()
730 * to free as->b and calling btree_update_reparent() on us - we'll in btree_update_nodes_written()
733 b = READ_ONCE(as->b); in btree_update_nodes_written()
748 as->btree_id, b->c.level, b->key.k.p); in btree_update_nodes_written()
759 list_del(&as->write_blocked_list); in btree_update_nodes_written()
767 if (as->b == b) { in btree_update_nodes_written()
799 bch2_journal_pin_drop(&c->journal, &as->journal); in btree_update_nodes_written()
802 for (i = 0; i < as->nr_new_nodes; i++) { in btree_update_nodes_written()
803 b = as->new_nodes[i]; in btree_update_nodes_written()
805 BUG_ON(b->will_make_reachable != (unsigned long) as); in btree_update_nodes_written()
811 for (i = 0; i < as->nr_new_nodes; i++) { in btree_update_nodes_written()
812 b = as->new_nodes[i]; in btree_update_nodes_written()
819 for (i = 0; i < as->nr_open_buckets; i++) in btree_update_nodes_written()
820 bch2_open_bucket_put(c, c->open_buckets + as->open_buckets[i]); in btree_update_nodes_written()
822 bch2_btree_update_free(as, trans); in btree_update_nodes_written()
830 struct btree_update *as; in btree_interior_update_work() local
834 as = list_first_entry_or_null(&c->btree_interior_updates_unwritten, in btree_interior_update_work()
836 if (as && !as->nodes_written) in btree_interior_update_work()
837 as = NULL; in btree_interior_update_work()
840 if (!as) in btree_interior_update_work()
843 btree_update_nodes_written(as); in btree_interior_update_work()
849 closure_type(as, struct btree_update, cl); in CLOSURE_CALLBACK()
850 struct bch_fs *c = as->c; in CLOSURE_CALLBACK()
853 as->nodes_written = true; in CLOSURE_CALLBACK()
861 * block @b from being written until @as completes
863 static void btree_update_updated_node(struct btree_update *as, struct btree *b) in btree_update_updated_node() argument
865 struct bch_fs *c = as->c; in btree_update_updated_node()
867 BUG_ON(as->mode != BTREE_UPDATE_none); in btree_update_updated_node()
868 BUG_ON(as->update_level_end < b->c.level); in btree_update_updated_node()
873 list_add_tail(&as->unwritten_list, &c->btree_interior_updates_unwritten); in btree_update_updated_node()
875 as->mode = BTREE_UPDATE_node; in btree_update_updated_node()
876 as->b = b; in btree_update_updated_node()
877 as->update_level_end = b->c.level; in btree_update_updated_node()
880 list_add(&as->write_blocked_list, &b->write_blocked); in btree_update_updated_node()
891 static void btree_update_reparent(struct btree_update *as, in btree_update_reparent() argument
894 struct bch_fs *c = as->c; in btree_update_reparent()
901 bch2_journal_pin_copy(&c->journal, &as->journal, &child->journal, in btree_update_reparent()
905 static void btree_update_updated_root(struct btree_update *as, struct btree *b) in btree_update_updated_root() argument
908 struct bch_fs *c = as->c; in btree_update_updated_root()
910 BUG_ON(as->mode != BTREE_UPDATE_none); in btree_update_updated_root()
912 BUG_ON(as->journal_u64s + jset_u64s(insert->k.u64s) > in btree_update_updated_root()
913 ARRAY_SIZE(as->journal_entries)); in btree_update_updated_root()
915 as->journal_u64s += in btree_update_updated_root()
916 journal_entry_set((void *) &as->journal_entries[as->journal_u64s], in btree_update_updated_root()
922 list_add_tail(&as->unwritten_list, &c->btree_interior_updates_unwritten); in btree_update_updated_root()
924 as->mode = BTREE_UPDATE_root; in btree_update_updated_root()
931 * This causes @as to wait on @b to be written, before it gets to
937 * And it adds @b to the list of @as's new nodes, so that we can update sector
940 static void bch2_btree_update_add_new_node(struct btree_update *as, struct btree *b) in bch2_btree_update_add_new_node() argument
942 struct bch_fs *c = as->c; in bch2_btree_update_add_new_node()
944 closure_get(&as->cl); in bch2_btree_update_add_new_node()
947 BUG_ON(as->nr_new_nodes >= ARRAY_SIZE(as->new_nodes)); in bch2_btree_update_add_new_node()
950 as->new_nodes[as->nr_new_nodes++] = b; in bch2_btree_update_add_new_node()
951 b->will_make_reachable = 1UL|(unsigned long) as; in bch2_btree_update_add_new_node()
956 btree_update_add_key(as, &as->new_keys, b); in bch2_btree_update_add_new_node()
972 struct btree_update *as; in btree_update_drop_new_node() local
978 * When b->will_make_reachable != 0, it owns a ref on as->cl that's in btree_update_drop_new_node()
984 as = (struct btree_update *) (v & ~1UL); in btree_update_drop_new_node()
986 if (!as) { in btree_update_drop_new_node()
991 for (i = 0; i < as->nr_new_nodes; i++) in btree_update_drop_new_node()
992 if (as->new_nodes[i] == b) in btree_update_drop_new_node()
997 array_remove_item(as->new_nodes, as->nr_new_nodes, i); in btree_update_drop_new_node()
1001 closure_put(&as->cl); in btree_update_drop_new_node()
1004 static void bch2_btree_update_get_open_buckets(struct btree_update *as, struct btree *b) in bch2_btree_update_get_open_buckets() argument
1007 as->open_buckets[as->nr_open_buckets++] = in bch2_btree_update_get_open_buckets()
1022 static void bch2_btree_interior_update_will_free_node(struct btree_update *as, in bch2_btree_interior_update_will_free_node() argument
1025 struct bch_fs *c = as->c; in bch2_btree_interior_update_will_free_node()
1046 btree_update_reparent(as, p); in bch2_btree_interior_update_will_free_node()
1068 bch2_journal_pin_copy(&c->journal, &as->journal, &w->journal, in bch2_btree_interior_update_will_free_node()
1073 bch2_journal_pin_copy(&c->journal, &as->journal, &w->journal, in bch2_btree_interior_update_will_free_node()
1090 btree_update_add_key(as, &as->old_keys, b); in bch2_btree_interior_update_will_free_node()
1092 as->old_nodes[as->nr_old_nodes] = b; in bch2_btree_interior_update_will_free_node()
1093 as->old_nodes_seq[as->nr_old_nodes] = b->data->keys.seq; in bch2_btree_interior_update_will_free_node()
1094 as->nr_old_nodes++; in bch2_btree_interior_update_will_free_node()
1097 static void bch2_btree_update_done(struct btree_update *as, struct btree_trans *trans) in bch2_btree_update_done() argument
1099 struct bch_fs *c = as->c; in bch2_btree_update_done()
1100 u64 start_time = as->start_time; in bch2_btree_update_done()
1102 BUG_ON(as->mode == BTREE_UPDATE_none); in bch2_btree_update_done()
1104 if (as->took_gc_lock) in bch2_btree_update_done()
1105 up_read(&as->c->gc_lock); in bch2_btree_update_done()
1106 as->took_gc_lock = false; in bch2_btree_update_done()
1108 bch2_btree_reserve_put(as, trans); in bch2_btree_update_done()
1110 continue_at(&as->cl, btree_update_set_nodes_written, in bch2_btree_update_done()
1111 as->c->btree_interior_update_worker); in bch2_btree_update_done()
1122 struct btree_update *as; in bch2_btree_update_start() local
1187 as = mempool_alloc(&c->btree_interior_update_pool, GFP_NOFS); in bch2_btree_update_start()
1188 memset(as, 0, sizeof(*as)); in bch2_btree_update_start()
1189 closure_init(&as->cl, NULL); in bch2_btree_update_start()
1190 as->c = c; in bch2_btree_update_start()
1191 as->start_time = start_time; in bch2_btree_update_start()
1192 as->ip_started = _RET_IP_; in bch2_btree_update_start()
1193 as->mode = BTREE_UPDATE_none; in bch2_btree_update_start()
1194 as->flags = flags; in bch2_btree_update_start()
1195 as->took_gc_lock = true; in bch2_btree_update_start()
1196 as->btree_id = path->btree_id; in bch2_btree_update_start()
1197 as->update_level_start = level_start; in bch2_btree_update_start()
1198 as->update_level_end = level_end; in bch2_btree_update_start()
1199 INIT_LIST_HEAD(&as->list); in bch2_btree_update_start()
1200 INIT_LIST_HEAD(&as->unwritten_list); in bch2_btree_update_start()
1201 INIT_LIST_HEAD(&as->write_blocked_list); in bch2_btree_update_start()
1202 bch2_keylist_init(&as->old_keys, as->_old_keys); in bch2_btree_update_start()
1203 bch2_keylist_init(&as->new_keys, as->_new_keys); in bch2_btree_update_start()
1204 bch2_keylist_init(&as->parent_keys, as->inline_keys); in bch2_btree_update_start()
1207 list_add_tail(&as->list, &c->btree_interior_update_list); in bch2_btree_update_start()
1222 ret = bch2_disk_reservation_get(c, &as->disk_res, in bch2_btree_update_start()
1229 ret = bch2_btree_reserve_get(trans, as, nr_nodes, flags, NULL); in bch2_btree_update_start()
1248 ret = bch2_btree_reserve_get(trans, as, nr_nodes, flags, &cl); in bch2_btree_update_start()
1266 return as; in bch2_btree_update_start()
1268 bch2_btree_update_free(as, trans); in bch2_btree_update_start()
1293 static int bch2_btree_set_root(struct btree_update *as, in bch2_btree_set_root() argument
1299 struct bch_fs *c = as->c; in bch2_btree_set_root()
1319 btree_update_updated_root(as, b); in bch2_btree_set_root()
1334 static void bch2_insert_fixup_btree_ptr(struct btree_update *as, in bch2_insert_fixup_btree_ptr() argument
1341 struct bch_fs *c = as->c; in bch2_insert_fixup_btree_ptr()
1364 BUG_ON(as->journal_u64s + jset_u64s(insert->k.u64s) > in bch2_insert_fixup_btree_ptr()
1365 ARRAY_SIZE(as->journal_entries)); in bch2_insert_fixup_btree_ptr()
1367 as->journal_u64s += in bch2_insert_fixup_btree_ptr()
1368 journal_entry_set((void *) &as->journal_entries[as->journal_u64s], in bch2_insert_fixup_btree_ptr()
1393 bch2_btree_insert_keys_interior(struct btree_update *as, in bch2_btree_insert_keys_interior() argument
1412 bch2_insert_fixup_btree_ptr(as, trans, path, b, &node_iter, insert); in bch2_btree_insert_keys_interior()
1425 bch2_fs_fatal_error(as->c, "%ps -> %s(): check_topology error %s: inserted keys\n%s", in bch2_btree_insert_keys_interior()
1449 static void __btree_split_node(struct btree_update *as, in __btree_split_node() argument
1567 static int btree_split_insert_keys(struct btree_update *as, in btree_split_insert_keys() argument
1581 int ret = bch2_btree_insert_keys_interior(as, trans, path, b, node_iter, keys); in btree_split_insert_keys()
1589 static int btree_split(struct btree_update *as, struct btree_trans *trans, in btree_split() argument
1593 struct bch_fs *c = as->c; in btree_split()
1613 n[0] = n1 = bch2_btree_node_alloc(as, trans, b->c.level); in btree_split()
1614 n[1] = n2 = bch2_btree_node_alloc(as, trans, b->c.level); in btree_split()
1616 __btree_split_node(as, trans, b, n, keys); in btree_split()
1619 ret = btree_split_insert_keys(as, trans, path, n1, keys) ?: in btree_split()
1620 btree_split_insert_keys(as, trans, path, n2, keys); in btree_split()
1629 bch2_btree_update_add_new_node(as, n1); in btree_split()
1630 bch2_btree_update_add_new_node(as, n2); in btree_split()
1634 path1 = bch2_path_get_unlocked_mut(trans, as->btree_id, n1->c.level, n1->key.k.p); in btree_split()
1639 path2 = bch2_path_get_unlocked_mut(trans, as->btree_id, n2->c.level, n2->key.k.p); in btree_split()
1649 bch2_keylist_add(&as->parent_keys, &n1->key); in btree_split()
1650 bch2_keylist_add(&as->parent_keys, &n2->key); in btree_split()
1654 n3 = __btree_root_alloc(as, trans, b->c.level + 1); in btree_split()
1656 bch2_btree_update_add_new_node(as, n3); in btree_split()
1668 ret = btree_split_insert_keys(as, trans, path, n3, &as->parent_keys); in btree_split()
1675 n1 = bch2_btree_node_alloc_replacement(as, trans, b); in btree_split()
1678 ret = btree_split_insert_keys(as, trans, path, n1, keys); in btree_split()
1685 bch2_btree_update_add_new_node(as, n1); in btree_split()
1688 path1 = bch2_path_get_unlocked_mut(trans, as->btree_id, n1->c.level, n1->key.k.p); in btree_split()
1694 bch2_keylist_add(&as->parent_keys, &n1->key); in btree_split()
1701 ret = bch2_btree_insert_node(as, trans, path, parent, &as->parent_keys); in btree_split()
1703 ret = bch2_btree_set_root(as, trans, trans->paths + path, n3, false); in btree_split()
1706 ret = bch2_btree_set_root(as, trans, trans->paths + path, n1, false); in btree_split()
1712 bch2_btree_interior_update_will_free_node(as, b); in btree_split()
1715 bch2_btree_update_get_open_buckets(as, n3); in btree_split()
1719 bch2_btree_update_get_open_buckets(as, n2); in btree_split()
1722 bch2_btree_update_get_open_buckets(as, n1); in btree_split()
1763 bch2_btree_node_free_never_used(as, trans, n3); in btree_split()
1765 bch2_btree_node_free_never_used(as, trans, n2); in btree_split()
1766 bch2_btree_node_free_never_used(as, trans, n1); in btree_split()
1773 * @as: btree_update object
1781 * Inserts as many keys as it can into a given btree node, splitting it if full.
1785 static int bch2_btree_insert_node(struct btree_update *as, struct btree_trans *trans, in bch2_btree_insert_node() argument
1789 struct bch_fs *c = as->c; in bch2_btree_insert_node()
1799 BUG_ON(!as || as->b); in bch2_btree_insert_node()
1807 bch2_btree_update_to_text(&buf, as); in bch2_btree_insert_node()
1829 bch2_btree_insert_keys_interior(as, trans, path, b, in bch2_btree_insert_node()
1853 btree_update_updated_node(as, b); in bch2_btree_insert_node()
1861 if (b->c.level >= as->update_level_end) { in bch2_btree_insert_node()
1866 return btree_split(as, trans, path_idx, b, keys); in bch2_btree_insert_node()
1875 struct btree_update *as; in bch2_btree_split_leaf() local
1879 as = bch2_btree_update_start(trans, trans->paths + path, in bch2_btree_split_leaf()
1882 if (IS_ERR(as)) in bch2_btree_split_leaf()
1883 return PTR_ERR(as); in bch2_btree_split_leaf()
1885 ret = btree_split(as, trans, path, b, NULL); in bch2_btree_split_leaf()
1887 bch2_btree_update_free(as, trans); in bch2_btree_split_leaf()
1891 bch2_btree_update_done(as, trans); in bch2_btree_split_leaf()
1901 static void __btree_increase_depth(struct btree_update *as, struct btree_trans *trans, in __btree_increase_depth() argument
1904 struct bch_fs *c = as->c; in __btree_increase_depth()
1910 n = __btree_root_alloc(as, trans, b->c.level + 1); in __btree_increase_depth()
1912 bch2_btree_update_add_new_node(as, n); in __btree_increase_depth()
1924 bch2_keylist_add(&as->parent_keys, &b->key); in __btree_increase_depth()
1925 btree_split_insert_keys(as, trans, path_idx, n, &as->parent_keys); in __btree_increase_depth()
1927 int ret = bch2_btree_set_root(as, trans, path, n, true); in __btree_increase_depth()
1930 bch2_btree_update_get_open_buckets(as, n); in __btree_increase_depth()
1950 struct btree_update *as = in bch2_btree_increase_depth() local
1952 if (IS_ERR(as)) in bch2_btree_increase_depth()
1953 return PTR_ERR(as); in bch2_btree_increase_depth()
1955 __btree_increase_depth(as, trans, path); in bch2_btree_increase_depth()
1956 bch2_btree_update_done(as, trans); in bch2_btree_increase_depth()
1967 struct btree_update *as; in __bch2_foreground_maybe_merge() local
2079 as = bch2_btree_update_start(trans, trans->paths + path, level, false, in __bch2_foreground_maybe_merge()
2081 ret = PTR_ERR_OR_ZERO(as); in __bch2_foreground_maybe_merge()
2087 n = bch2_btree_node_alloc(as, trans, b->c.level); in __bch2_foreground_maybe_merge()
2103 bch2_btree_update_add_new_node(as, n); in __bch2_foreground_maybe_merge()
2113 bch2_keylist_add(&as->parent_keys, &delete); in __bch2_foreground_maybe_merge()
2114 bch2_keylist_add(&as->parent_keys, &n->key); in __bch2_foreground_maybe_merge()
2118 ret = bch2_btree_insert_node(as, trans, path, parent, &as->parent_keys); in __bch2_foreground_maybe_merge()
2122 bch2_btree_interior_update_will_free_node(as, b); in __bch2_foreground_maybe_merge()
2123 bch2_btree_interior_update_will_free_node(as, m); in __bch2_foreground_maybe_merge()
2127 bch2_btree_update_get_open_buckets(as, n); in __bch2_foreground_maybe_merge()
2139 bch2_btree_update_done(as, trans); in __bch2_foreground_maybe_merge()
2154 bch2_btree_node_free_never_used(as, trans, n); in __bch2_foreground_maybe_merge()
2155 bch2_btree_update_free(as, trans); in __bch2_foreground_maybe_merge()
2191 struct btree_update *as; in bch2_btree_node_rewrite() local
2199 as = bch2_btree_update_start(trans, path, b->c.level, false, flags); in bch2_btree_node_rewrite()
2200 ret = PTR_ERR_OR_ZERO(as); in bch2_btree_node_rewrite()
2204 n = bch2_btree_node_alloc_replacement(as, trans, b); in bch2_btree_node_rewrite()
2207 bch2_btree_update_add_new_node(as, n); in bch2_btree_node_rewrite()
2218 bch2_keylist_add(&as->parent_keys, &n->key); in bch2_btree_node_rewrite()
2219 ret = bch2_btree_insert_node(as, trans, iter->path, parent, &as->parent_keys); in bch2_btree_node_rewrite()
2221 ret = bch2_btree_set_root(as, trans, btree_iter_path(trans, iter), n, false); in bch2_btree_node_rewrite()
2227 bch2_btree_interior_update_will_free_node(as, b); in bch2_btree_node_rewrite()
2229 bch2_btree_update_get_open_buckets(as, n); in bch2_btree_node_rewrite()
2237 bch2_btree_update_done(as, trans); in bch2_btree_node_rewrite()
2244 bch2_btree_node_free_never_used(as, trans, n); in bch2_btree_node_rewrite()
2245 bch2_btree_update_free(as, trans); in bch2_btree_node_rewrite()
2647 static void bch2_btree_update_to_text(struct printbuf *out, struct btree_update *as) in bch2_btree_update_to_text() argument
2649 prt_printf(out, "%ps: ", (void *) as->ip_started); in bch2_btree_update_to_text()
2650 bch2_trans_commit_flags_to_text(out, as->flags); in bch2_btree_update_to_text()
2653 bch2_btree_id_to_text(out, as->btree_id); in bch2_btree_update_to_text()
2655 as->update_level_start, in bch2_btree_update_to_text()
2656 as->update_level_end, in bch2_btree_update_to_text()
2657 bch2_btree_update_modes[as->mode], in bch2_btree_update_to_text()
2658 as->nodes_written, in bch2_btree_update_to_text()
2659 closure_nr_remaining(&as->cl), in bch2_btree_update_to_text()
2660 as->journal.seq); in bch2_btree_update_to_text()
2665 struct btree_update *as; in bch2_btree_updates_to_text() local
2668 list_for_each_entry(as, &c->btree_interior_update_list, list) in bch2_btree_updates_to_text()
2669 bch2_btree_update_to_text(out, as); in bch2_btree_updates_to_text()