Commit e264b2f6 authored by Kent Overstreet's avatar Kent Overstreet Committed by Kent Overstreet

bcachefs: Improve bch2_btree_update_start()

bch2_btree_update_start() is now responsible for taking gc_lock and
upgrading the iterator to lock parent nodes - greatly simplifying error
handling and all of the callers.
Signed-off-by: default avatarKent Overstreet <kent.overstreet@gmail.com>
Signed-off-by: default avatarKent Overstreet <kent.overstreet@linux.dev>
parent ba5f03d3
...@@ -1336,11 +1336,10 @@ static void bch2_coalesce_nodes(struct bch_fs *c, struct btree_iter *iter, ...@@ -1336,11 +1336,10 @@ static void bch2_coalesce_nodes(struct bch_fs *c, struct btree_iter *iter,
return; return;
} }
as = bch2_btree_update_start(iter->trans, iter->btree_id, as = bch2_btree_update_start(iter, old_nodes[0]->c.level,
btree_update_reserve_required(c, parent) + nr_old_nodes, btree_update_reserve_required(c, parent) + nr_old_nodes,
BTREE_INSERT_NOFAIL| BTREE_INSERT_NOFAIL|
BTREE_INSERT_USE_RESERVE, BTREE_INSERT_USE_RESERVE);
NULL);
if (IS_ERR(as)) { if (IS_ERR(as)) {
trace_btree_gc_coalesce_fail(c, trace_btree_gc_coalesce_fail(c,
BTREE_GC_COALESCE_FAIL_RESERVE_GET); BTREE_GC_COALESCE_FAIL_RESERVE_GET);
......
This diff is collapsed.
...@@ -48,6 +48,7 @@ struct btree_update { ...@@ -48,6 +48,7 @@ struct btree_update {
} mode; } mode;
unsigned nodes_written:1; unsigned nodes_written:1;
unsigned took_gc_lock:1;
enum btree_id btree_id; enum btree_id btree_id;
...@@ -120,8 +121,7 @@ struct btree *__bch2_btree_node_alloc_replacement(struct btree_update *, ...@@ -120,8 +121,7 @@ struct btree *__bch2_btree_node_alloc_replacement(struct btree_update *,
void bch2_btree_update_done(struct btree_update *); void bch2_btree_update_done(struct btree_update *);
struct btree_update * struct btree_update *
bch2_btree_update_start(struct btree_trans *, enum btree_id, unsigned, bch2_btree_update_start(struct btree_iter *, unsigned, unsigned, unsigned);
unsigned, struct closure *);
void bch2_btree_interior_update_will_free_node(struct btree_update *, void bch2_btree_interior_update_will_free_node(struct btree_update *,
struct btree *); struct btree *);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment