struct btree_iter *iter;
 
                        trans_for_each_iter(trans, iter) {
-                               pr_err("iter: btree %s pos %llu:%llu%s%s%s",
+                               pr_err("iter: btree %s pos %llu:%llu%s%s%s %pf",
                                       bch2_btree_ids[iter->btree_id],
                                       iter->pos.inode,
                                       iter->pos.offset,
                                       (trans->iters_live & (1ULL << iter->idx)) ? " live" : "",
                                       (trans->iters_touched & (1ULL << iter->idx)) ? " touched" : "",
-                                      iter->flags & BTREE_ITER_KEEP_UNTIL_COMMIT ? " keep" : "");
+                                      iter->flags & BTREE_ITER_KEEP_UNTIL_COMMIT ? " keep" : "",
+                                      (void *) iter->ip_allocated);
                        }
 
                        panic("trans iter oveflow\n");
        return iter;
 }
 
-struct btree_iter *bch2_trans_get_iter(struct btree_trans *trans,
-                                      enum btree_id btree_id,
-                                      struct bpos pos, unsigned flags)
+struct btree_iter *__bch2_trans_get_iter(struct btree_trans *trans,
+                                        enum btree_id btree_id,
+                                        struct bpos pos, unsigned flags)
 {
        struct btree_iter *iter =
                __btree_trans_get_iter(trans, btree_id, pos, flags);
        return iter;
 }
 
-struct btree_iter *bch2_trans_copy_iter(struct btree_trans *trans,
+struct btree_iter *__bch2_trans_copy_iter(struct btree_trans *trans,
                                        struct btree_iter *src)
 {
        struct btree_iter *iter;
 
 
 void bch2_trans_unlink_iters(struct btree_trans *);
 
-struct btree_iter *bch2_trans_get_iter(struct btree_trans *, enum btree_id,
-                                      struct bpos, unsigned);
-struct btree_iter *bch2_trans_copy_iter(struct btree_trans *,
+struct btree_iter *__bch2_trans_get_iter(struct btree_trans *, enum btree_id,
+                                        struct bpos, unsigned);
+
+static inline struct btree_iter *
+bch2_trans_get_iter(struct btree_trans *trans, enum btree_id btree_id,
+                   struct bpos pos, unsigned flags)
+{
+       struct btree_iter *iter =
+               __bch2_trans_get_iter(trans, btree_id, pos, flags);
+
+       if (!IS_ERR(iter))
+               iter->ip_allocated = _THIS_IP_;
+       return iter;
+}
+
+struct btree_iter *__bch2_trans_copy_iter(struct btree_trans *,
                                        struct btree_iter *);
+static inline struct btree_iter *
+bch2_trans_copy_iter(struct btree_trans *trans, struct btree_iter *src)
+{
+       struct btree_iter *iter =
+               __bch2_trans_copy_iter(trans, src);
+
+       if (!IS_ERR(iter))
+               iter->ip_allocated = _THIS_IP_;
+       return iter;
+
+}
+
 struct btree_iter *bch2_trans_get_node_iter(struct btree_trans *,
                                enum btree_id, struct bpos,
                                unsigned, unsigned, unsigned);