00001
00002
00003
00004
00005
00006
00007
00008 #include "mpioimpl.h"
00009
00010 #ifdef HAVE_WEAK_SYMBOLS
00011
00012 #if defined(HAVE_PRAGMA_WEAK)
00013 #pragma weak MPI_File_set_size = PMPI_File_set_size
00014 #elif defined(HAVE_PRAGMA_HP_SEC_DEF)
00015 #pragma _HP_SECONDARY_DEF PMPI_File_set_size MPI_File_set_size
00016 #elif defined(HAVE_PRAGMA_CRI_DUP)
00017 #pragma _CRI duplicate MPI_File_set_size as PMPI_File_set_size
00018
00019 #endif
00020
00021
00022 #define MPIO_BUILD_PROFILING
00023 #include "mpioprof.h"
00024 #endif
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035 int MPI_File_set_size(MPI_File mpi_fh, MPI_Offset size)
00036 {
00037 int error_code;
00038 ADIO_File fh;
00039 static char myname[] = "MPI_FILE_SET_SIZE";
00040 MPI_Offset tmp_sz;
00041
00042 #ifdef MPI_hpux
00043 int fl_xmpi;
00044
00045 HPMP_IO_START(fl_xmpi, BLKMPIFILESETSIZE, TRDTBLOCK, fh,
00046 MPI_DATATYPE_NULL, -1);
00047 #endif
00048
00049 MPIU_THREAD_CS_ENTER(ALLFUNC,);
00050
00051 fh = MPIO_File_resolve(mpi_fh);
00052
00053
00054 MPIO_CHECK_FILE_HANDLE(fh, myname, error_code);
00055 MPIO_CHECK_NOT_SEQUENTIAL_MODE(fh, myname, error_code);
00056
00057 if (size < 0) {
00058 error_code = MPIO_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE,
00059 myname, __LINE__, MPI_ERR_ARG,
00060 "**iobadsize", 0);
00061 error_code = MPIO_Err_return_file(fh, error_code);
00062 goto fn_exit;
00063 }
00064
00065
00066 tmp_sz = size;
00067 MPI_Bcast(&tmp_sz, 1, ADIO_OFFSET, 0, fh->comm);
00068
00069
00070 if (tmp_sz != size) {
00071 error_code = MPIO_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE,
00072 myname, __LINE__, MPI_ERR_ARG,
00073 "**notsame", 0);
00074 error_code = MPIO_Err_return_file(fh, error_code);
00075 goto fn_exit;
00076 }
00077
00078
00079 ADIOI_TEST_DEFERRED(fh, "MPI_File_set_size", &error_code);
00080
00081 ADIO_Resize(fh, size, &error_code);
00082
00083
00084
00085 if (error_code != MPI_SUCCESS)
00086 error_code = MPIO_Err_return_file(fh, error_code);
00087
00088
00089 #ifdef MPI_hpux
00090 HPMP_IO_END(fl_xmpi, fh, MPI_DATATYPE_NULL, -1);
00091 #endif
00092
00093 fn_exit:
00094 MPIU_THREAD_CS_EXIT(ALLFUNC,);
00095
00096 return error_code;
00097 }