summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKent Overstreet <kent.overstreet@linux.dev>2023-11-30 02:11:15 -0500
committerKent Overstreet <kent.overstreet@linux.dev>2024-01-01 11:47:39 -0500
commit0f64a6daaa4852db735a2df754b37d187f5480d1 (patch)
treed2807cab110509aee25f9326d49cf0b74d847947
parent21e07cc966aab2400144f08eb85cb7f42df923ad (diff)
bcachefs: On missing backpointer to interior node, flush interior updates
Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
-rw-r--r--fs/bcachefs/backpointers.c5
1 files changed, 5 insertions, 0 deletions
diff --git a/fs/bcachefs/backpointers.c b/fs/bcachefs/backpointers.c
index 2fb96fa99f42..eb826457ff6b 100644
--- a/fs/bcachefs/backpointers.c
+++ b/fs/bcachefs/backpointers.c
@@ -441,6 +441,11 @@ static int check_bp_exists(struct btree_trans *trans,
memcmp(bkey_s_c_to_backpointer(bp_k).v, &bp, sizeof(bp))) {
if (last_flushed->level != bp.level ||
!bpos_eq(last_flushed->pos, orig_k.k->p)) {
+ if (bp.level) {
+ bch2_trans_unlock(trans);
+ bch2_btree_interior_updates_flush(c);
+ }
+
ret = bch2_btree_write_buffer_flush_sync(trans);
if (ret)
goto err;