bcachefs: Fix btree path sorting
authorKent Overstreet <kent.overstreet@gmail.com>
Sat, 26 Feb 2022 03:33:01 +0000 (22:33 -0500)
committerKent Overstreet <kent.overstreet@linux.dev>
Sun, 22 Oct 2023 21:09:25 +0000 (17:09 -0400)
In btree_update_interior.c, we were changing a path's level directly -
which affects path sort order - without re-sorting paths, leading to
assertions when bch2_path_get() verified paths were sorted correctly.

Signed-off-by: Kent Overstreet <kent.overstreet@gmail.com>
fs/bcachefs/btree_iter.c
fs/bcachefs/btree_update_interior.c

index 92258281fdc7fc8bbeaadd2332e20b787d5d7b96..b65cd3566872e1e4bfa5b52bc6bbb0ae2f3cec11 100644 (file)
@@ -1797,11 +1797,12 @@ void bch2_dump_trans_paths_updates(struct btree_trans *trans)
 
                bch2_bpos_to_text(&buf1, path->pos);
 
-               printk(KERN_ERR "path: idx %u ref %u:%u%s%s btree %s pos %s locks %u %pS\n",
+               printk(KERN_ERR "path: idx %u ref %u:%u%s%s btree=%s l=%u pos %s locks %u %pS\n",
                       path->idx, path->ref, path->intent_ref,
                       path->should_be_locked ? " S" : "",
                       path->preserve ? " P" : "",
                       bch2_btree_ids[path->btree_id],
+                      path->level,
                       buf1.buf,
                       path->nodes_locked,
 #ifdef CONFIG_BCACHEFS_DEBUG
index ed0a70f7ea687664dc24caa0dc3017a98e0af523..49e475c15451d0dd0857b11a95f64233dc6c828a 100644 (file)
@@ -1918,6 +1918,8 @@ static int __bch2_btree_node_update_key(struct btree_trans *trans,
                path_l(iter2.path)->b = BTREE_ITER_NO_NODE_UP;
                iter2.path->level++;
 
+               trans->paths_sorted = false;
+
                ret   = bch2_btree_iter_traverse(&iter2) ?:
                        bch2_trans_update(trans, &iter2, new_key, BTREE_TRIGGER_NORUN);
                if (ret)