bcachefs: On missing backpointer to interior node, flush interior updates
authorKent Overstreet <kent.overstreet@linux.dev>
Thu, 30 Nov 2023 07:11:15 +0000 (02:11 -0500)
committerKent Overstreet <kent.overstreet@linux.dev>
Mon, 1 Jan 2024 16:47:39 +0000 (11:47 -0500)
Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
fs/bcachefs/backpointers.c

index 2fb96fa99f42716fb7f681477400b37d3cb84b29..eb826457ff6bc6052a805b8d4560d8659801e995 100644 (file)
@@ -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;