13
13
* Copyright (c) 2013 Intel, Inc. All rights reserved.
14
14
* Copyright (c) 2015 Research Organization for Information Science
15
15
* and Technology (RIST). All rights reserved.
16
+ * Copyright (c) 2015 Cisco Systems, Inc. All rights reserved.
16
17
* $COPYRIGHT$
17
18
*
18
19
* Additional copyrights may follow
@@ -71,27 +72,27 @@ int mca_sharedfp_sm_file_open (struct ompi_communicator_t *comm,
71
72
72
73
/*Memory is allocated here for the sh structure*/
73
74
if ( mca_sharedfp_sm_verbose ) {
74
- printf ( "mca_sharedfp_sm_file_open: malloc f_sharedfp_ptr struct\n" );
75
+ printf ( "mca_sharedfp_sm_file_open: malloc f_sharedfp_ptr struct\n" );
75
76
}
76
77
77
78
sh = (struct mca_sharedfp_base_data_t * )malloc (sizeof (struct mca_sharedfp_base_data_t ));
78
79
if ( NULL == sh ) {
79
- opal_output (0 , "mca_sharedfp_sm_file_open: Error, unable to malloc f_sharedfp_ptr struct\n" );
80
- free (shfileHandle );
81
- return OMPI_ERR_OUT_OF_RESOURCE ;
80
+ opal_output (0 , "mca_sharedfp_sm_file_open: Error, unable to malloc f_sharedfp_ptr struct\n" );
81
+ free (shfileHandle );
82
+ return OMPI_ERR_OUT_OF_RESOURCE ;
82
83
}
83
84
84
85
/*Populate the sh file structure based on the implementation*/
85
- sh -> sharedfh = shfileHandle ; /* Shared file pointer*/
86
- sh -> global_offset = 0 ; /* Global Offset*/
87
- sh -> comm = comm ; /* Communicator*/
86
+ sh -> sharedfh = shfileHandle ; /* Shared file pointer*/
87
+ sh -> global_offset = 0 ; /* Global Offset*/
88
+ sh -> comm = comm ; /* Communicator*/
88
89
sh -> selected_module_data = NULL ;
89
90
90
91
rank = ompi_comm_rank ( sh -> comm );
91
92
92
93
/*Open a shared memory segment which will hold the shared file pointer*/
93
94
if ( mca_sharedfp_sm_verbose ) {
94
- printf ( "mca_sharedfp_sm_file_open: allocatge shared memory segment.\n" );
95
+ printf ( "mca_sharedfp_sm_file_open: allocatge shared memory segment.\n" );
95
96
}
96
97
97
98
@@ -139,21 +140,21 @@ int mca_sharedfp_sm_file_open (struct ompi_communicator_t *comm,
139
140
140
141
/*TODO: is it necessary to write to the file first?*/
141
142
if ( 0 == rank ){
142
- memset ( & sm_offset , 0 , sizeof (struct mca_sharedfp_sm_offset ));
143
- write ( sm_fd , & sm_offset , sizeof (struct mca_sharedfp_sm_offset ));
143
+ memset ( & sm_offset , 0 , sizeof (struct mca_sharedfp_sm_offset ));
144
+ write ( sm_fd , & sm_offset , sizeof (struct mca_sharedfp_sm_offset ));
144
145
}
145
146
comm -> c_coll .coll_barrier (comm , comm -> c_coll .coll_barrier_module );
146
147
147
148
/*the file has been written to, now we can map*/
148
149
sm_offset_ptr = mmap (NULL , sizeof (struct mca_sharedfp_sm_offset ), PROT_READ | PROT_WRITE ,
149
- MAP_SHARED , sm_fd , 0 );
150
+ MAP_SHARED , sm_fd , 0 );
150
151
151
152
close (sm_fd );
152
153
153
154
if ( sm_offset_ptr == MAP_FAILED ){
154
- err = OMPI_ERROR ;
155
- printf ("mca_sharedfp_sm_file_open: Error, unable to mmap file: %s\n" ,sm_filename );
156
- printf ("%s\n" , strerror (errno ));
155
+ err = OMPI_ERROR ;
156
+ printf ("mca_sharedfp_sm_file_open: Error, unable to mmap file: %s\n" ,sm_filename );
157
+ printf ("%s\n" , strerror (errno ));
157
158
free (sm_filename );
158
159
free (sm_data );
159
160
free (sh );
@@ -170,37 +171,32 @@ int mca_sharedfp_sm_file_open (struct ompi_communicator_t *comm,
170
171
171
172
if ( (sm_data -> mutex = sem_open (sm_data -> sem_name , O_CREAT , 0644 , 1 )) != SEM_FAILED ) {
172
173
#elif defined(HAVE_SEM_INIT)
174
+ sm_data -> mutex = & sm_offset_ptr -> mutex ;
173
175
if (sem_init (& sm_offset_ptr -> mutex , 1 , 1 ) != -1 ){
174
176
#endif
175
- /*If opening was successful*/
176
- /*Store the new file handle*/
177
- sm_data -> sm_offset_ptr = sm_offset_ptr ;
178
- /* Assign the sm_data to sh->selected_module_data*/
179
- sh -> selected_module_data = sm_data ;
180
- /*remember the shared file handle*/
181
- fh -> f_sharedfp_data = sh ;
182
-
183
- /*write initial zero*/
184
- if (rank == 0 ){
185
- MPI_Offset position = 0 ;
186
-
187
- #if defined(HAVE_SEM_OPEN )
188
- sem_wait (sm_data -> mutex );
189
- sm_offset_ptr -> offset = position ;
190
- sem_post (sm_data -> mutex );
191
- #elif defined(HAVE_SEM_INIT )
192
- sem_wait (& sm_offset_ptr -> mutex );
193
- sm_offset_ptr -> offset = position ;
194
- sem_post (& sm_offset_ptr -> mutex );
195
- #endif
196
- }
177
+ /*If opening was successful*/
178
+ /*Store the new file handle*/
179
+ sm_data -> sm_offset_ptr = sm_offset_ptr ;
180
+ /* Assign the sm_data to sh->selected_module_data*/
181
+ sh -> selected_module_data = sm_data ;
182
+ /*remember the shared file handle*/
183
+ fh -> f_sharedfp_data = sh ;
184
+
185
+ /*write initial zero*/
186
+ if (rank == 0 ){
187
+ MPI_Offset position = 0 ;
188
+
189
+ sem_wait (sm_data -> mutex );
190
+ sm_offset_ptr -> offset = position ;
191
+ sem_post (sm_data -> mutex );
192
+ }
197
193
}else {
198
194
free (sm_filename );
199
- free (sm_data );
200
- free (sh );
201
- free (shfileHandle );
195
+ free (sm_data );
196
+ free (sh );
197
+ free (shfileHandle );
202
198
munmap (sm_offset_ptr , sizeof (struct mca_sharedfp_sm_offset ));
203
- err = OMPI_ERROR ;
199
+ err = OMPI_ERROR ;
204
200
}
205
201
206
202
comm -> c_coll .coll_barrier (comm , comm -> c_coll .coll_barrier_module );
@@ -217,9 +213,9 @@ int mca_sharedfp_sm_file_close (mca_io_ompio_file_t *fh)
217
213
struct mca_sharedfp_sm_data * file_data = NULL ;
218
214
219
215
if ( NULL == fh -> f_sharedfp_data ){
220
- if ( mca_sharedfp_sm_verbose ) {
221
- printf ("sharedfp_sm_file_close: shared file pointer structure not initialized\n" );
222
- }
216
+ if ( mca_sharedfp_sm_verbose ) {
217
+ printf ("sharedfp_sm_file_close: shared file pointer structure not initialized\n" );
218
+ }
223
219
return OMPI_SUCCESS ;
224
220
}
225
221
sh = fh -> f_sharedfp_data ;
@@ -236,10 +232,10 @@ int mca_sharedfp_sm_file_close (mca_io_ompio_file_t *fh)
236
232
if (file_data -> sm_offset_ptr ) {
237
233
/* destroy semaphore */
238
234
#if defined(HAVE_SEM_OPEN )
239
- sem_unlink (file_data -> sem_name );
240
- free (file_data -> sem_name );
235
+ sem_unlink (file_data -> sem_name );
236
+ free (file_data -> sem_name );
241
237
#elif defined(HAVE_SEM_INIT )
242
- sem_destroy (& file_data -> sm_offset_ptr -> mutex );
238
+ sem_destroy (& file_data -> sm_offset_ptr -> mutex );
243
239
#endif
244
240
/*Release the shared memory segment.*/
245
241
munmap (file_data -> sm_offset_ptr ,sizeof (struct mca_sharedfp_sm_offset ));
0 commit comments