From 0a1b735eed4e41f88b4e08af4fb1db99e08edf57 Mon Sep 17 00:00:00 2001 From: Edgar Gabriel Date: Thu, 7 Jan 2016 08:29:17 -0600 Subject: [PATCH] use the actual preadv and pwritev functions if available. That's what the fbtl interfaces have been designed for. --- ompi/mca/fbtl/posix/configure.m4 | 3 +++ ompi/mca/fbtl/posix/fbtl_posix_preadv.c | 7 +++++++ ompi/mca/fbtl/posix/fbtl_posix_pwritev.c | 8 ++++++++ 3 files changed, 18 insertions(+) diff --git a/ompi/mca/fbtl/posix/configure.m4 b/ompi/mca/fbtl/posix/configure.m4 index 8a6d548ea5..a03bd1a6f8 100644 --- a/ompi/mca/fbtl/posix/configure.m4 +++ b/ompi/mca/fbtl/posix/configure.m4 @@ -32,6 +32,9 @@ AC_DEFUN([MCA_ompi_fbtl_posix_CONFIG],[ [aio_write], [rt], [fbtl_posix_happy="yes"])]) + AC_CHECK_FUNCS([pwritev],[],[]) + AC_CHECK_FUNCS([preadv],[],[]) + AS_IF([test "$fbtl_posix_happy" = "yes"], [$1], [$2]) diff --git a/ompi/mca/fbtl/posix/fbtl_posix_preadv.c b/ompi/mca/fbtl/posix/fbtl_posix_preadv.c index ceb8b1d984..27dc589ee0 100644 --- a/ompi/mca/fbtl/posix/fbtl_posix_preadv.c +++ b/ompi/mca/fbtl/posix/fbtl_posix_preadv.c @@ -80,6 +80,12 @@ ssize_t mca_fbtl_posix_preadv (mca_io_ompio_file_t *fh ) } } +#if defined(HAVE_PREADV) + ret_code = preadv (fh->fd, iov, iov_count, iov_offset); + if ( 0 < ret_code ) { + bytes_read+=ret_code; + } +#else if (-1 == lseek (fh->fd, iov_offset, SEEK_SET)) { opal_output(1, "lseek:%s", strerror(errno)); free(iov); @@ -89,6 +95,7 @@ ssize_t mca_fbtl_posix_preadv (mca_io_ompio_file_t *fh ) if ( 0 < ret_code ) { bytes_read+=ret_code; } +#endif else if ( ret_code == -1 ) { opal_output(1, "readv:%s", strerror(errno)); free(iov); diff --git a/ompi/mca/fbtl/posix/fbtl_posix_pwritev.c b/ompi/mca/fbtl/posix/fbtl_posix_pwritev.c index 5208716d11..fbf69489ff 100644 --- a/ompi/mca/fbtl/posix/fbtl_posix_pwritev.c +++ b/ompi/mca/fbtl/posix/fbtl_posix_pwritev.c @@ -93,6 +93,13 @@ ssize_t mca_fbtl_posix_pwritev(mca_io_ompio_file_t *fh ) } */ +#if defined (HAVE_PWRITEV) + ret_code = pwritev (fh->fd, iov, iov_count, iov_offset); + if ( 0 < ret_code ) { + bytes_written += ret_code; + } + +#else if (-1 == lseek (fh->fd, iov_offset, SEEK_SET)) { opal_output(1, "lseek:%s", strerror(errno)); free(iov); @@ -102,6 +109,7 @@ ssize_t mca_fbtl_posix_pwritev(mca_io_ompio_file_t *fh ) if ( 0 < ret_code ) { bytes_written += ret_code; } +#endif else if (-1 == ret_code ) { opal_output(1, "writev:%s", strerror(errno)); free (iov);