This source file includes following definitions.
- mca_fs_ime_file_open
1
2
3
4
5
6
7
8
9
10 #include "ime_native.h"
11
12 #include "ompi_config.h"
13 #include "fs_ime.h"
14
15 #include <sys/stat.h>
16 #include "mpi.h"
17 #include "ompi/constants.h"
18 #include "ompi/mca/fs/base/base.h"
19 #include "ompi/mca/fs/fs.h"
20 #include "ompi/communicator/communicator.h"
21 #include "ompi/info/info.h"
22 #include "opal/util/path.h"
23
24
25
26
27
28
29
30
31 int mca_fs_ime_file_open (struct ompi_communicator_t *comm,
32 const char* filename,
33 int access_mode,
34 struct opal_info_t *info,
35 ompio_file_t *fh)
36 {
37 int amode = 0;
38 int old_mask, perm;
39 int rank, ret = OMPI_SUCCESS;
40
41 rank = ompi_comm_rank ( comm );
42
43 if (fh->f_perm == OMPIO_PERM_NULL) {
44 old_mask = umask(022);
45 umask(old_mask);
46 perm = old_mask ^ 0666;
47 }
48 else {
49 perm = fh->f_perm;
50 }
51
52 if (access_mode & MPI_MODE_RDONLY)
53 amode = amode | O_RDONLY;
54 if (access_mode & MPI_MODE_WRONLY)
55 amode = amode | O_WRONLY;
56 if (access_mode & MPI_MODE_RDWR)
57 amode = amode | O_RDWR;
58
59
60 errno = 0;
61
62 if ( rank == OMPIO_ROOT ) {
63
64 if ( access_mode & MPI_MODE_CREATE )
65 amode = amode | O_CREAT;
66 if (access_mode & MPI_MODE_EXCL)
67 amode = amode | O_EXCL;
68
69 fh->fd = ime_native_open(filename, amode, perm);
70 if ( fh->fd < 0 ) {
71 ret = mca_fs_ime_get_mpi_err(errno);
72 }
73 }
74
75 comm->c_coll->coll_bcast (&ret, 1, MPI_INT, OMPIO_ROOT, comm,
76 comm->c_coll->coll_bcast_module);
77 if ( ret != OMPI_SUCCESS ) {
78 fh->fd = -1;
79 return ret;
80 }
81
82 if ( rank != OMPIO_ROOT ) {
83 errno = 0;
84 fh->fd = ime_native_open(filename, amode, perm);
85 if ( fh->fd < 0 ) {
86 return mca_fs_ime_get_mpi_err(errno);
87 }
88 }
89
90 return OMPI_SUCCESS;
91 }