@@ -1015,7 +1015,7 @@ int ompi_osc_rdma_rget_accumulate_internal (ompi_osc_rdma_sync_t *sync, const vo
10151015 ompi_osc_rdma_module_t * module = sync -> module ;
10161016 mca_btl_base_registration_handle_t * target_handle ;
10171017 uint64_t target_address ;
1018- ptrdiff_t lb , extent ;
1018+ ptrdiff_t lb , origin_extent , target_extent ;
10191019 int ret ;
10201020
10211021 /* short-circuit case. note that origin_count may be 0 if op is MPI_NO_OP */
@@ -1027,20 +1027,22 @@ int ompi_osc_rdma_rget_accumulate_internal (ompi_osc_rdma_sync_t *sync, const vo
10271027 return OMPI_SUCCESS ;
10281028 }
10291029
1030- (void ) ompi_datatype_get_extent (origin_datatype , & lb , & extent );
1030+ (void ) ompi_datatype_get_extent (target_datatype , & lb , & target_extent );
10311031
1032- ret = osc_rdma_get_remote_segment (module , peer , target_disp , extent * target_count , & target_address , & target_handle );
1032+ ret = osc_rdma_get_remote_segment (module , peer , target_disp , target_extent * target_count , & target_address , & target_handle );
10331033 if (OPAL_UNLIKELY (OMPI_SUCCESS != ret )) {
10341034 return ret ;
10351035 }
10361036
1037- if (module -> acc_single_intrinsic && extent <= 8 ) {
1037+ (void ) ompi_datatype_get_extent (origin_datatype , & lb , & origin_extent );
1038+
1039+ if (module -> acc_single_intrinsic && origin_extent <= 8 ) {
10381040 if (module -> acc_use_amo && ompi_datatype_is_predefined (origin_datatype )) {
10391041 if (NULL == result_addr ) {
1040- ret = ompi_osc_rdma_acc_single_atomic (sync , origin_addr , origin_datatype , extent , peer , target_address ,
1042+ ret = ompi_osc_rdma_acc_single_atomic (sync , origin_addr , origin_datatype , origin_extent , peer , target_address ,
10411043 target_handle , op , request );
10421044 } else {
1043- ret = ompi_osc_rdma_fetch_and_op_atomic (sync , origin_addr , result_addr , origin_datatype , extent , peer , target_address ,
1045+ ret = ompi_osc_rdma_fetch_and_op_atomic (sync , origin_addr , result_addr , origin_datatype , origin_extent , peer , target_address ,
10441046 target_handle , op , request );
10451047 }
10461048
@@ -1049,7 +1051,7 @@ int ompi_osc_rdma_rget_accumulate_internal (ompi_osc_rdma_sync_t *sync, const vo
10491051 }
10501052 }
10511053
1052- ret = ompi_osc_rdma_fetch_and_op_cas (sync , origin_addr , result_addr , origin_datatype , extent , peer , target_address ,
1054+ ret = ompi_osc_rdma_fetch_and_op_cas (sync , origin_addr , result_addr , origin_datatype , origin_extent , peer , target_address ,
10531055 target_handle , op , request );
10541056 if (OMPI_SUCCESS == ret ) {
10551057 return OMPI_SUCCESS ;
0 commit comments