36
36
#include <aio.h>
37
37
#endif
38
38
39
- int ompi_fbtl_posix_max_aio_active_reqs = 2048 ;
39
+ int ompi_fbtl_posix_max_prd_active_reqs = 2048 ;
40
40
41
41
#include "ompi/mca/fbtl/fbtl.h"
42
42
#include "ompi/mca/fbtl/posix/fbtl_posix.h"
@@ -106,7 +106,7 @@ int mca_fbtl_posix_module_init (ompio_file_t *file) {
106
106
#if defined (FBTL_POSIX_HAVE_AIO )
107
107
long val = sysconf (_SC_AIO_MAX );
108
108
if ( -1 != val ) {
109
- ompi_fbtl_posix_max_aio_active_reqs = (int )val ;
109
+ ompi_fbtl_posix_max_prd_active_reqs = (int )val ;
110
110
}
111
111
#endif
112
112
return OMPI_SUCCESS ;
@@ -125,147 +125,148 @@ bool mca_fbtl_posix_progress ( mca_ompio_request_t *req)
125
125
mca_fbtl_posix_request_data_t * data = (mca_fbtl_posix_request_data_t * )req -> req_data ;
126
126
off_t start_offset , end_offset , total_length ;
127
127
128
- for (i = data -> aio_first_active_req ; i < data -> aio_last_active_req ; i ++ ) {
129
- if ( EINPROGRESS == data -> aio_req_status [i ] ) {
130
- data -> aio_req_status [i ] = aio_error ( & data -> aio_reqs [i ]);
131
- if ( 0 == data -> aio_req_status [i ]){
132
- /* assuming right now that aio_return will return
133
- ** the number of bytes written/read and not an error code,
134
- ** since aio_error should have returned an error in that
135
- ** case and not 0 ( which means request is complete)
136
- */
137
- ssize_t ret2 = aio_return (& data -> aio_reqs [i ]);
138
- data -> aio_total_len += ret2 ;
139
- if ( data -> aio_reqs [i ].aio_nbytes != (size_t )ret2 ) {
128
+ for (i = data -> prd_first_active_req ; i < data -> prd_last_active_req ; i ++ ) {
129
+ if ( EINPROGRESS == data -> prd_aio . aio_req_status [i ] ) {
130
+ data -> prd_aio . aio_req_status [i ] = aio_error ( & data -> prd_aio . aio_reqs [i ]);
131
+ if ( 0 == data -> prd_aio . aio_req_status [i ]){
132
+ /* assuming right now that aio_return will return
133
+ ** the number of bytes written/read and not an error code,
134
+ ** since aio_error should have returned an error in that
135
+ ** case and not 0 ( which means request is complete)
136
+ */
137
+ ssize_t ret2 = aio_return (& data -> prd_aio . aio_reqs [i ]);
138
+ data -> prd_total_len += ret2 ;
139
+ if ( data -> prd_aio . aio_reqs [i ].aio_nbytes != (size_t )ret2 ) {
140
140
/* Partial completion */
141
- data -> aio_reqs [i ].aio_offset += ret2 ;
142
- data -> aio_reqs [i ].aio_buf = (char * )data -> aio_reqs [i ].aio_buf + ret2 ;
143
- data -> aio_reqs [i ].aio_nbytes -= ret2 ;
144
- data -> aio_reqs [i ].aio_reqprio = 0 ;
145
- data -> aio_reqs [i ].aio_sigevent .sigev_notify = SIGEV_NONE ;
146
- data -> aio_req_status [i ] = EINPROGRESS ;
147
- start_offset = data -> aio_reqs [i ].aio_offset ;
148
- total_length = data -> aio_reqs [i ].aio_nbytes ;
141
+ data -> prd_aio . aio_reqs [i ].aio_offset += ret2 ;
142
+ data -> prd_aio . aio_reqs [i ].aio_buf = (char * )data -> prd_aio . aio_reqs [i ].aio_buf + ret2 ;
143
+ data -> prd_aio . aio_reqs [i ].aio_nbytes -= ret2 ;
144
+ data -> prd_aio . aio_reqs [i ].aio_reqprio = 0 ;
145
+ data -> prd_aio . aio_reqs [i ].aio_sigevent .sigev_notify = SIGEV_NONE ;
146
+ data -> prd_aio . aio_req_status [i ] = EINPROGRESS ;
147
+ start_offset = data -> prd_aio . aio_reqs [i ].aio_offset ;
148
+ total_length = data -> prd_aio . aio_reqs [i ].aio_nbytes ;
149
149
/* release previous lock */
150
- mca_fbtl_posix_unlock ( & data -> aio_lock , data -> aio_fh , & data -> aio_lock_counter );
150
+ mca_fbtl_posix_unlock ( & data -> prd_lock , data -> prd_fh , & data -> prd_lock_counter );
151
151
152
- if ( data -> aio_req_type == FBTL_POSIX_WRITE ) {
153
- ret_code = mca_fbtl_posix_lock ( & data -> aio_lock , data -> aio_fh , F_WRLCK , start_offset , total_length ,
154
- OMPIO_LOCK_ENTIRE_REGION , & data -> aio_lock_counter );
152
+ if ( data -> prd_req_type == FBTL_POSIX_AIO_WRITE ) {
153
+ ret_code = mca_fbtl_posix_lock ( & data -> prd_lock , data -> prd_fh , F_WRLCK , start_offset , total_length ,
154
+ OMPIO_LOCK_ENTIRE_REGION , & data -> prd_lock_counter );
155
155
if ( 0 < ret_code ) {
156
156
opal_output (1 , "mca_fbtl_posix_progress: error in mca_fbtl_posix_lock() %d" , ret_code );
157
157
/* Just in case some part of the lock actually succeeded. */
158
- mca_fbtl_posix_unlock ( & data -> aio_lock , data -> aio_fh , & data -> aio_lock_counter );
159
- return OMPI_ERROR ;
158
+ mca_fbtl_posix_unlock ( & data -> prd_lock , data -> prd_fh , & data -> prd_lock_counter );
159
+ return false ;
160
160
}
161
- if (-1 == aio_write (& data -> aio_reqs [i ])) {
161
+ if (-1 == aio_write (& data -> prd_aio . aio_reqs [i ])) {
162
162
opal_output (1 , "mca_fbtl_posix_progress: error in aio_write()" );
163
- mca_fbtl_posix_unlock ( & data -> aio_lock , data -> aio_fh , & data -> aio_lock_counter );
164
- return OMPI_ERROR ;
165
- }
163
+ mca_fbtl_posix_unlock ( & data -> prd_lock , data -> prd_fh , & data -> prd_lock_counter );
164
+ return false ;
165
+ }
166
166
}
167
- else if ( data -> aio_req_type == FBTL_POSIX_READ ) {
168
- ret_code = mca_fbtl_posix_lock ( & data -> aio_lock , data -> aio_fh , F_RDLCK , start_offset , total_length ,
169
- OMPIO_LOCK_ENTIRE_REGION , & data -> aio_lock_counter );
167
+ else if ( data -> prd_req_type == FBTL_POSIX_AIO_READ ) {
168
+ ret_code = mca_fbtl_posix_lock ( & data -> prd_lock , data -> prd_fh , F_RDLCK , start_offset , total_length ,
169
+ OMPIO_LOCK_ENTIRE_REGION , & data -> prd_lock_counter );
170
170
if ( 0 < ret_code ) {
171
171
opal_output (1 , "mca_fbtl_posix_progress: error in mca_fbtl_posix_lock() %d" , ret_code );
172
172
/* Just in case some part of the lock actually succeeded. */
173
- mca_fbtl_posix_unlock ( & data -> aio_lock , data -> aio_fh , & data -> aio_lock_counter );
174
- return OMPI_ERROR ;
173
+ mca_fbtl_posix_unlock ( & data -> prd_lock , data -> prd_fh , & data -> prd_lock_counter );
174
+ return false ;
175
175
}
176
- if (-1 == aio_read (& data -> aio_reqs [i ])) {
176
+ if (-1 == aio_read (& data -> prd_aio . aio_reqs [i ])) {
177
177
opal_output (1 , "mca_fbtl_posix_progress: error in aio_read()" );
178
- mca_fbtl_posix_unlock ( & data -> aio_lock , data -> aio_fh , & data -> aio_lock_counter );
179
- return OMPI_ERROR ;
178
+ mca_fbtl_posix_unlock ( & data -> prd_lock , data -> prd_fh , & data -> prd_lock_counter );
179
+ return false ;
180
180
}
181
181
}
182
182
}
183
- else {
184
- data -> aio_open_reqs -- ;
183
+ else {
184
+ data -> prd_open_reqs -- ;
185
185
lcount ++ ;
186
186
}
187
- }
188
- else if ( EINPROGRESS == data -> aio_req_status [i ]){
189
- /* not yet done */
190
- continue ;
191
- }
192
- else {
193
- /* an error occurred. Mark the request done, but
194
- set an error code in the status */
195
- req -> req_ompi .req_status .MPI_ERROR = OMPI_ERROR ;
196
- req -> req_ompi .req_status ._ucount = data -> aio_total_len ;
197
- ret = true;
198
- break ;
199
- }
200
- }
201
- else {
202
- lcount ++ ;
203
- }
187
+ }
188
+ else if ( EINPROGRESS == data -> prd_aio . aio_req_status [i ]){
189
+ /* not yet done */
190
+ continue ;
191
+ }
192
+ else {
193
+ /* an error occurred. Mark the request done, but
194
+ set an error code in the status */
195
+ req -> req_ompi .req_status .MPI_ERROR = OMPI_ERROR ;
196
+ req -> req_ompi .req_status ._ucount = data -> prd_total_len ;
197
+ ret = true;
198
+ break ;
199
+ }
200
+ }
201
+ else {
202
+ lcount ++ ;
203
+ }
204
204
}
205
205
#if 0
206
- printf ("lcount=%d open_reqs=%d\n" , lcount , data -> aio_open_reqs );
206
+ printf ("lcount=%d open_reqs=%d\n" , lcount , data -> prd_open_reqs );
207
207
#endif
208
- if ( (lcount == data -> aio_req_chunks ) && (0 != data -> aio_open_reqs )) {
208
+ if ( (lcount == data -> prd_req_chunks ) && (0 != data -> prd_open_reqs )) {
209
209
/* release the lock of the previous operations */
210
- mca_fbtl_posix_unlock ( & data -> aio_lock , data -> aio_fh , & data -> aio_lock_counter );
210
+ mca_fbtl_posix_unlock ( & data -> prd_lock , data -> prd_fh , & data -> prd_lock_counter );
211
211
212
- /* post the next batch of operations */
213
- data -> aio_first_active_req = data -> aio_last_active_req ;
214
- if ( (data -> aio_req_count - data -> aio_last_active_req ) > data -> aio_req_chunks ) {
215
- data -> aio_last_active_req += data -> aio_req_chunks ;
216
- }
217
- else {
218
- data -> aio_last_active_req = data -> aio_req_count ;
219
- }
212
+ /* post the next batch of operations */
213
+ data -> prd_first_active_req = data -> prd_last_active_req ;
214
+ if ( (data -> prd_req_count - data -> prd_last_active_req ) > data -> prd_req_chunks ) {
215
+ data -> prd_last_active_req += data -> prd_req_chunks ;
216
+ }
217
+ else {
218
+ data -> prd_last_active_req = data -> prd_req_count ;
219
+ }
220
220
221
- start_offset = data -> aio_reqs [data -> aio_first_active_req ].aio_offset ;
222
- end_offset = data -> aio_reqs [data -> aio_last_active_req - 1 ].aio_offset + data -> aio_reqs [data -> aio_last_active_req - 1 ].aio_nbytes ;
221
+ start_offset = data -> prd_aio .aio_reqs [data -> prd_first_active_req ].aio_offset ;
222
+ end_offset = data -> prd_aio .aio_reqs [data -> prd_last_active_req - 1 ].aio_offset +
223
+ data -> prd_aio .aio_reqs [data -> prd_last_active_req - 1 ].aio_nbytes ;
223
224
total_length = (end_offset - start_offset );
224
225
225
- if ( FBTL_POSIX_READ == data -> aio_req_type ) {
226
- ret_code = mca_fbtl_posix_lock ( & data -> aio_lock , data -> aio_fh , F_RDLCK , start_offset , total_length ,
227
- OMPIO_LOCK_ENTIRE_REGION , & data -> aio_lock_counter );
226
+ if ( FBTL_POSIX_AIO_READ == data -> prd_req_type ) {
227
+ ret_code = mca_fbtl_posix_lock ( & data -> prd_lock , data -> prd_fh , F_RDLCK , start_offset , total_length ,
228
+ OMPIO_LOCK_ENTIRE_REGION , & data -> prd_lock_counter );
228
229
}
229
- else if ( FBTL_POSIX_WRITE == data -> aio_req_type ) {
230
- ret_code = mca_fbtl_posix_lock ( & data -> aio_lock , data -> aio_fh , F_WRLCK , start_offset , total_length ,
231
- OMPIO_LOCK_ENTIRE_REGION , & data -> aio_lock_counter );
230
+ else if ( FBTL_POSIX_AIO_WRITE == data -> prd_req_type ) {
231
+ ret_code = mca_fbtl_posix_lock ( & data -> prd_lock , data -> prd_fh , F_WRLCK , start_offset , total_length ,
232
+ OMPIO_LOCK_ENTIRE_REGION , & data -> prd_lock_counter );
232
233
}
233
234
if ( 0 < ret_code ) {
234
235
opal_output (1 , "mca_fbtl_posix_progress: error in mca_fbtl_posix_lock() %d" , ret_code );
235
236
/* Just in case some part of the lock actually succeeded. */
236
- mca_fbtl_posix_unlock ( & data -> aio_lock , data -> aio_fh , & data -> aio_lock_counter );
237
- return OMPI_ERROR ;
237
+ mca_fbtl_posix_unlock ( & data -> prd_lock , data -> prd_fh , & data -> prd_lock_counter );
238
+ return false ;
238
239
}
239
240
240
- for ( i = data -> aio_first_active_req ; i < data -> aio_last_active_req ; i ++ ) {
241
- if ( FBTL_POSIX_READ == data -> aio_req_type ) {
242
- if (-1 == aio_read (& data -> aio_reqs [i ])) {
243
- opal_output (1 , "mca_fbtl_posix_progress: error in aio_read()" );
244
- mca_fbtl_posix_unlock ( & data -> aio_lock , data -> aio_fh , & data -> aio_lock_counter );
245
- return OMPI_ERROR ;
246
- }
247
- }
248
- else if ( FBTL_POSIX_WRITE == data -> aio_req_type ) {
249
- if (-1 == aio_write (& data -> aio_reqs [i ])) {
250
- opal_output (1 , "mca_fbtl_posix_progress: error in aio_write()" );
251
- mca_fbtl_posix_unlock ( & data -> aio_lock , data -> aio_fh , & data -> aio_lock_counter );
252
- return OMPI_ERROR ;
253
- }
254
- }
255
- }
241
+ for ( i = data -> prd_first_active_req ; i < data -> prd_last_active_req ; i ++ ) {
242
+ if ( FBTL_POSIX_AIO_READ == data -> prd_req_type ) {
243
+ if (-1 == aio_read (& data -> prd_aio . aio_reqs [i ])) {
244
+ opal_output (1 , "mca_fbtl_posix_progress: error in aio_read()" );
245
+ mca_fbtl_posix_unlock ( & data -> prd_lock , data -> prd_fh , & data -> prd_lock_counter );
246
+ return false ;
247
+ }
248
+ }
249
+ else if ( FBTL_POSIX_AIO_WRITE == data -> prd_req_type ) {
250
+ if (-1 == aio_write (& data -> prd_aio . aio_reqs [i ])) {
251
+ opal_output (1 , "mca_fbtl_posix_progress: error in aio_write()" );
252
+ mca_fbtl_posix_unlock ( & data -> prd_lock , data -> prd_fh , & data -> prd_lock_counter );
253
+ return false ;
254
+ }
255
+ }
256
+ }
256
257
#if 0
257
- printf ("posting new batch: first=%d last=%d\n" , data -> aio_first_active_req , data -> aio_last_active_req );
258
+ printf ("posting new batch: first=%d last=%d\n" , data -> prd_first_active_req , data -> prd_last_active_req );
258
259
#endif
259
260
}
260
261
261
- if ( 0 == data -> aio_open_reqs ) {
262
- /* all pending operations are finished for this request */
263
- req -> req_ompi .req_status .MPI_ERROR = OMPI_SUCCESS ;
264
- req -> req_ompi .req_status ._ucount = data -> aio_total_len ;
265
- mca_fbtl_posix_unlock ( & data -> aio_lock , data -> aio_fh , & data -> aio_lock_counter );
262
+ if ( 0 == data -> prd_open_reqs ) {
263
+ /* all pending operations are finished for this request */
264
+ req -> req_ompi .req_status .MPI_ERROR = OMPI_SUCCESS ;
265
+ req -> req_ompi .req_status ._ucount = data -> prd_total_len ;
266
+ mca_fbtl_posix_unlock ( & data -> prd_lock , data -> prd_fh , & data -> prd_lock_counter );
266
267
267
- if ( data -> aio_fh -> f_atomicity ) {
268
- mca_fbtl_posix_unlock ( & data -> aio_lock , data -> aio_fh , & data -> aio_lock_counter );
268
+ if ( data -> prd_fh -> f_atomicity ) {
269
+ mca_fbtl_posix_unlock ( & data -> prd_lock , data -> prd_fh , & data -> prd_lock_counter );
269
270
}
270
271
271
272
ret = true;
@@ -281,14 +282,14 @@ void mca_fbtl_posix_request_free ( mca_ompio_request_t *req)
281
282
mca_fbtl_posix_request_data_t * data = (mca_fbtl_posix_request_data_t * )req -> req_data ;
282
283
if (NULL != data ) {
283
284
284
- if ( NULL != data -> aio_reqs ) {
285
- free ( data -> aio_reqs );
286
- }
287
- if ( NULL != data -> aio_req_status ) {
288
- free ( data -> aio_req_status );
289
- }
290
- free ( data );
291
- req -> req_data = NULL ;
285
+ if ( NULL != data -> prd_aio . aio_reqs ) {
286
+ free ( data -> prd_aio . aio_reqs );
287
+ }
288
+ if ( NULL != data -> prd_aio . aio_req_status ) {
289
+ free ( data -> prd_aio . aio_req_status );
290
+ }
291
+ free (data );
292
+ req -> req_data = NULL ;
292
293
}
293
294
#endif
294
295
return ;
0 commit comments