printbuf_exit(&buf);
 }
 
-noinline __cold
-void bch2_btree_path_to_text(struct printbuf *out, struct btree_path *path)
+static void bch2_btree_path_to_text(struct printbuf *out, struct btree_trans *trans, btree_path_idx_t path_idx)
 {
+       struct btree_path *path = trans->paths + path_idx;
+
        prt_printf(out, "path: idx %2u ref %u:%u %c %c btree=%s l=%u pos ",
-                  path->idx, path->ref, path->intent_ref,
+                  path_idx, path->ref, path->intent_ref,
                   path->preserve ? 'P' : ' ',
                   path->should_be_locked ? 'S' : ' ',
                   bch2_btree_id_str(path->btree_id),
                                bool nosort)
 {
        struct trans_for_each_path_inorder_iter iter;
-       struct btree_path *path;
 
        if (!nosort)
                btree_trans_sort_paths(trans);
 
-       trans_for_each_path_inorder(trans, path, iter)
-               bch2_btree_path_to_text(out, path);
+       trans_for_each_path_idx_inorder(trans, iter)
+               bch2_btree_path_to_text(out, trans, iter.path_idx);
 }
 
 noinline __cold
 
                : NULL;
 }
 
+#define trans_for_each_path_idx_inorder(_trans, _iter)                 \
+       for (_iter = (struct trans_for_each_path_inorder_iter) { 0 };   \
+            (_iter.path_idx = trans->sorted[_iter.sorted_idx],         \
+             _iter.sorted_idx < (_trans)->nr_sorted);                  \
+            _iter.sorted_idx++)
+
 struct trans_for_each_path_inorder_iter {
        btree_path_idx_t        sorted_idx;
        btree_path_idx_t        path_idx;
 })
 
 void bch2_trans_updates_to_text(struct printbuf *, struct btree_trans *);
-void bch2_btree_path_to_text(struct printbuf *, struct btree_path *);
 void bch2_trans_paths_to_text(struct printbuf *, struct btree_trans *);
 void bch2_dump_trans_updates(struct btree_trans *);
 void bch2_dump_trans_paths_updates(struct btree_trans *);