root/ompi/mca/io/romio321/romio/adio/ad_zoidfs/ad_zoidfs_common.c

/* [<][>][^][v][top][bottom][index][help] */

DEFINITIONS

This source file includes following definitions.
  1. ADIOI_ZOIDFS_End
  2. ADIOI_ZOIDFS_End_call
  3. ADIOI_ZOIDFS_Init
  4. ADIOI_ZOIDFS_makeattribs
  5. ADIOI_ZOIDFS_error_convert

   1 /* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
   2 /* 
   3  *   Copyright (C) 2003 University of Chicago. 
   4  *   See COPYRIGHT notice in top-level directory.
   5  */
   6 
   7 #include "ad_zoidfs.h"
   8 #include "ad_zoidfs_common.h"
   9 #include <unistd.h>
  10 #include <sys/types.h>
  11 
  12 /* keyval hack to both tell us if we've already initialized zoidfs and also
  13  * close it down when mpi exits */
  14 int ADIOI_ZOIDFS_Initialized = MPI_KEYVAL_INVALID;
  15 
  16 void ADIOI_ZOIDFS_End(int *error_code)
  17 {
  18     int ret;
  19     static char myname[] = "ADIOI_ZOIDFS_END";
  20 
  21     ret = zoidfs_finalize();
  22 
  23     /* --BEGIN ERROR HANDLING-- */
  24     if (ret != 0 ) {
  25         *error_code = MPIO_Err_create_code(MPI_SUCCESS,
  26                                            MPIR_ERR_RECOVERABLE,
  27                                            myname, __LINE__,
  28                                            ADIOI_ZOIDFS_error_convert(ret),
  29                                            "Error in zoidfs_finalize", 0);
  30         return;
  31     }
  32     /* --END ERROR HANDLING-- */
  33 
  34     *error_code = MPI_SUCCESS;
  35 }
  36 
  37 int ADIOI_ZOIDFS_End_call(MPI_Comm comm, int keyval, 
  38                          void *attribute_val, void *extra_state)
  39 {
  40     int error_code;
  41     ADIOI_ZOIDFS_End(&error_code);
  42     MPI_Keyval_free(&keyval);
  43     return error_code;
  44 }
  45 
  46 void ADIOI_ZOIDFS_Init(int rank, int *error_code )
  47 {
  48     int ret;
  49     static char myname[] = "ADIOI_ZOIDFS_INIT";
  50 
  51     /* do nothing if we've already fired up the zoidfs interface */
  52     if (ADIOI_ZOIDFS_Initialized != MPI_KEYVAL_INVALID) {
  53         *error_code = MPI_SUCCESS;
  54         return;
  55     }
  56 
  57     ret = zoidfs_init();
  58     if (ret < 0 ) {
  59         *error_code = MPIO_Err_create_code(MPI_SUCCESS,
  60                                            MPIR_ERR_RECOVERABLE,
  61                                            myname, __LINE__,
  62                                            ADIOI_ZOIDFS_error_convert(ret),
  63                                            "Error in zoidfs_init",
  64                                            0);
  65         return;
  66     }
  67     
  68     MPI_Keyval_create(MPI_NULL_COPY_FN, ADIOI_ZOIDFS_End_call,
  69                       &ADIOI_ZOIDFS_Initialized, (void *)0); 
  70     /* just like romio does, we make a dummy attribute so we 
  71      * get cleaned up */
  72     MPI_Attr_put(MPI_COMM_SELF, ADIOI_ZOIDFS_Initialized, (void *)0);
  73 }
  74 
  75 void ADIOI_ZOIDFS_makeattribs(zoidfs_sattr_t * attribs)
  76 {
  77     memset(attribs, 0, sizeof(zoidfs_sattr_t));
  78 
  79     attribs->mask = ZOIDFS_ATTR_MODE;
  80     attribs->mode = 0644;
  81 }
  82 
  83 int ADIOI_ZOIDFS_error_convert(int error)
  84 {
  85     switch (error)
  86     {
  87         case ZFSERR_PERM: /* ??? */
  88         case ZFSERR_ACCES:
  89             return MPI_ERR_ACCESS;
  90         case ZFSERR_NOENT:
  91         case ZFSERR_NXIO: /* ??? */
  92         case ZFSERR_NODEV: /* ??? */
  93             return MPI_ERR_NO_SUCH_FILE;
  94         case ZFSERR_IO:
  95             return MPI_ERR_IO;
  96         case ZFSERR_EXIST:
  97             return MPI_ERR_FILE_EXISTS;
  98         case ZFSERR_NOTDIR: /* ??? */
  99         case ZFSERR_ISDIR: /* ??? */
 100         case ZFSERR_NAMETOOLONG:
 101             return MPI_ERR_BAD_FILE;
 102         case ZFSERR_INVAL:
 103         case ZFSERR_STALE:
 104             return MPI_ERR_FILE;
 105         case ZFSERR_FBIG: /* ??? */
 106         case ZFSERR_NOSPC:
 107             return MPI_ERR_NO_SPACE;
 108         case ZFSERR_ROFS:
 109             return MPI_ERR_READ_ONLY;
 110         case ZFSERR_NOTIMPL:
 111             return MPI_ERR_UNSUPPORTED_OPERATION;
 112         case ZFSERR_DQUOT:
 113             return MPI_ERR_QUOTA;
 114         /* case ZFSERR_NOTEMPTY: */
 115         /* case ZFSERR_WFLUSH: */
 116         /* case ZFSERR_OTHER: */
 117         case ZFSERR_NOMEM:
 118             return MPI_ERR_INTERN;
 119         default:
 120             return MPI_UNDEFINED;
 121     }
 122 }
 123 
 124 /* 
 125  * vim: ts=8 sts=4 sw=4 noexpandtab 
 126  */

/* [<][>][^][v][top][bottom][index][help] */