From: Kent Overstreet Date: Sat, 26 Feb 2022 03:33:01 +0000 (-0500) Subject: bcachefs: Fix btree path sorting X-Git-Url: http://git.maquefel.me/?a=commitdiff_plain;h=a0a07c59f5b4646b9371a1c119feeb6ee52b0012;p=linux.git bcachefs: Fix btree path sorting 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 --- diff --git a/fs/bcachefs/btree_iter.c b/fs/bcachefs/btree_iter.c index 92258281fdc7f..b65cd3566872e 100644 --- a/fs/bcachefs/btree_iter.c +++ b/fs/bcachefs/btree_iter.c @@ -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 diff --git a/fs/bcachefs/btree_update_interior.c b/fs/bcachefs/btree_update_interior.c index ed0a70f7ea687..49e475c15451d 100644 --- a/fs/bcachefs/btree_update_interior.c +++ b/fs/bcachefs/btree_update_interior.c @@ -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)