summaryrefslogtreecommitdiff
path: root/fs/bcachefs/btree_trans_commit.c
diff options
context:
space:
mode:
authorKent Overstreet <kent.overstreet@linux.dev>2023-12-15 15:21:40 -0500
committerKent Overstreet <kent.overstreet@linux.dev>2023-12-23 17:05:16 -0500
commitace3250ec9493bcaf8c396f9aeb0c0927694ce36 (patch)
treeab2d114b75187f7ff8efb42f935b5e491117b94d /fs/bcachefs/btree_trans_commit.c
parentd4141d42d507be6a0c3c03251292416b19248173 (diff)
bcachefs: Fix interior update path btree_path uses
Since the btree_paths array is now about to become growable, we have to be careful not to refer to paths by pointer across contexts where they may be reallocated. This fixes the remaining btree_interior_update() paths - split and merge. Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
Diffstat (limited to 'fs/bcachefs/btree_trans_commit.c')
-rw-r--r--fs/bcachefs/btree_trans_commit.c12
1 files changed, 5 insertions, 7 deletions
diff --git a/fs/bcachefs/btree_trans_commit.c b/fs/bcachefs/btree_trans_commit.c
index 972694e3b861..47cbfe2f3124 100644
--- a/fs/bcachefs/btree_trans_commit.c
+++ b/fs/bcachefs/btree_trans_commit.c
@@ -834,7 +834,7 @@ static inline int do_bch2_trans_commit(struct btree_trans *trans, unsigned flags
if (!same_leaf_as_next(trans, i)) {
if (u64s_delta <= 0) {
- ret = bch2_foreground_maybe_merge(trans, trans->paths + i->path,
+ ret = bch2_foreground_maybe_merge(trans, i->path,
i->level, flags);
if (unlikely(ret))
return ret;
@@ -888,14 +888,12 @@ int bch2_trans_commit_error(struct btree_trans *trans, unsigned flags,
struct bch_fs *c = trans->c;
switch (ret) {
- case -BCH_ERR_btree_insert_btree_node_full: {
- struct btree_path *path = trans->paths + i->path;
-
- ret = bch2_btree_split_leaf(trans, path, flags);
+ case -BCH_ERR_btree_insert_btree_node_full:
+ ret = bch2_btree_split_leaf(trans, i->path, flags);
if (bch2_err_matches(ret, BCH_ERR_transaction_restart))
- trace_and_count(c, trans_restart_btree_node_split, trans, trace_ip, path);
+ trace_and_count(c, trans_restart_btree_node_split, trans,
+ trace_ip, trans->paths + i->path);
break;
- }
case -BCH_ERR_btree_insert_need_mark_replicas:
ret = drop_locks_do(trans,
bch2_replicas_delta_list_mark(c, trans->fs_usage_deltas));