1
1

MPIR_Status_set_bytes: fix for large count sizes

Change the ncounts argument to MPI_Count and use
MPI_Status_set_elements_x for enabling read/write operations beyond
the 2GB limit.

Thanks to  Richard Warren from the HDF5 group for reporting the issue
and providing the suggested fix for romio.

Signed-off-by: Edgar Gabriel <egabriel@central.uh.edu>
Этот коммит содержится в:
Edgar Gabriel 2019-10-08 10:47:02 -05:00
родитель ea7e1ea859
Коммит 8a3abbf803

Просмотреть файл

@ -33,7 +33,7 @@
* because ROMIO just expects these functions to exist.
*/
int MPIR_Status_set_bytes(ompi_status_public_t *status,
struct ompi_datatype_t *datatype, int size);
struct ompi_datatype_t *datatype, MPI_Count size);
void ADIOI_Datatype_iscontig(MPI_Datatype datatype, int *flag);
@ -117,7 +117,7 @@ mca_io_base_module_2_0_0_t mca_io_romio321_module = {
* MPI_Status_set_elements (almost like they planned that... hmmm...).
*/
int MPIR_Status_set_bytes(ompi_status_public_t *status,
struct ompi_datatype_t *datatype, int nbytes)
struct ompi_datatype_t *datatype, MPI_Count nbytes)
{
/* Note that ROMIO is going to give a number of *bytes* here, but
MPI_STATUS_SET_ELEMENTS requires a number of *elements*. So
@ -127,7 +127,7 @@ int MPIR_Status_set_bytes(ompi_status_public_t *status,
we do the right calculations there. This prevents roundoff
errors here, potentially "losing" bytes in the process. */
MPI_Status_set_elements(status, MPI_CHAR, nbytes);
MPI_Status_set_elements_x(status, MPI_CHAR, nbytes);
return MPI_SUCCESS;
}