Loading fs/bcachefs/btree_update_interior.c +14 −13 Original line number Diff line number Diff line Loading @@ -99,7 +99,7 @@ static void btree_node_interior_verify(struct bch_fs *c, struct btree *b) /* Calculate ideal packed bkey format for new btree nodes: */ void __bch2_btree_calc_format(struct bkey_format_state *s, struct btree *b) static void __bch2_btree_calc_format(struct bkey_format_state *s, struct btree *b) { struct bkey_packed *k; struct bset_tree *t; Loading @@ -125,21 +125,20 @@ static struct bkey_format bch2_btree_calc_format(struct btree *b) return bch2_bkey_format_done(&s); } static size_t btree_node_u64s_with_format(struct btree *b, static size_t btree_node_u64s_with_format(struct btree_nr_keys nr, struct bkey_format *old_f, struct bkey_format *new_f) { struct bkey_format *old_f = &b->format; /* stupid integer promotion rules */ ssize_t delta = (((int) new_f->key_u64s - old_f->key_u64s) * (int) b->nr.packed_keys) + (int) nr.packed_keys) + (((int) new_f->key_u64s - BKEY_U64s) * (int) b->nr.unpacked_keys); (int) nr.unpacked_keys); BUG_ON(delta + b->nr.live_u64s < 0); BUG_ON(delta + nr.live_u64s < 0); return b->nr.live_u64s + delta; return nr.live_u64s + delta; } /** Loading @@ -147,16 +146,18 @@ static size_t btree_node_u64s_with_format(struct btree *b, * * @c: filesystem handle * @b: btree node to rewrite * @nr: number of keys for new node (i.e. b->nr) * @new_f: bkey format to translate keys to * * Returns: true if all re-packed keys will be able to fit in a new node. * * Assumes all keys will successfully pack with the new format. */ bool bch2_btree_node_format_fits(struct bch_fs *c, struct btree *b, static bool bch2_btree_node_format_fits(struct bch_fs *c, struct btree *b, struct btree_nr_keys nr, struct bkey_format *new_f) { size_t u64s = btree_node_u64s_with_format(b, new_f); size_t u64s = btree_node_u64s_with_format(nr, &b->format, new_f); return __vstruct_bytes(struct btree_node, u64s) < btree_bytes(c); } Loading Loading @@ -391,7 +392,7 @@ static struct btree *bch2_btree_node_alloc_replacement(struct btree_update *as, * The keys might expand with the new format - if they wouldn't fit in * the btree node anymore, use the old format for now: */ if (!bch2_btree_node_format_fits(as->c, b, &format)) if (!bch2_btree_node_format_fits(as->c, b, b->nr, &format)) format = b->format; SET_BTREE_NODE_SEQ(n->data, BTREE_NODE_SEQ(b->data) + 1); Loading Loading @@ -1822,8 +1823,8 @@ int __bch2_foreground_maybe_merge(struct btree_trans *trans, bch2_bkey_format_add_pos(&new_s, next->data->max_key); new_f = bch2_bkey_format_done(&new_s); sib_u64s = btree_node_u64s_with_format(b, &new_f) + btree_node_u64s_with_format(m, &new_f); sib_u64s = btree_node_u64s_with_format(b->nr, &b->format, &new_f) + btree_node_u64s_with_format(m->nr, &m->format, &new_f); if (sib_u64s > BTREE_FOREGROUND_MERGE_HYSTERESIS(c)) { sib_u64s -= BTREE_FOREGROUND_MERGE_HYSTERESIS(c); Loading fs/bcachefs/btree_update_interior.h +0 −4 Original line number Diff line number Diff line Loading @@ -6,10 +6,6 @@ #include "btree_locking.h" #include "btree_update.h" void __bch2_btree_calc_format(struct bkey_format_state *, struct btree *); bool bch2_btree_node_format_fits(struct bch_fs *c, struct btree *, struct bkey_format *); #define BTREE_UPDATE_NODES_MAX ((BTREE_MAX_DEPTH - 2) * 2 + GC_MERGE_NODES) #define BTREE_UPDATE_JOURNAL_RES (BTREE_UPDATE_NODES_MAX * (BKEY_BTREE_PTR_U64s_MAX + 1)) Loading Loading
fs/bcachefs/btree_update_interior.c +14 −13 Original line number Diff line number Diff line Loading @@ -99,7 +99,7 @@ static void btree_node_interior_verify(struct bch_fs *c, struct btree *b) /* Calculate ideal packed bkey format for new btree nodes: */ void __bch2_btree_calc_format(struct bkey_format_state *s, struct btree *b) static void __bch2_btree_calc_format(struct bkey_format_state *s, struct btree *b) { struct bkey_packed *k; struct bset_tree *t; Loading @@ -125,21 +125,20 @@ static struct bkey_format bch2_btree_calc_format(struct btree *b) return bch2_bkey_format_done(&s); } static size_t btree_node_u64s_with_format(struct btree *b, static size_t btree_node_u64s_with_format(struct btree_nr_keys nr, struct bkey_format *old_f, struct bkey_format *new_f) { struct bkey_format *old_f = &b->format; /* stupid integer promotion rules */ ssize_t delta = (((int) new_f->key_u64s - old_f->key_u64s) * (int) b->nr.packed_keys) + (int) nr.packed_keys) + (((int) new_f->key_u64s - BKEY_U64s) * (int) b->nr.unpacked_keys); (int) nr.unpacked_keys); BUG_ON(delta + b->nr.live_u64s < 0); BUG_ON(delta + nr.live_u64s < 0); return b->nr.live_u64s + delta; return nr.live_u64s + delta; } /** Loading @@ -147,16 +146,18 @@ static size_t btree_node_u64s_with_format(struct btree *b, * * @c: filesystem handle * @b: btree node to rewrite * @nr: number of keys for new node (i.e. b->nr) * @new_f: bkey format to translate keys to * * Returns: true if all re-packed keys will be able to fit in a new node. * * Assumes all keys will successfully pack with the new format. */ bool bch2_btree_node_format_fits(struct bch_fs *c, struct btree *b, static bool bch2_btree_node_format_fits(struct bch_fs *c, struct btree *b, struct btree_nr_keys nr, struct bkey_format *new_f) { size_t u64s = btree_node_u64s_with_format(b, new_f); size_t u64s = btree_node_u64s_with_format(nr, &b->format, new_f); return __vstruct_bytes(struct btree_node, u64s) < btree_bytes(c); } Loading Loading @@ -391,7 +392,7 @@ static struct btree *bch2_btree_node_alloc_replacement(struct btree_update *as, * The keys might expand with the new format - if they wouldn't fit in * the btree node anymore, use the old format for now: */ if (!bch2_btree_node_format_fits(as->c, b, &format)) if (!bch2_btree_node_format_fits(as->c, b, b->nr, &format)) format = b->format; SET_BTREE_NODE_SEQ(n->data, BTREE_NODE_SEQ(b->data) + 1); Loading Loading @@ -1822,8 +1823,8 @@ int __bch2_foreground_maybe_merge(struct btree_trans *trans, bch2_bkey_format_add_pos(&new_s, next->data->max_key); new_f = bch2_bkey_format_done(&new_s); sib_u64s = btree_node_u64s_with_format(b, &new_f) + btree_node_u64s_with_format(m, &new_f); sib_u64s = btree_node_u64s_with_format(b->nr, &b->format, &new_f) + btree_node_u64s_with_format(m->nr, &m->format, &new_f); if (sib_u64s > BTREE_FOREGROUND_MERGE_HYSTERESIS(c)) { sib_u64s -= BTREE_FOREGROUND_MERGE_HYSTERESIS(c); Loading
fs/bcachefs/btree_update_interior.h +0 −4 Original line number Diff line number Diff line Loading @@ -6,10 +6,6 @@ #include "btree_locking.h" #include "btree_update.h" void __bch2_btree_calc_format(struct bkey_format_state *, struct btree *); bool bch2_btree_node_format_fits(struct bch_fs *c, struct btree *, struct bkey_format *); #define BTREE_UPDATE_NODES_MAX ((BTREE_MAX_DEPTH - 2) * 2 + GC_MERGE_NODES) #define BTREE_UPDATE_JOURNAL_RES (BTREE_UPDATE_NODES_MAX * (BKEY_BTREE_PTR_U64s_MAX + 1)) Loading