00001
00002
00003
00004
00005
00006
00007
00008 #include "ad_panfs.h"
00009
00010 #ifdef HAVE_UNISTD_H
00011 #include <unistd.h>
00012 #endif
00013
00014 void ADIOI_PANFS_Resize(ADIO_File fd, ADIO_Offset size, int *error_code)
00015 {
00016 int err;
00017 int myrank;
00018 struct stat stat_buf;
00019 static char myname[] = "ADIOI_PANFS_RESIZE";
00020
00021 MPI_Comm_rank(fd->comm, &myrank);
00022 if (!myrank)
00023 {
00024 AD_PANFS_RETRY(ftruncate(fd->fd_sys,size),err);
00025 MPI_Barrier(fd->comm);
00026 }
00027 else
00028 {
00029 MPI_Barrier(fd->comm);
00030 AD_PANFS_RETRY(fstat(fd->fd_sys,&stat_buf),err);
00031 if(((ADIO_Offset)stat_buf.st_size) != size)
00032 {
00033
00034 FPRINTF(stderr, "%s: Rank %d: Resize failed: requested=%llu actual=%llu.\n",myname,myrank,size,stat_buf.st_size);
00035 MPI_Abort(MPI_COMM_WORLD, 1);
00036 }
00037 }
00038
00039
00040 if (err == -1) {
00041 *error_code = MPIO_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE,
00042 myname, __LINE__, MPI_ERR_IO,
00043 "**io", "**io %s", strerror(errno));
00044 return;
00045 }
00046
00047
00048 *error_code = MPI_SUCCESS;
00049 }