]> git.openfabrics.org - ~ardavis/dapl.git/commitdiff
dapl: fix post_send, post_recv to handle 0 byte's and NULL iov handles
authorArlin Davis <arlin.r.davis@intel.com>
Wed, 30 Apr 2008 20:51:41 +0000 (13:51 -0700)
committerArlin Davis <arlin.r.davis@intel.com>
Wed, 30 Apr 2008 20:51:41 +0000 (13:51 -0700)
Signed-off by: Arlin Davis ardavis@ichips.intel.com

dapl/openib_cma/dapl_ib_dto.h
dapl/openib_cma/dapl_ib_extensions.c

index b111e5e52893ad45a66c934648aa3542ff395eec..ffb5dcafc9af14c6262b9c6f439009152512bf90 100644 (file)
@@ -124,7 +124,7 @@ dapls_ib_post_recv (
            dapl_os_free(ds_array_start_p, segments * sizeof(ib_data_segment_t));
 
        if (ret)
-               return( dapl_convert_errno(EFAULT,"ibv_recv") );
+               return( dapl_convert_errno(errno,"ibv_recv") );
 
        return DAT_SUCCESS;
 }
@@ -202,7 +202,8 @@ dapls_ib_post_send (
        if (cookie != NULL) 
                cookie->val.dto.size = total_len;
 
-       if ((op_type == OP_RDMA_WRITE) || (op_type == OP_RDMA_READ)) {
+       if (wr.num_sge && 
+           (op_type == OP_RDMA_WRITE || op_type == OP_RDMA_READ)) {
                wr.wr.rdma.remote_addr = remote_iov->virtual_address;
                wr.wr.rdma.rkey = remote_iov->rmr_context;
                dapl_dbg_log(DAPL_DBG_TYPE_EP, 
@@ -234,7 +235,7 @@ dapls_ib_post_send (
            dapl_os_free(ds_array_start_p, segments * sizeof(ib_data_segment_t));
 
        if (ret)
-               return( dapl_convert_errno(EFAULT,"ibv_send") );
+               return( dapl_convert_errno(errno,"ibv_send") );
 
        dapl_dbg_log(DAPL_DBG_TYPE_EP," post_snd: returned\n");
        return DAT_SUCCESS;
@@ -357,12 +358,15 @@ dapls_ib_post_ext_send (
                /* OP_RDMA_WRITE)IMMED has direct IB wr_type mapping */
                dapl_dbg_log(DAPL_DBG_TYPE_EP, 
                             " post_ext: rkey 0x%x va %#016Lx immed=0x%x\n",
-                            remote_iov->rmr_context, 
-                            remote_iov->virtual_address, immed_data);
+                            remote_iov?remote_iov->rmr_context:0, 
+                            remote_iov?remote_iov->virtual_address:0,
+                            immed_data);
 
                wr.imm_data = immed_data;
-               wr.wr.rdma.remote_addr = remote_iov->virtual_address;
-               wr.wr.rdma.rkey = remote_iov->rmr_context;
+               if (wr.num_sge) {
+                       wr.wr.rdma.remote_addr = remote_iov->virtual_address;
+                       wr.wr.rdma.rkey = remote_iov->rmr_context;
+               }
                break;
        case OP_COMP_AND_SWAP:
                /* OP_COMP_AND_SWAP has direct IB wr_type mapping */
@@ -411,7 +415,7 @@ dapls_ib_post_ext_send (
            dapl_os_free(ds_array_start_p, segments * sizeof(ib_data_segment_t));
 
        if (ret)
-               return( dapl_convert_errno(EFAULT,"ibv_send") );
+               return( dapl_convert_errno(errno,"ibv_send") );
        
        dapl_dbg_log(DAPL_DBG_TYPE_EP," post_snd: returned\n");
        return DAT_SUCCESS;
index 3132ffb3acce364ec9a65ccced744fa0a73af30b..52b238f9b6cd510270e414a947db4a5d76ac3050 100755 (executable)
@@ -185,9 +185,6 @@ dapli_post_ext( IN       DAT_EP_HANDLE              ep_handle,
        if (DAPL_BAD_HANDLE(ep_handle, DAPL_MAGIC_EP))
                return(DAT_ERROR(DAT_INVALID_HANDLE, DAT_INVALID_HANDLE_EP));
 
-       if ((NULL == remote_iov) || (NULL == local_iov))
-               return DAT_INVALID_PARAMETER;
-
        ep_ptr = (DAPL_EP *) ep_handle;
        qp_ptr = ep_ptr->qp_handle;