1
1

upstream patch, provided by Jiri Polach. Re #733

This commit was SVN r16691.
Этот коммит содержится в:
Adrian Knoth 2007-11-08 12:44:10 +00:00
родитель 11f1642b9e
Коммит 8dca19cb3b

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

@ -172,6 +172,37 @@ MPI_File ADIO_Open(MPI_Comm orig_comm,
*/
/* 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 @@ MPI_File ADIO_Open(MPI_Comm orig_comm,
access_mode ^= ADIO_EXCL;
}
}
}
/* if we are doing deferred open, non-aggregators should return now */
if (fd->hints->deferred_open ) {