@@ -134,7 +134,9 @@ int mca_common_ompio_file_write (ompio_file_t *fh,
134134 & i ,
135135 & j ,
136136 & total_bytes_written ,
137- & spc );
137+ & spc ,
138+ & fh -> f_io_array ,
139+ & fh -> f_num_of_io_entries );
138140
139141 if (fh -> f_num_of_io_entries ) {
140142 ret_code = fh -> f_fbtl -> fbtl_pwritev (fh );
@@ -283,7 +285,9 @@ int mca_common_ompio_file_iwrite (ompio_file_t *fh,
283285 & i ,
284286 & j ,
285287 & total_bytes_written ,
286- & spc );
288+ & spc ,
289+ & fh -> f_io_array ,
290+ & fh -> f_num_of_io_entries );
287291
288292 if (fh -> f_num_of_io_entries ) {
289293 fh -> f_fbtl -> fbtl_ipwritev (fh , (ompi_request_t * ) ompio_req );
@@ -411,7 +415,8 @@ int mca_common_ompio_file_iwrite_at_all (ompio_file_t *fp,
411415int mca_common_ompio_build_io_array ( ompio_file_t * fh , int index , int cycles ,
412416 size_t bytes_per_cycle , int max_data , uint32_t iov_count ,
413417 struct iovec * decoded_iov , int * ii , int * jj , size_t * tbw ,
414- size_t * spc )
418+ size_t * spc , mca_common_ompio_io_array_t * * io_array ,
419+ int * num_io_entries )
415420{
416421 ptrdiff_t disp ;
417422 int block = 1 ;
@@ -424,7 +429,9 @@ int mca_common_ompio_build_io_array ( ompio_file_t *fh, int index, int cycles,
424429 int k = 0 ; /* index into the io_array */
425430 int i = * ii ;
426431 int j = * jj ;
427-
432+ mca_common_ompio_io_array_t * f_io_array = NULL ;
433+ int f_num_io_entries = 0 ;
434+
428435 sum_previous_length = fh -> f_position_in_file_view ;
429436
430437 if ((index == cycles - 1 ) && (max_data % bytes_per_cycle )) {
@@ -434,9 +441,9 @@ int mca_common_ompio_build_io_array ( ompio_file_t *fh, int index, int cycles,
434441 bytes_to_write_in_cycle = bytes_per_cycle ;
435442 }
436443
437- fh -> f_io_array = (mca_common_ompio_io_array_t * )malloc
444+ f_io_array = (mca_common_ompio_io_array_t * )malloc
438445 (OMPIO_IOVEC_INITIAL_SIZE * sizeof (mca_common_ompio_io_array_t ));
439- if (NULL == fh -> f_io_array ) {
446+ if (NULL == f_io_array ) {
440447 opal_output (1 , "OUT OF MEMORY\n" );
441448 return OMPI_ERR_OUT_OF_RESOURCE ;
442449 }
@@ -445,10 +452,10 @@ int mca_common_ompio_build_io_array ( ompio_file_t *fh, int index, int cycles,
445452 /* reallocate if needed */
446453 if (OMPIO_IOVEC_INITIAL_SIZE * block <= k ) {
447454 block ++ ;
448- fh -> f_io_array = (mca_common_ompio_io_array_t * )realloc
449- (fh -> f_io_array , OMPIO_IOVEC_INITIAL_SIZE *
455+ f_io_array = (mca_common_ompio_io_array_t * )realloc
456+ (f_io_array , OMPIO_IOVEC_INITIAL_SIZE *
450457 block * sizeof (mca_common_ompio_io_array_t ));
451- if (NULL == fh -> f_io_array ) {
458+ if (NULL == f_io_array ) {
452459 opal_output (1 , "OUT OF MEMORY\n" );
453460 return OMPI_ERR_OUT_OF_RESOURCE ;
454461 }
@@ -462,15 +469,15 @@ int mca_common_ompio_build_io_array ( ompio_file_t *fh, int index, int cycles,
462469
463470 disp = (ptrdiff_t )decoded_iov [i ].iov_base +
464471 (total_bytes_written - sum_previous_counts );
465- fh -> f_io_array [k ].memory_address = (IOVBASE_TYPE * )disp ;
472+ f_io_array [k ].memory_address = (IOVBASE_TYPE * )disp ;
466473
467474 if (decoded_iov [i ].iov_len -
468475 (total_bytes_written - sum_previous_counts ) >=
469476 bytes_to_write_in_cycle ) {
470- fh -> f_io_array [k ].length = bytes_to_write_in_cycle ;
477+ f_io_array [k ].length = bytes_to_write_in_cycle ;
471478 }
472479 else {
473- fh -> f_io_array [k ].length = decoded_iov [i ].iov_len -
480+ f_io_array [k ].length = decoded_iov [i ].iov_len -
474481 (total_bytes_written - sum_previous_counts );
475482 }
476483
@@ -492,36 +499,36 @@ int mca_common_ompio_build_io_array ( ompio_file_t *fh, int index, int cycles,
492499
493500 disp = (ptrdiff_t )fh -> f_decoded_iov [j ].iov_base +
494501 (fh -> f_total_bytes - sum_previous_length );
495- fh -> f_io_array [k ].offset = (IOVBASE_TYPE * )(intptr_t )(disp + fh -> f_offset );
502+ f_io_array [k ].offset = (IOVBASE_TYPE * )(intptr_t )(disp + fh -> f_offset );
496503
497504 if (! (fh -> f_flags & OMPIO_CONTIGUOUS_FVIEW )) {
498505 if (fh -> f_decoded_iov [j ].iov_len -
499506 (fh -> f_total_bytes - sum_previous_length )
500- < fh -> f_io_array [k ].length ) {
501- fh -> f_io_array [k ].length = fh -> f_decoded_iov [j ].iov_len -
507+ < f_io_array [k ].length ) {
508+ f_io_array [k ].length = fh -> f_decoded_iov [j ].iov_len -
502509 (fh -> f_total_bytes - sum_previous_length );
503510 }
504511 }
505512
506- total_bytes_written += fh -> f_io_array [k ].length ;
507- fh -> f_total_bytes += fh -> f_io_array [k ].length ;
508- bytes_to_write_in_cycle -= fh -> f_io_array [k ].length ;
513+ total_bytes_written += f_io_array [k ].length ;
514+ fh -> f_total_bytes += f_io_array [k ].length ;
515+ bytes_to_write_in_cycle -= f_io_array [k ].length ;
509516 k = k + 1 ;
510517 }
511518 fh -> f_position_in_file_view = sum_previous_length ;
512519 fh -> f_index_in_file_view = j ;
513- fh -> f_num_of_io_entries = k ;
520+ f_num_io_entries = k ;
514521
515522#if 0
516523 if (fh -> f_rank == 0 ) {
517524 int d ;
518- printf ("*************************** %d\n" , fh -> f_num_of_io_entries );
525+ printf ("*************************** %d\n" , f_num_io_entries );
519526
520- for (d = 0 ; d < fh -> f_num_of_io_entries ; d ++ ) {
527+ for (d = 0 ; d < f_num_of_entries ; d ++ ) {
521528 printf (" ADDRESS: %p OFFSET: %p LENGTH: %d prev_count=%ld prev_length=%ld\n" ,
522- fh -> f_io_array [d ].memory_address ,
523- fh -> f_io_array [d ].offset ,
524- fh -> f_io_array [d ].length ,
529+ f_io_array [d ].memory_address ,
530+ f_io_array [d ].offset ,
531+ f_io_array [d ].length ,
525532 sum_previous_counts , sum_previous_length );
526533 }
527534 }
@@ -530,7 +537,9 @@ int mca_common_ompio_build_io_array ( ompio_file_t *fh, int index, int cycles,
530537 * jj = j ;
531538 * tbw = total_bytes_written ;
532539 * spc = sum_previous_counts ;
533-
540+ * io_array = f_io_array ;
541+ * num_io_entries = f_num_io_entries ;
542+
534543 return OMPI_SUCCESS ;
535544}
536545
0 commit comments