Whoa; I'm not sure we want to apply this.

All ROMIO patches *must* be coordinated with the ROMIO maintainers. Otherwise this becomes a complete nightmare of logistics. There's already a few other ROMIO patches that we have consciously chosen not to apply because of the tangled issues that arise because of it, such as:

- "what version of ROMIO is in OMPI?"
- "do you have patch X?"
- ...etc.

Hence, it is best to coordinate all ROMIO patches with the upstream ROMIO maintainers.



On Nov 8, 2007, at 7:44 AM, a...@osl.iu.edu wrote:

Author: adi
Date: 2007-11-08 07:44:10 EST (Thu, 08 Nov 2007)
New Revision: 16691
URL: https://svn.open-mpi.org/trac/ompi/changeset/16691

Log:
upstream patch, provided by Jiri Polach. Re #733

Text files modified:
trunk/ompi/mca/io/romio/romio/adio/common/ad_open.c | 32 +++++++ +++++++++++++++++++++++++
  1 files changed, 32 insertions(+), 0 deletions(-)

Modified: trunk/ompi/mca/io/romio/romio/adio/common/ad_open.c
= = = = = = = = ======================================================================
--- trunk/ompi/mca/io/romio/romio/adio/common/ad_open.c (original)
+++ trunk/ompi/mca/io/romio/romio/adio/common/ad_open.c 2007-11-08 07:44:10 EST (Thu, 08 Nov 2007)
@@ -172,6 +172,37 @@
     */
/* pvfs2 handles opens specially, so it is actually more efficent for that
     * file system if we skip this optimization */
+ /* NFS handles opens especially poorly, so we cannot use this optimization
+     * on that FS */
+    if (fd->file_system == ADIO_NFS) {
+        /* no optimizations for NFS: */
+ if ((access_mode & ADIO_CREATE) && (access_mode & ADIO_EXCL)) { + /* the open should fail if the file exists. Only *1* process should + check this. Otherwise, if all processes try to check and the file + does not exist, one process will create the file and others who
+          reach later will return error. */
+           if(rank == fd->hints->ranklist[0]) {
+                fd->access_mode = access_mode;
+                (*(fd->fns->ADIOI_xxx_Open))(fd, error_code);
+                MPI_Bcast(error_code, 1, MPI_INT, \
+                                fd->hints->ranklist[0], fd->comm);
+ /* if no error, close the file and reopen normally below */
+                if (*error_code == MPI_SUCCESS)
+ (*(fd->fns->ADIOI_xxx_Close))(fd, error_code);
+           }
+           else MPI_Bcast(error_code, 1, MPI_INT,
+                           fd->hints->ranklist[0], fd->comm);
+           if (*error_code != MPI_SUCCESS) {
+                   goto fn_exit;
+           }
+           else {
+               /* turn off EXCL for real open */
+               access_mode = access_mode ^ ADIO_EXCL;
+           }
+        }
+    } else {
+
+           /* the actual optimized create on one, open on all */
    if (access_mode & ADIO_CREATE && fd->file_system != ADIO_PVFS2) {
       if(rank == fd->hints->ranklist[0]) {
           /* remove delete_on_close flag if set */
@@ -201,6 +232,7 @@
                   access_mode ^= ADIO_EXCL;
       }
    }
+    }

/* if we are doing deferred open, non-aggregators should return now */
    if (fd->hints->deferred_open ) {
_______________________________________________
svn-full mailing list
svn-f...@open-mpi.org
http://www.open-mpi.org/mailman/listinfo.cgi/svn-full


--
Jeff Squyres
Cisco Systems

Reply via email to