1
1

Commit upstream ROMIO fix: dbad7873926a75adbff0fd0140ae321412f70d66

ROMIO code assumes all processes will use the same ROMIO driver.  we
were not reaching the "find a common file system" logic when NFS was
enabled, everyone stat-ed the file system without errors, but some
processees found a different file system (like if some processes are
writing to NFS and others to UFS)

See discussion beginning here:
http://lists.mpich.org/pipermail/discuss/2014-March/002403.html

Tested-by: Jeff Squyres <jsquyres@cisco.com>

Submitted by Rob Lathan, reviewed by Jeff Squyres

cmr=v1.8:reviewer=ompi-rm1.8

This commit was SVN r31201.
Этот коммит содержится в:
Jeff Squyres 2014-03-25 14:50:07 +00:00
родитель 947233f539
Коммит 8c2b9658ce

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

@ -664,32 +664,28 @@ void ADIO_ResolveFileType(MPI_Comm comm, const char *filename, int *fstype,
}
} else {
ADIO_FileSysType_fncall(filename, &file_system, &myerrcode);
if (myerrcode != MPI_SUCCESS) {
*error_code = myerrcode;
/* the check for file system type will hang if any process got
* an error in ADIO_FileSysType_fncall. Processes encountering
* an error will return early, before the collective file
* system type check below. This case could happen if a full
* path exists on one node but not on others, and no prefix
* like ufs: was provided. see discussion at
* http://www.mcs.anl.gov/web-mail-archive/lists/mpich-discuss/2007/08/msg00042.html
* (edit: now
* http://lists.mcs.anl.gov/pipermail/mpich-discuss/2007-August/002648.html)
*/
/* the check for file system type will hang if any process got
* an error in ADIO_FileSysType_fncall. Processes encountering
* an error will return early, before the collective file
* system type check below. This case could happen if a full
* path exists on one node but not on others, and no prefix
* like ufs: was provided. see discussion at
* http://www.mcs.anl.gov/web-mail-archive/lists/mpich-discuss/2007/08/msg00042.html
* (edit: now
* http://lists.mcs.anl.gov/pipermail/mpich-discuss/2007-August/002648.html)
*/
MPI_Allreduce(error_code, &max_code, 1, MPI_INT, MPI_MAX, comm);
if (max_code != MPI_SUCCESS) {
*error_code = max_code;
return;
}
/* ensure everyone came up with the same file system type */
MPI_Allreduce(&file_system, &min_code, 1, MPI_INT,
MPI_MIN, comm);
if (min_code == ADIO_NFS) file_system = ADIO_NFS;
MPI_Allreduce(&myerrcode, &max_code, 1, MPI_INT, MPI_MAX, comm);
if (max_code != MPI_SUCCESS) {
*error_code = max_code;
return;
}
/* ensure everyone came up with the same file system type */
MPI_Allreduce(&file_system, &min_code, 1, MPI_INT,
MPI_MIN, comm);
if (min_code == ADIO_NFS) file_system = ADIO_NFS;
}
}
else {
/* prefix specified; just match via prefix and assume everyone got