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 }