diff --git a/ompi/mca/pml/ob1/pml_ob1_recvreq.c b/ompi/mca/pml/ob1/pml_ob1_recvreq.c index 640a1b4130..4e0dfe0bfa 100644 --- a/ompi/mca/pml/ob1/pml_ob1_recvreq.c +++ b/ompi/mca/pml/ob1/pml_ob1_recvreq.c @@ -229,9 +229,13 @@ static void mca_pml_ob1_recv_request_ack( } /* start rdma at the current fragment offset - no need to send an ack in this case */ - } else { + } else if (mca_bml_base_btl_array_get_size(&bml_endpoint->btl_rdma)) { recvreq->req_rdma_offset = recvreq->req_bytes_received; return; + + /* don't do rdma */ + } else { + recvreq->req_rdma_offset = recvreq->req_recv.req_bytes_packed; } /* zero byte message */ diff --git a/ompi/mca/pml/ob1/pml_ob1_sendreq.c b/ompi/mca/pml/ob1/pml_ob1_sendreq.c index b467eac90d..3adac518e1 100644 --- a/ompi/mca/pml/ob1/pml_ob1_sendreq.c +++ b/ompi/mca/pml/ob1/pml_ob1_sendreq.c @@ -320,7 +320,9 @@ int mca_pml_ob1_send_request_start_copy( /* if the data is already registed or leave_pinned is set - then we * will attempt to do an rdma of the entire message. */ - do_rdma = (reg_btl != NULL || mca_pml_ob1.leave_pinned) && + do_rdma = (reg_btl != NULL || + (mca_pml_ob1.leave_pinned && + mca_bml_base_btl_array_get_size(&sendreq->bml_endpoint->btl_rdma))) && ompi_convertor_need_buffers(&sendreq->req_send.req_convertor) == false; if(do_rdma == false || (reg_btl != NULL && (reg_btl->btl_flags & MCA_BTL_FLAGS_GET) == 0)) { int32_t free_after;