This source file includes following definitions.
- ADIOI_ZOIDFS_End
- ADIOI_ZOIDFS_End_call
- ADIOI_ZOIDFS_Init
- ADIOI_ZOIDFS_makeattribs
- ADIOI_ZOIDFS_error_convert
1
2
3
4
5
6
7 #include "ad_zoidfs.h"
8 #include "ad_zoidfs_common.h"
9 #include <unistd.h>
10 #include <sys/types.h>
11
12
13
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
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
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
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
71
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
115
116
117 case ZFSERR_NOMEM:
118 return MPI_ERR_INTERN;
119 default:
120 return MPI_UNDEFINED;
121 }
122 }
123
124
125
126