|
9 | 9 | * University of Stuttgart. All rights reserved. |
10 | 10 | * Copyright (c) 2004-2005 The Regents of the University of California. |
11 | 11 | * All rights reserved. |
12 | | - * Copyright (c) 2008-2016 University of Houston. All rights reserved. |
| 12 | + * Copyright (c) 2008-2017 University of Houston. All rights reserved. |
13 | 13 | * Copyright (c) 2015 Research Organization for Information Science |
14 | 14 | * and Technology (RIST). All rights reserved. |
15 | 15 | * Copyright (c) 2016 Cisco Systems, Inc. All rights reserved. |
@@ -197,14 +197,8 @@ ompio_io_ompio_file_open (ompi_communicator_t *comm, |
197 | 197 | } |
198 | 198 |
|
199 | 199 | /* open the file once more for the shared file pointer if required. |
200 | | - ** Per default, the shared file pointer specific actions are however |
201 | | - ** only performed on first access of the shared file pointer, except |
202 | | - ** for the addproc sharedfp component. |
203 | | - ** |
204 | | - ** Lazy open does not work for the addproc sharedfp |
205 | | - ** component since it starts by spawning a process using MPI_Comm_spawn. |
206 | | - ** For this, the first operation has to be collective which we can |
207 | | - ** not guarantuee outside of the MPI_File_open operation. |
| 200 | + ** Can be disabled by the user if no shared file pointer operations |
| 201 | + ** are used by his application. |
208 | 202 | */ |
209 | 203 | if ( NULL != ompio_fh->f_sharedfp && |
210 | 204 | true == use_sharedfp && |
@@ -250,10 +244,27 @@ ompio_io_ompio_file_open (ompi_communicator_t *comm, |
250 | 244 | file pointer of OMPIO to the very end of the file. */ |
251 | 245 | if ( ompio_fh->f_amode & MPI_MODE_APPEND ) { |
252 | 246 | OMPI_MPI_OFFSET_TYPE current_size; |
| 247 | + mca_sharedfp_base_module_t * shared_fp_base_module; |
253 | 248 |
|
254 | 249 | ompio_fh->f_fs->fs_file_get_size( ompio_fh, |
255 | 250 | ¤t_size); |
256 | 251 | ompi_io_ompio_set_explicit_offset (ompio_fh, current_size); |
| 252 | + if ( true == use_sharedfp ) { |
| 253 | + if ( NULL != ompio_fh->f_sharedfp && |
| 254 | + (!mca_io_ompio_sharedfp_lazy_open || |
| 255 | + !strcmp (ompio_fh->f_sharedfp_component->mca_component_name, |
| 256 | + "addproc") )) { |
| 257 | + |
| 258 | + shared_fp_base_module = ompio_fh->f_sharedfp; |
| 259 | + ret = shared_fp_base_module->sharedfp_seek(ompio_fh,current_size, MPI_SEEK_SET); |
| 260 | + } |
| 261 | + else { |
| 262 | + opal_output(1, "mca_common_ompio_file_open: Could not adjust position of " |
| 263 | + "shared file pointer whith MPI_MODE_APPEND\n"); |
| 264 | + ret = MPI_ERR_OTHER; |
| 265 | + goto fn_fail; |
| 266 | + } |
| 267 | + } |
257 | 268 | } |
258 | 269 |
|
259 | 270 |
|
|
0 commit comments