recv_cb_allocated = DAT_TRUE;
alloc_ep.send_iov_num = ep_attr1.max_request_iov;
- alloc_ep.send_iov = dapl_os_alloc (ep_attr1.max_request_iov
+
+ /*
+ * Ensure that send_iov_num is big enough for all types
+ * of send requests.
+ */
+ if (ep_attr1.max_rdma_read_iov > alloc_ep.send_iov_num)
+ {
+ alloc_ep.send_iov_num = ep_attr1.max_rdma_read_iov;
+ }
+ if (ep_attr1.max_rdma_write_iov > alloc_ep.send_iov_num)
+ {
+ alloc_ep.send_iov_num = ep_attr1.max_rdma_write_iov;
+ }
+ alloc_ep.send_iov = dapl_os_alloc (alloc_ep.send_iov_num
* sizeof (ib_data_segment_t));
- if ( alloc_ep.recv_iov == NULL )
+ if ( alloc_ep.send_iov == NULL )
{
dat_status = DAT_ERROR (DAT_INSUFFICIENT_RESOURCES, DAT_RESOURCE_MEMORY);
goto bail;
}
- recv_iov_allocated = DAT_TRUE;
+ rqst_iov_allocated = DAT_TRUE;
alloc_ep.recv_iov_num = ep_attr1.max_recv_iov;
alloc_ep.recv_iov = dapl_os_alloc (ep_attr1.max_recv_iov
}
}
+ if ( ep_param_mask & DAT_EP_FIELD_EP_ATTR_MAX_RDMA_READ_IOV )
+ {
+ if ( ep_attr_request.max_rdma_read_iov > ep_attr_limit.max_rdma_read_iov)
+ {
+ dat_status = DAT_ERROR (DAT_INVALID_PARAMETER, DAT_INVALID_ARG3);
+ goto bail;
+ }
+ else
+ {
+ ep_attr.max_rdma_read_iov = ep_attr_request.max_rdma_read_iov;
+ }
+ }
+
+ if ( ep_param_mask & DAT_EP_FIELD_EP_ATTR_MAX_RDMA_WRITE_IOV )
+ {
+ if ( ep_attr_request.max_rdma_write_iov > ep_attr_limit.max_rdma_write_iov)
+ {
+ dat_status = DAT_ERROR (DAT_INVALID_PARAMETER, DAT_INVALID_ARG3);
+ goto bail;
+ }
+ else
+ {
+ ep_attr.max_rdma_write_iov = ep_attr_request.max_rdma_write_iov;
+ }
+ }
+
*ia_ptr = ia;
*ep_ptr = ep;
*ep_attr_ptr = ep_attr;
ep_ptr->recv_iov_num = ep_ptr->param.ep_attr.max_recv_iov;
ep_ptr->send_iov_num = ep_ptr->param.ep_attr.max_request_iov;
+ /*
+ * Ensure that send_iov_num is big enough for all types
+ * of send requests.
+ */
+ if (ep_ptr->param.ep_attr.max_rdma_read_iov > ep_ptr->send_iov_num)
+ {
+ ep_ptr->send_iov_num = ep_ptr->param.ep_attr.max_rdma_read_iov;
+ }
+ if (ep_ptr->param.ep_attr.max_rdma_write_iov > ep_ptr->send_iov_num)
+ {
+ ep_ptr->send_iov_num = ep_ptr->param.ep_attr.max_rdma_write_iov;
+ }
+
ep_ptr->recv_iov = dapl_os_alloc (
ep_ptr->recv_iov_num * sizeof (ib_data_segment_t));