r10640 - in mpich2/trunk/src/mpi/romio/adio: ad_nfs common include
Author: goodell Date: 2012-11-20 16:20:58 -0600 (Tue, 20 Nov 2012) New Revision: 10640 Modified: mpich2/trunk/src/mpi/romio/adio/ad_nfs/ad_nfs_open.c mpich2/trunk/src/mpi/romio/adio/ad_nfs/ad_nfs_resize.c mpich2/trunk/src/mpi/romio/adio/common/ad_fstype.c mpich2/trunk/src/mpi/romio/adio/common/ad_opencoll_failsafe.c mpich2/trunk/src/mpi/romio/adio/common/ad_resize.c mpich2/trunk/src/mpi/romio/adio/common/adi_close.c mpich2/trunk/src/mpi/romio/adio/common/error.c mpich2/trunk/src/mpi/romio/adio/include/adioi.h Log: update error checkings in ADIO Adds a new helper function, ADIOI_Err_create_code. Contributed by IBM. Based on patch 0012 from code discussions. Modified: mpich2/trunk/src/mpi/romio/adio/ad_nfs/ad_nfs_open.c =================================================================== --- mpich2/trunk/src/mpi/romio/adio/ad_nfs/ad_nfs_open.c 2012-11-20 22:20:57 UTC (rev 10639) +++ mpich2/trunk/src/mpi/romio/adio/ad_nfs/ad_nfs_open.c 2012-11-20 22:20:58 UTC (rev 10640) @@ -91,6 +91,19 @@ __LINE__, MPI_ERR_READ_ONLY, "**ioneedrd", 0); } + else if(errno == EISDIR) { + *error_code = MPIO_Err_create_code(MPI_SUCCESS, + MPIR_ERR_RECOVERABLE, myname, + __LINE__, MPI_ERR_BAD_FILE, + "**filename", 0); + } + else if(errno == EEXIST) { + *error_code = MPIO_Err_create_code(MPI_SUCCESS, + MPIR_ERR_RECOVERABLE, myname, + __LINE__, MPI_ERR_FILE_EXISTS, + "**fileexist", 0); + + } else { *error_code = MPIO_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, myname, Modified: mpich2/trunk/src/mpi/romio/adio/ad_nfs/ad_nfs_resize.c =================================================================== --- mpich2/trunk/src/mpi/romio/adio/ad_nfs/ad_nfs_resize.c 2012-11-20 22:20:57 UTC (rev 10639) +++ mpich2/trunk/src/mpi/romio/adio/ad_nfs/ad_nfs_resize.c 2012-11-20 22:20:58 UTC (rev 10640) @@ -20,15 +20,13 @@ void ADIOI_NFS_Resize(ADIO_File fd, ADIO_Offset size, int *error_code) { int err; - static char myname[] = "ADIOI_GEN_RESIZE"; + static char myname[] = "ADIOI_NFS_RESIZE"; err = ftruncate(fd->fd_sys, size); /* --BEGIN ERROR HANDLING-- */ if (err == -1) { - *error_code = MPIO_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, - myname, __LINE__, MPI_ERR_IO, - "**io", "**io %s", strerror(errno)); + *error_code = ADIOI_Err_create_code(myname, fd->filename, errno); return; } /* --END ERROR HANDLING-- */ Modified: mpich2/trunk/src/mpi/romio/adio/common/ad_fstype.c =================================================================== --- mpich2/trunk/src/mpi/romio/adio/common/ad_fstype.c 2012-11-20 22:20:57 UTC (rev 10639) +++ mpich2/trunk/src/mpi/romio/adio/common/ad_fstype.c 2012-11-20 22:20:58 UTC (rev 10640) @@ -264,18 +264,24 @@ err = statvfs(filename, &vfsbuf); } while (err && (errno == ESTALE)); - if (err && (errno == ENOENT)) { + if (err) { /* ENOENT may be returned in two cases: * 1) no directory entry for "filename" * 2) "filename" is a dangling symbolic link * * ADIO_FileSysType_parentdir tries to deal with both cases. */ - char *dir; - ADIO_FileSysType_parentdir(filename, &dir); - err = statvfs(dir, &vfsbuf); + if (errno == ENOENT) { + char *dir; + ADIO_FileSysType_parentdir(filename, &dir); + err = statvfs(dir, &vfsbuf); - ADIOI_Free(dir); + ADIOI_Free(dir); + } + else { + *error_code = ADIOI_Err_create_code(myname, filename, errno); + if(*error_code != MPI_SUCCESS) return; + } } /* --BEGIN ERROR HANDLING-- */ @@ -315,11 +321,17 @@ err = statfs(filename, &fsbuf); } while (err && (errno == ESTALE)); - if (err && (errno == ENOENT)) { - char *dir; - ADIO_FileSysType_parentdir(filename, &dir); - err = statfs(dir, &fsbuf); - ADIOI_Free(dir); + if (err) { + if(errno == ENOENT) { + char *dir; + ADIO_FileSysType_parentdir(filename, &dir); + err = statfs(dir, &fsbuf); + ADIOI_Free(dir); + } + else { + *error_code = ADIOI_Err_create_code(myname, filename, errno); + if(*error_code != MPI_SUCCESS) return; + } } /* --BEGIN ERROR HANDLING-- */ @@ -428,11 +440,17 @@ err = stat(filename, &sbuf); } while (err && (errno == ESTALE)); - if (err && (errno == ENOENT)) { - char *dir; - ADIO_FileSysType_parentdir(filename, &dir); - err = stat(dir, &sbuf); - ADIOI_Free(dir); + if (err) { + if(errno == ENOENT) { + char *dir; + ADIO_FileSysType_parentdir(filename, &dir); + err = stat(dir, &sbuf); + ADIOI_Free(dir); + } + else{ + *error_code = ADIOI_Err_create_code(myname, filename, errno); + if(*error_code != MPI_SUCCESS) return; + } } if (err) { Modified: mpich2/trunk/src/mpi/romio/adio/common/ad_opencoll_failsafe.c =================================================================== --- mpich2/trunk/src/mpi/romio/adio/common/ad_opencoll_failsafe.c 2012-11-20 22:20:57 UTC (rev 10639) +++ mpich2/trunk/src/mpi/romio/adio/common/ad_opencoll_failsafe.c 2012-11-20 22:20:58 UTC (rev 10640) @@ -74,6 +74,7 @@ if (*error_code != MPI_SUCCESS) (*(fd->fns->ADIOI_xxx_Open))(fd, error_code); + if(*error_code != MPI_SUCCESS) return; /* if we turned off EXCL earlier, then we should turn it back on */ if (fd->access_mode != orig_amode_excl) fd->access_mode = orig_amode_excl; Modified: mpich2/trunk/src/mpi/romio/adio/common/ad_resize.c =================================================================== --- mpich2/trunk/src/mpi/romio/adio/common/ad_resize.c 2012-11-20 22:20:57 UTC (rev 10639) +++ mpich2/trunk/src/mpi/romio/adio/common/ad_resize.c 2012-11-20 22:20:58 UTC (rev 10640) @@ -29,9 +29,7 @@ /* --BEGIN ERROR HANDLING-- */ if (err == -1) { - *error_code = MPIO_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, - myname, __LINE__, MPI_ERR_IO, - "**io", "**io %s", strerror(errno)); + *error_code = ADIOI_Err_create_code(myname, fd->filename, errno); return; } /* --END ERROR HANDLING-- */ Modified: mpich2/trunk/src/mpi/romio/adio/common/adi_close.c =================================================================== --- mpich2/trunk/src/mpi/romio/adio/common/adi_close.c 2012-11-20 22:20:57 UTC (rev 10639) +++ mpich2/trunk/src/mpi/romio/adio/common/adi_close.c 2012-11-20 22:20:58 UTC (rev 10640) @@ -39,10 +39,7 @@ fd->fd_direct = -1; if (err == -1 || derr == -1) { - *error_code = MPIO_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, - myname, __LINE__, MPI_ERR_IO, - "**io", - "**io %s", strerror(errno)); + *error_code = ADIOI_Err_create_code(myname, fd->filename, errno); } else *error_code = MPI_SUCCESS; } Modified: mpich2/trunk/src/mpi/romio/adio/common/error.c =================================================================== --- mpich2/trunk/src/mpi/romio/adio/common/error.c 2012-11-20 22:20:57 UTC (rev 10639) +++ mpich2/trunk/src/mpi/romio/adio/common/error.c 2012-11-20 22:20:58 UTC (rev 10640) @@ -36,3 +36,66 @@ return error_code; } +/* Returns an MPI error code corresponding to "my_errno", for function "myname" + * and the given file, "filename". */ +int ADIOI_Err_create_code(char *myname, char *filename, int my_errno) +{ + int error_code = MPI_SUCCESS; + if(!my_errno) return MPI_SUCCESS; + + switch(my_errno) { + case EACCES: + error_code = MPIO_Err_create_code(MPI_SUCCESS, + MPIR_ERR_RECOVERABLE, myname, + __LINE__, MPI_ERR_ACCESS, + "**fileaccess", + "**fileaccess %s", + filename ); + break; + case ENAMETOOLONG: + error_code = MPIO_Err_create_code(MPI_SUCCESS, + MPIR_ERR_RECOVERABLE, myname, + __LINE__, MPI_ERR_BAD_FILE, + "**filenamelong", + "**filenamelong %s %d", + filename, + strlen(filename)); + break; + case ENOENT: + error_code = MPIO_Err_create_code(MPI_SUCCESS, + MPIR_ERR_RECOVERABLE, myname, + __LINE__, MPI_ERR_NO_SUCH_FILE, + "**filenoexist", + "**filenoexist %s", + filename); + break; + case EISDIR: + error_code = MPIO_Err_create_code(MPI_SUCCESS, + MPIR_ERR_RECOVERABLE, + myname, __LINE__, + MPI_ERR_BAD_FILE, + "**filenamedir", + "**filenamedir %s", + filename); + break; + case EROFS: + error_code = MPIO_Err_create_code(MPI_SUCCESS, + MPIR_ERR_RECOVERABLE, myname, + __LINE__, MPI_ERR_READ_ONLY, + "**ioneedrd", 0 ); + break; + case EEXIST: + error_code = MPIO_Err_create_code(MPI_SUCCESS, + MPIR_ERR_RECOVERABLE, myname, + __LINE__, MPI_ERR_FILE_EXISTS, + "**fileexist", 0); + break; + default: + error_code = MPIO_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, + myname, __LINE__, MPI_ERR_IO, "**io", + "**io %s", strerror(my_errno)); + break; + } + + return error_code; +} Modified: mpich2/trunk/src/mpi/romio/adio/include/adioi.h =================================================================== --- mpich2/trunk/src/mpi/romio/adio/include/adioi.h 2012-11-20 22:20:57 UTC (rev 10639) +++ mpich2/trunk/src/mpi/romio/adio/include/adioi.h 2012-11-20 22:20:58 UTC (rev 10640) @@ -561,6 +561,7 @@ int MPIR_Status_set_bytes(MPI_Status *status, MPI_Datatype datatype, int nbytes); int ADIOI_Uses_generic_read(ADIO_File fd); int ADIOI_Uses_generic_write(ADIO_File fd); +int ADIOI_Err_create_code(char *myname, char *filename, int my_errno); int ADIOI_FAKE_IODone(ADIO_Request *request, ADIO_Status *status,
participants (1)
-
goodell@mcs.anl.gov