diff --git a/.bcachefs_revision b/.bcachefs_revision index 3c43156d..c165707c 100644 --- a/.bcachefs_revision +++ b/.bcachefs_revision @@ -1 +1 @@ -e9a4628eddaa137ebd4bfb0f232503268992d15f +4d1d53862afb768e4edcf7256f8fe0634c96b40e diff --git a/libbcachefs/btree_node_scan.c b/libbcachefs/btree_node_scan.c index 1e250558..00110722 100644 --- a/libbcachefs/btree_node_scan.c +++ b/libbcachefs/btree_node_scan.c @@ -330,37 +330,15 @@ again: } else if (n->level) { n->overwritten = true; } else { - struct printbuf buf = PRINTBUF; - - prt_str(&buf, "overlapping btree nodes with same seq! halting\n "); - found_btree_node_to_text(&buf, c, start); - prt_str(&buf, "\n "); - found_btree_node_to_text(&buf, c, n); - bch_err(c, "%s", buf.buf); - printbuf_exit(&buf); - - struct { __BKEY_PADDED(k, BKEY_BTREE_PTR_VAL_U64s_MAX); } tmp; - struct btree *b; - - struct btree_trans *trans = bch2_trans_get(c); - - found_btree_node_to_key(&tmp.k, start); - b = bch2_btree_node_get_noiter(trans, &tmp.k, - start->btree_id, start->level, false); - if (!IS_ERR_OR_NULL(b)) { - bch2_dump_btree_node(c, b); - six_unlock_read(&b->c.lock); + if (bpos_cmp(start->max_key, n->max_key) >= 0) + n->overwritten = true; + else { + n->range_updated = true; + n->min_key = bpos_successor(start->max_key); + n->range_updated = true; + bubble_up(n, end); + goto again; } - - found_btree_node_to_key(&tmp.k, n); - b = bch2_btree_node_get_noiter(trans, &tmp.k, - start->btree_id, start->level, false); - if (!IS_ERR_OR_NULL(b)) { - bch2_dump_btree_node(c, b); - six_unlock_read(&b->c.lock); - } - bch2_trans_put(trans); - return -BCH_ERR_fsck_repair_unimplemented; } }