Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
        }
 
        if (unlikely(ret == -EIO)) {
+               trans->error = true;
                iter->flags |= BTREE_ITER_ERROR;
                iter->l[iter->level].b = BTREE_ITER_NOT_END;
                goto out;
 
 int bch2_trans_exit(struct btree_trans *trans)
 {
-       int ret = bch2_trans_unlock(trans);
+       bch2_trans_unlock(trans);
 
        kfree(trans->mem);
        if (trans->used_mempool)
                kfree(trans->iters);
        trans->mem      = (void *) 0x1;
        trans->iters    = (void *) 0x1;
-       return ret;
+
+       return trans->error ? -EIO : 0;
 }
 
        u8                      nr_updates;
        u8                      size;
        unsigned                used_mempool:1;
+       unsigned                error:1;
 
        unsigned                mem_top;
        unsigned                mem_bytes;