goto bail;
                        }
                        /* Copy SGE state in case we need to resend */
-                       qp->s_rdma_mr = e->rdma_sge.mr;
-                       if (qp->s_rdma_mr)
-                               rvt_get_mr(qp->s_rdma_mr);
+                       ps->s_txreq->mr = e->rdma_sge.mr;
+                       if (ps->s_txreq->mr)
+                               rvt_get_mr(ps->s_txreq->mr);
                        qp->s_ack_rdma_sge.sge = e->rdma_sge;
                        qp->s_ack_rdma_sge.num_sge = 1;
                        qp->s_cur_sge = &qp->s_ack_rdma_sge;
                /* FALLTHROUGH */
        case OP(RDMA_READ_RESPONSE_MIDDLE):
                qp->s_cur_sge = &qp->s_ack_rdma_sge;
-               qp->s_rdma_mr = qp->s_ack_rdma_sge.sge.mr;
-               if (qp->s_rdma_mr)
-                       rvt_get_mr(qp->s_rdma_mr);
+               ps->s_txreq->mr = qp->s_ack_rdma_sge.sge.mr;
+               if (ps->s_txreq->mr)
+                       rvt_get_mr(ps->s_txreq->mr);
                len = qp->s_ack_rdma_sge.sge.sge_length;
                if (len > pmtu) {
                        len = pmtu;
 
                pbc = create_pbc(ppd, pbc_flags, qp->srate_mbps, vl, plen);
        }
        tx->wqe = qp->s_wqe;
-       tx->mr = qp->s_rdma_mr;
-       if (qp->s_rdma_mr)
-               qp->s_rdma_mr = NULL;
        tx->hdr_dwords = hdrwords + 2;
        ret = build_verbs_tx_desc(tx->sde, ss, len, tx, ahdr, pbc);
        if (unlikely(ret))
        trace_output_ibhdr(dd_from_ibdev(qp->ibqp.device),
                           &ps->s_txreq->phdr.hdr);
 
-       if (qp->s_rdma_mr) {
-               rvt_put_mr(qp->s_rdma_mr);
-               qp->s_rdma_mr = NULL;
-       }
-
 pio_bail:
        if (qp->s_wqe) {
                spin_lock_irqsave(&qp->s_lock, flags);