From 0f59ce659198ef99d37c89f72a3f25a64036d287 Mon Sep 17 00:00:00 2001 From: Edgar Gabriel Date: Sun, 7 Sep 2014 15:14:57 +0000 Subject: [PATCH] use the fbtl return value as originally intended, namely to retrieve the number of bytes written and read. Status contains now the actual number of bytes written for individual operations. For collective operations, this is unfortunately not possible. This commit was SVN r32674. --- ompi/mca/fbtl/posix/fbtl_posix_preadv.c | 17 +++++++++++++---- ompi/mca/fbtl/posix/fbtl_posix_pwritev.c | 17 ++++++++++++----- .../fcoll/dynamic/fcoll_dynamic_file_read_all.c | 2 +- .../dynamic/fcoll_dynamic_file_write_all.c | 2 +- .../fcoll/static/fcoll_static_file_read_all.c | 2 +- .../fcoll/static/fcoll_static_file_write_all.c | 2 +- .../two_phase/fcoll_two_phase_file_read_all.c | 2 +- .../two_phase/fcoll_two_phase_file_write_all.c | 4 ++-- ompi/mca/io/ompio/io_ompio_file_read.c | 9 ++++++--- ompi/mca/io/ompio/io_ompio_file_write.c | 9 ++++++--- 10 files changed, 44 insertions(+), 22 deletions(-) diff --git a/ompi/mca/fbtl/posix/fbtl_posix_preadv.c b/ompi/mca/fbtl/posix/fbtl_posix_preadv.c index 3b49c5e263..8e17968847 100644 --- a/ompi/mca/fbtl/posix/fbtl_posix_preadv.c +++ b/ompi/mca/fbtl/posix/fbtl_posix_preadv.c @@ -32,7 +32,9 @@ size_t mca_fbtl_posix_preadv (mca_io_ompio_file_t *fh ) struct iovec *iov = NULL; int iov_count = 0; OMPI_MPI_OFFSET_TYPE iov_offset = 0; - + ssize_t bytes_read=0, ret_code=0; + size_t ret=0; + if (NULL == fh->f_io_array) { return OMPI_ERROR; } @@ -79,12 +81,18 @@ size_t mca_fbtl_posix_preadv (mca_io_ompio_file_t *fh ) perror ("fseek"); return OMPI_ERROR; } - if (-1 == readv (fh->fd, iov, iov_count)) { + ret_code = readv (fh->fd, iov, iov_count); + if ( 0 < ret_code ) { + bytes_read+=ret_code; + } + else if ( ret_code == -1 ) { perror ("readv"); return OMPI_ERROR; } - else { + else if ( 0 == ret_code ){ + /* end of file reached, no point in continue reading; */ iov_count = 0; + break; } } @@ -93,5 +101,6 @@ size_t mca_fbtl_posix_preadv (mca_io_ompio_file_t *fh ) iov = NULL; } - return OMPI_SUCCESS; + ret = (size_t) bytes_read; + return ret; } diff --git a/ompi/mca/fbtl/posix/fbtl_posix_pwritev.c b/ompi/mca/fbtl/posix/fbtl_posix_pwritev.c index 29f34521e0..6840ed371c 100644 --- a/ompi/mca/fbtl/posix/fbtl_posix_pwritev.c +++ b/ompi/mca/fbtl/posix/fbtl_posix_pwritev.c @@ -27,13 +27,15 @@ #include "ompi/constants.h" #include "ompi/mca/fbtl/fbtl.h" -size_t mca_fbtl_posix_pwritev (mca_io_ompio_file_t *fh ) +size_t mca_fbtl_posix_pwritev(mca_io_ompio_file_t *fh ) { /*int *fp = NULL;*/ int i, block = 1; struct iovec *iov = NULL; int iov_count = 0; OMPI_MPI_OFFSET_TYPE iov_offset = 0; + size_t ret=0; + ssize_t ret_code=0, bytes_written=0; if (NULL == fh->f_io_array) { return OMPI_ERROR; @@ -92,18 +94,23 @@ size_t mca_fbtl_posix_pwritev (mca_io_ompio_file_t *fh ) perror ("lseek"); return OMPI_ERROR; } - - if (-1 == writev (fh->fd, iov, iov_count)) { + ret_code = writev (fh->fd, iov, iov_count); + if ( 0 < ret_code ) { + bytes_written += ret_code; + } + else if (-1 == ret_code ) { perror ("writev"); - return OMPI_ERROR; + goto exit; } iov_count = 0; } +exit: if (NULL != iov) { free (iov); iov = NULL; } - return OMPI_SUCCESS; + ret = (size_t) bytes_written; + return ret; } diff --git a/ompi/mca/fcoll/dynamic/fcoll_dynamic_file_read_all.c b/ompi/mca/fcoll/dynamic/fcoll_dynamic_file_read_all.c index 1632c03899..8a5e8ec6da 100644 --- a/ompi/mca/fcoll/dynamic/fcoll_dynamic_file_read_all.c +++ b/ompi/mca/fcoll/dynamic/fcoll_dynamic_file_read_all.c @@ -617,7 +617,7 @@ #endif if (fh->f_num_of_io_entries) { - if (OMPI_SUCCESS != fh->f_fbtl->fbtl_preadv (fh)) { + if ( 0 > fh->f_fbtl->fbtl_preadv (fh)) { opal_output (1, "READ FAILED\n"); ret = OMPI_ERROR; goto exit; diff --git a/ompi/mca/fcoll/dynamic/fcoll_dynamic_file_write_all.c b/ompi/mca/fcoll/dynamic/fcoll_dynamic_file_write_all.c index 47f97d6664..89d30641a5 100644 --- a/ompi/mca/fcoll/dynamic/fcoll_dynamic_file_write_all.c +++ b/ompi/mca/fcoll/dynamic/fcoll_dynamic_file_write_all.c @@ -926,7 +926,7 @@ mca_fcoll_dynamic_file_write_all (mca_io_ompio_file_t *fh, if (fh->f_num_of_io_entries) { - if (OMPI_SUCCESS != fh->f_fbtl->fbtl_pwritev (fh)) { + if ( 0 > fh->f_fbtl->fbtl_pwritev (fh)) { opal_output (1, "WRITE FAILED\n"); ret = OMPI_ERROR; goto exit; diff --git a/ompi/mca/fcoll/static/fcoll_static_file_read_all.c b/ompi/mca/fcoll/static/fcoll_static_file_read_all.c index a29db98900..af574a46a4 100644 --- a/ompi/mca/fcoll/static/fcoll_static_file_read_all.c +++ b/ompi/mca/fcoll/static/fcoll_static_file_read_all.c @@ -687,7 +687,7 @@ mca_fcoll_static_file_read_all (mca_io_ompio_file_t *fh, #endif if (fh->f_num_of_io_entries) { - if (OMPI_SUCCESS != fh->f_fbtl->fbtl_preadv (fh)) { + if ( 0 > fh->f_fbtl->fbtl_preadv (fh)) { opal_output (1, "READ FAILED\n"); ret = OMPI_ERROR; goto exit; diff --git a/ompi/mca/fcoll/static/fcoll_static_file_write_all.c b/ompi/mca/fcoll/static/fcoll_static_file_write_all.c index 6c448021c5..e72177105a 100644 --- a/ompi/mca/fcoll/static/fcoll_static_file_write_all.c +++ b/ompi/mca/fcoll/static/fcoll_static_file_write_all.c @@ -849,7 +849,7 @@ mca_fcoll_static_file_write_all (mca_io_ompio_file_t *fh, #endif if (fh->f_num_of_io_entries) { - if (OMPI_SUCCESS != fh->f_fbtl->fbtl_pwritev (fh)) { + if ( 0 > fh->f_fbtl->fbtl_pwritev (fh)) { opal_output (1, "WRITE FAILED\n"); ret = OMPI_ERROR; goto exit; diff --git a/ompi/mca/fcoll/two_phase/fcoll_two_phase_file_read_all.c b/ompi/mca/fcoll/two_phase/fcoll_two_phase_file_read_all.c index e2cf78ae0b..59f9eb0904 100644 --- a/ompi/mca/fcoll/two_phase/fcoll_two_phase_file_read_all.c +++ b/ompi/mca/fcoll/two_phase/fcoll_two_phase_file_read_all.c @@ -706,7 +706,7 @@ static int two_phase_read_and_exch(mca_io_ompio_file_t *fh, fh->f_num_of_io_entries = 1; if (fh->f_num_of_io_entries){ - if (OMPI_SUCCESS != fh->f_fbtl->fbtl_preadv (fh)) { + if ( 0 > fh->f_fbtl->fbtl_preadv (fh)) { opal_output(1, "READ FAILED\n"); return OMPI_ERROR; } diff --git a/ompi/mca/fcoll/two_phase/fcoll_two_phase_file_write_all.c b/ompi/mca/fcoll/two_phase/fcoll_two_phase_file_write_all.c index 1f9f097abd..e5796bfb1a 100644 --- a/ompi/mca/fcoll/two_phase/fcoll_two_phase_file_write_all.c +++ b/ompi/mca/fcoll/two_phase/fcoll_two_phase_file_write_all.c @@ -809,7 +809,7 @@ static int two_phase_exch_and_write(mca_io_ompio_file_t *fh, #endif if (fh->f_num_of_io_entries){ - if (OMPI_SUCCESS != fh->f_fbtl->fbtl_pwritev (fh)) { + if ( 0 > fh->f_fbtl->fbtl_pwritev (fh)) { opal_output(1, "WRITE FAILED\n"); return OMPI_ERROR; } @@ -1050,7 +1050,7 @@ static int two_phase_exchage_data(mca_io_ompio_file_t *fh, fh->f_io_array[0].length = size; fh->f_io_array[0].memory_address = write_buf; if (fh->f_num_of_io_entries){ - if (OMPI_SUCCESS != fh->f_fbtl->fbtl_preadv (fh)) { + if ( 0 > fh->f_fbtl->fbtl_preadv (fh)) { opal_output(1, "READ FAILED\n"); return OMPI_ERROR; } diff --git a/ompi/mca/io/ompio/io_ompio_file_read.c b/ompi/mca/io/ompio/io_ompio_file_read.c index 41e1c54eb1..ecd2acc785 100644 --- a/ompi/mca/io/ompio/io_ompio_file_read.c +++ b/ompi/mca/io/ompio/io_ompio_file_read.c @@ -80,7 +80,7 @@ int ompio_io_ompio_file_read (mca_io_ompio_file_t *fh, uint32_t iov_count = 0; struct iovec *decoded_iov = NULL; - size_t max_data = 0; + size_t max_data=0, ret_code=0, real_bytes_read=0; int i = 0; /* index into the decoded iovec of the buffer */ int j = 0; /* index into the file vie iovec */ @@ -128,7 +128,10 @@ int ompio_io_ompio_file_read (mca_io_ompio_file_t *fh, &total_bytes_read); if (fh->f_num_of_io_entries) { - fh->f_fbtl->fbtl_preadv (fh); + ret_code = fh->f_fbtl->fbtl_preadv (fh); + if ( 0<= ret_code ) { + real_bytes_read+=ret_code; + } } fh->f_num_of_io_entries = 0; @@ -144,7 +147,7 @@ int ompio_io_ompio_file_read (mca_io_ompio_file_t *fh, } if ( MPI_STATUS_IGNORE != status ) { - status->_ucount = max_data; + status->_ucount = real_bytes_read; } return ret; diff --git a/ompi/mca/io/ompio/io_ompio_file_write.c b/ompi/mca/io/ompio/io_ompio_file_write.c index 792c5aad74..53d595e340 100644 --- a/ompi/mca/io/ompio/io_ompio_file_write.c +++ b/ompi/mca/io/ompio/io_ompio_file_write.c @@ -83,7 +83,7 @@ int ompio_io_ompio_file_write (mca_io_ompio_file_t *fh, struct iovec *decoded_iov = NULL; size_t bytes_per_cycle=0; size_t total_bytes_written = 0; - size_t max_data = 0; + size_t max_data=0, ret_code=0, real_bytes_written=0; int i = 0; /* index into the decoded iovec of the buffer */ int j = 0; /* index into the file view iovec */ @@ -123,7 +123,10 @@ int ompio_io_ompio_file_write (mca_io_ompio_file_t *fh, &total_bytes_written); if (fh->f_num_of_io_entries) { - fh->f_fbtl->fbtl_pwritev (fh); + ret_code =fh->f_fbtl->fbtl_pwritev (fh); + if ( 0<= ret_code ) { + real_bytes_written+=ret_code; + } } fh->f_num_of_io_entries = 0; @@ -139,7 +142,7 @@ int ompio_io_ompio_file_write (mca_io_ompio_file_t *fh, } if ( MPI_STATUS_IGNORE != status ) { - status->_ucount = max_data; + status->_ucount = real_bytes_written; } return ret;