diff options
author | Kent Overstreet <kent.overstreet@gmail.com> | 2021-08-30 14:36:03 -0400 |
---|---|---|
committer | Kent Overstreet <kent.overstreet@linux.dev> | 2023-10-22 17:09:11 -0400 |
commit | f7a966a3e2546a7fc76bc34b78e7dad7cebfa8c2 (patch) | |
tree | 4097a2171203d844259ab4673450b27c3f280bcb /fs/bcachefs | |
parent | 78cf784eaac1ebfc8982e815618b0fcc5927fafb (diff) |
bcachefs: Clean up/rename bch2_trans_node_* fns
These utility functions are for managing btree node state within a
btree_trans - rename them for consistency, and drop some unneeded
arguments.
Signed-off-by: Kent Overstreet <kent.overstreet@gmail.com>
Diffstat (limited to 'fs/bcachefs')
-rw-r--r-- | fs/bcachefs/btree_io.c | 9 | ||||
-rw-r--r-- | fs/bcachefs/btree_io.h | 3 | ||||
-rw-r--r-- | fs/bcachefs/btree_iter.c | 52 | ||||
-rw-r--r-- | fs/bcachefs/btree_iter.h | 12 | ||||
-rw-r--r-- | fs/bcachefs/btree_update_interior.c | 35 | ||||
-rw-r--r-- | fs/bcachefs/btree_update_leaf.c | 11 |
6 files changed, 54 insertions, 68 deletions
diff --git a/fs/bcachefs/btree_io.c b/fs/bcachefs/btree_io.c index 99799d93cf09..f51dd3ec0797 100644 --- a/fs/bcachefs/btree_io.c +++ b/fs/bcachefs/btree_io.c @@ -459,16 +459,13 @@ void bch2_btree_build_aux_trees(struct btree *b) * * Returns true if we sorted (i.e. invalidated iterators */ -void bch2_btree_init_next(struct btree_trans *trans, - struct btree_iter *iter, - struct btree *b) +void bch2_btree_init_next(struct btree_trans *trans, struct btree *b) { struct bch_fs *c = trans->c; struct btree_node_entry *bne; bool reinit_iter = false; EBUG_ON(!(b->c.lock.state.seq & 1)); - EBUG_ON(iter && iter->l[b->c.level].b != b); BUG_ON(bset_written(b, bset(b, &b->set[1]))); if (b->nsets == MAX_BSETS && @@ -497,8 +494,8 @@ void bch2_btree_init_next(struct btree_trans *trans, bch2_btree_build_aux_trees(b); - if (iter && reinit_iter) - bch2_btree_iter_reinit_node(trans, iter, b); + if (reinit_iter) + bch2_trans_node_reinit_iter(trans, b); } static void btree_pos_to_text(struct printbuf *out, struct bch_fs *c, diff --git a/fs/bcachefs/btree_io.h b/fs/bcachefs/btree_io.h index 7fdcf879c7d4..0f20224e2a77 100644 --- a/fs/bcachefs/btree_io.h +++ b/fs/bcachefs/btree_io.h @@ -134,8 +134,7 @@ void bch2_btree_sort_into(struct bch_fs *, struct btree *, struct btree *); void bch2_btree_node_drop_keys_outside_node(struct btree *); void bch2_btree_build_aux_trees(struct btree *); -void bch2_btree_init_next(struct btree_trans *, struct btree_iter *, - struct btree *); +void bch2_btree_init_next(struct btree_trans *, struct btree *); int bch2_btree_node_read_done(struct bch_fs *, struct bch_dev *, struct btree *, bool); diff --git a/fs/bcachefs/btree_iter.c b/fs/bcachefs/btree_iter.c index 16b9f6a986f4..91047f378e8f 100644 --- a/fs/bcachefs/btree_iter.c +++ b/fs/bcachefs/btree_iter.c @@ -757,15 +757,14 @@ static void __bch2_btree_iter_fix_key_modified(struct btree_iter *iter, } void bch2_btree_iter_fix_key_modified(struct btree_trans *trans, - struct btree_iter *iter, struct btree *b, struct bkey_packed *where) { - struct btree_iter *linked; + struct btree_iter *iter; - trans_for_each_iter_with_node(trans, b, linked) { - __bch2_btree_iter_fix_key_modified(linked, b, where); - bch2_btree_iter_verify_level(trans, linked, b->c.level); + trans_for_each_iter_with_node(trans, b, iter) { + __bch2_btree_iter_fix_key_modified(iter, b, where); + bch2_btree_iter_verify_level(trans, iter, b->c.level); } } @@ -1062,42 +1061,40 @@ static inline void btree_iter_level_init(struct btree_trans *trans, * A btree node is being replaced - update the iterator to point to the new * node: */ -void bch2_btree_iter_node_replace(struct btree_trans *trans, - struct btree_iter *iter, struct btree *b) +void bch2_trans_node_add(struct btree_trans *trans, struct btree *b) { enum btree_node_locked_type t; - struct btree_iter *linked; + struct btree_iter *iter; - trans_for_each_iter(trans, linked) - if (btree_iter_type(linked) != BTREE_ITER_CACHED && - btree_iter_pos_in_node(linked, b)) { + trans_for_each_iter(trans, iter) + if (btree_iter_type(iter) != BTREE_ITER_CACHED && + btree_iter_pos_in_node(iter, b)) { /* - * bch2_btree_iter_node_drop() has already been called - + * bch2_trans_node_drop() has already been called - * the old node we're replacing has already been * unlocked and the pointer invalidated */ - BUG_ON(btree_node_locked(linked, b->c.level)); + BUG_ON(btree_node_locked(iter, b->c.level)); - t = btree_lock_want(linked, b->c.level); + t = btree_lock_want(iter, b->c.level); if (t != BTREE_NODE_UNLOCKED) { six_lock_increment(&b->c.lock, (enum six_lock_type) t); - mark_btree_node_locked(linked, b->c.level, (enum six_lock_type) t); + mark_btree_node_locked(iter, b->c.level, (enum six_lock_type) t); } - btree_iter_level_init(trans, linked, b); + btree_iter_level_init(trans, iter, b); } } -void bch2_btree_iter_node_drop(struct btree_trans *trans, - struct btree_iter *iter, struct btree *b) +void bch2_trans_node_drop(struct btree_trans *trans, struct btree *b) { - struct btree_iter *linked; + struct btree_iter *iter; unsigned level = b->c.level; - trans_for_each_iter(trans, linked) - if (linked->l[level].b == b) { - btree_node_unlock(linked, level); - linked->l[level].b = BTREE_ITER_NO_NODE_DROP; + trans_for_each_iter(trans, iter) + if (iter->l[level].b == b) { + btree_node_unlock(iter, level); + iter->l[level].b = BTREE_ITER_NO_NODE_DROP; } } @@ -1105,13 +1102,12 @@ void bch2_btree_iter_node_drop(struct btree_trans *trans, * A btree node has been modified in such a way as to invalidate iterators - fix * them: */ -void bch2_btree_iter_reinit_node(struct btree_trans *trans, - struct btree_iter *iter, struct btree *b) +void bch2_trans_node_reinit_iter(struct btree_trans *trans, struct btree *b) { - struct btree_iter *linked; + struct btree_iter *iter; - trans_for_each_iter_with_node(trans, b, linked) - __btree_iter_level_init(linked, b->c.level); + trans_for_each_iter_with_node(trans, b, iter) + __btree_iter_level_init(iter, b->c.level); } static int lock_root_check_fn(struct six_lock *lock, void *p) diff --git a/fs/bcachefs/btree_iter.h b/fs/bcachefs/btree_iter.h index a175eb5f26fd..0f65e24bf102 100644 --- a/fs/bcachefs/btree_iter.h +++ b/fs/bcachefs/btree_iter.h @@ -135,7 +135,7 @@ static inline void bch2_btree_trans_verify_iters(struct btree_trans *trans, static inline void bch2_btree_trans_verify_locks(struct btree_trans *iter) {} #endif -void bch2_btree_iter_fix_key_modified(struct btree_trans *trans, struct btree_iter *, +void bch2_btree_iter_fix_key_modified(struct btree_trans *trans, struct btree *, struct bkey_packed *); void bch2_btree_node_iter_fix(struct btree_trans *trans, struct btree_iter *, struct btree *, struct btree_node_iter *, @@ -180,13 +180,9 @@ static inline void bch2_btree_iter_downgrade(struct btree_iter *iter) void bch2_trans_downgrade(struct btree_trans *); -void bch2_btree_iter_node_replace(struct btree_trans *trans, - struct btree_iter *, struct btree *); -void bch2_btree_iter_node_drop(struct btree_trans *, - struct btree_iter *, struct btree *); - -void bch2_btree_iter_reinit_node(struct btree_trans *, - struct btree_iter *, struct btree *); +void bch2_trans_node_add(struct btree_trans *trans, struct btree *); +void bch2_trans_node_drop(struct btree_trans *, struct btree *); +void bch2_trans_node_reinit_iter(struct btree_trans *, struct btree *); int __must_check bch2_btree_iter_traverse(struct btree_iter *); diff --git a/fs/bcachefs/btree_update_interior.c b/fs/bcachefs/btree_update_interior.c index c1d4227738cf..80227e032103 100644 --- a/fs/bcachefs/btree_update_interior.c +++ b/fs/bcachefs/btree_update_interior.c @@ -161,14 +161,13 @@ static void __btree_node_free(struct bch_fs *c, struct btree *b) } static void bch2_btree_node_free_inmem(struct btree_trans *trans, - struct btree_iter *iter, struct btree *b) { struct bch_fs *c = trans->c; - struct btree_iter *linked; + struct btree_iter *iter; - trans_for_each_iter(trans, linked) - BUG_ON(linked->l[b->c.level].b == b); + trans_for_each_iter(trans, iter) + BUG_ON(iter->l[b->c.level].b == b); six_lock_write(&b->c.lock, NULL, NULL); __btree_node_free(c, b); @@ -1431,12 +1430,12 @@ static void btree_split(struct btree_update *as, /* Successful split, update the iterator to point to the new nodes: */ six_lock_increment(&b->c.lock, SIX_LOCK_intent); - bch2_btree_iter_node_drop(trans, iter, b); + bch2_trans_node_drop(trans, b); if (n3) - bch2_btree_iter_node_replace(trans, iter, n3); + bch2_trans_node_add(trans, n3); if (n2) - bch2_btree_iter_node_replace(trans, iter, n2); - bch2_btree_iter_node_replace(trans, iter, n1); + bch2_trans_node_add(trans, n2); + bch2_trans_node_add(trans, n1); /* * The old node must be freed (in memory) _before_ unlocking the new @@ -1444,7 +1443,7 @@ static void btree_split(struct btree_update *as, * node after another thread has locked and updated the new node, thus * seeing stale data: */ - bch2_btree_node_free_inmem(trans, iter, b); + bch2_btree_node_free_inmem(trans, b); if (n3) six_unlock_intent(&n3->c.lock); @@ -1527,7 +1526,7 @@ static void bch2_btree_insert_node(struct btree_update *as, if (u64s_added > live_u64s_added && bch2_maybe_compact_whiteouts(c, b)) - bch2_btree_iter_reinit_node(trans, iter, b); + bch2_trans_node_reinit_iter(trans, b); bch2_btree_node_unlock_write(trans, iter, b); @@ -1702,15 +1701,15 @@ retry: six_lock_increment(&b->c.lock, SIX_LOCK_intent); six_lock_increment(&m->c.lock, SIX_LOCK_intent); - bch2_btree_iter_node_drop(trans, iter, b); - bch2_btree_iter_node_drop(trans, iter, m); + bch2_trans_node_drop(trans, b); + bch2_trans_node_drop(trans, m); - bch2_btree_iter_node_replace(trans, iter, n); + bch2_trans_node_add(trans, n); bch2_btree_trans_verify_iters(trans, n); - bch2_btree_node_free_inmem(trans, iter, b); - bch2_btree_node_free_inmem(trans, iter, m); + bch2_btree_node_free_inmem(trans, b); + bch2_btree_node_free_inmem(trans, m); six_unlock_intent(&n->c.lock); @@ -1798,9 +1797,9 @@ retry: bch2_btree_update_get_open_buckets(as, n); six_lock_increment(&b->c.lock, SIX_LOCK_intent); - bch2_btree_iter_node_drop(trans, iter, b); - bch2_btree_iter_node_replace(trans, iter, n); - bch2_btree_node_free_inmem(trans, iter, b); + bch2_trans_node_drop(trans, b); + bch2_trans_node_add(trans, n); + bch2_btree_node_free_inmem(trans, b); six_unlock_intent(&n->c.lock); bch2_btree_update_done(as); diff --git a/fs/bcachefs/btree_update_leaf.c b/fs/bcachefs/btree_update_leaf.c index e93db33fcfb7..20b950ce31f1 100644 --- a/fs/bcachefs/btree_update_leaf.c +++ b/fs/bcachefs/btree_update_leaf.c @@ -56,14 +56,14 @@ inline void bch2_btree_node_lock_for_insert(struct btree_trans *trans, if (unlikely(btree_node_just_written(b)) && bch2_btree_post_write_cleanup(c, b)) - bch2_btree_iter_reinit_node(trans, iter, b); + bch2_trans_node_reinit_iter(trans, b); /* * If the last bset has been written, or if it's gotten too big - start * a new bset to insert into: */ if (want_new_bset(c, b)) - bch2_btree_init_next(trans, iter, b); + bch2_btree_init_next(trans, b); } /* Inserting into a given leaf node (last stage of insert): */ @@ -85,7 +85,6 @@ bool bch2_btree_bset_insert_key(struct btree_trans *trans, EBUG_ON(bpos_cmp(insert->k.p, b->data->max_key) > 0); EBUG_ON(insert->k.u64s > bch_btree_keys_u64s_remaining(trans->c, b)); - EBUG_ON(iter->flags & BTREE_ITER_IS_EXTENTS); k = bch2_btree_node_iter_peek_all(node_iter, b); if (k && bkey_cmp_left_packed(b, k, &insert->k.p)) @@ -112,7 +111,7 @@ bool bch2_btree_bset_insert_key(struct btree_trans *trans, bch2_bset_delete(b, k, clobber_u64s); goto fix_iter; } else { - bch2_btree_iter_fix_key_modified(trans, iter, b, k); + bch2_btree_iter_fix_key_modified(trans, b, k); } return true; @@ -130,7 +129,7 @@ bool bch2_btree_bset_insert_key(struct btree_trans *trans, clobber_u64s = k->u64s; goto overwrite; } else { - bch2_btree_iter_fix_key_modified(trans, iter, b, k); + bch2_btree_iter_fix_key_modified(trans, b, k); } } @@ -220,7 +219,7 @@ static bool btree_insert_key_leaf(struct btree_trans *trans, if (u64s_added > live_u64s_added && bch2_maybe_compact_whiteouts(c, b)) - bch2_btree_iter_reinit_node(trans, iter, b); + bch2_trans_node_reinit_iter(trans, b); trace_btree_insert_key(c, b, insert); return true; |