1 /* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil -*- */
2 /*
3  * Copyright (c) 2004-2007 The Trustees of Indiana University and Indiana
4  *                         University Research and Technology
5  *                         Corporation.  All rights reserved.
6  * Copyright (c) 2004-2005 The University of Tennessee and The University
7  *                         of Tennessee Research Foundation.  All rights
8  *                         reserved.
9  * Copyright (c) 2004-2008 High Performance Computing Center Stuttgart,
10  *                         University of Stuttgart.  All rights reserved.
11  * Copyright (c) 2004-2005 The Regents of the University of California.
12  *                         All rights reserved.
13  * Copyright (c) 2008      Sun Microsystems, Inc.  All rights reserved.
14  * Copyright (c) 2013      Los Alamos National Security, LLC.  All rights
15  *                         reserved.
16  * Copyright (c) 2015      Research Organization for Information Science
17  *                         and Technology (RIST). All rights reserved.
18  * $COPYRIGHT$
19  *
20  * Additional copyrights may follow
21  *
22  * $HEADER$
23  */
24 
25 #include "ompi_config.h"
26 
27 #include "ompi/mpi/c/bindings.h"
28 #include "ompi/runtime/params.h"
29 #include "ompi/errhandler/errhandler.h"
30 #include "ompi/file/file.h"
31 #include "ompi/datatype/ompi_datatype.h"
32 #include "ompi/memchecker.h"
33 
34 #if OMPI_BUILD_MPI_PROFILING
35 #if OPAL_HAVE_WEAK_SYMBOLS
36 #pragma weak MPI_File_write_at_all_begin = PMPI_File_write_at_all_begin
37 #endif
38 #define MPI_File_write_at_all_begin PMPI_File_write_at_all_begin
39 #endif
40 
41 static const char FUNC_NAME[] = "MPI_File_write_at_all_begin";
42 
43 
MPI_File_write_at_all_begin(MPI_File fh,MPI_Offset offset,const void * buf,int count,MPI_Datatype datatype)44 int MPI_File_write_at_all_begin(MPI_File fh, MPI_Offset offset, const void *buf,
45                                 int count, MPI_Datatype datatype)
46 {
47     int rc;
48 
49     MEMCHECKER(
50         memchecker_datatype(datatype);
51         memchecker_call(&opal_memchecker_base_isdefined, buf, count, datatype);
52     );
53 
54     if (MPI_PARAM_CHECK) {
55         rc = MPI_SUCCESS;
56         OMPI_ERR_INIT_FINALIZE(FUNC_NAME);
57         if (ompi_file_invalid(fh)) {
58             fh = MPI_FILE_NULL;
59             rc = MPI_ERR_FILE;
60         } else if (count < 0) {
61             rc = MPI_ERR_COUNT;
62         } else {
63            OMPI_CHECK_DATATYPE_FOR_SEND(rc, datatype, count);
64         }
65         OMPI_ERRHANDLER_CHECK(rc, fh, rc, FUNC_NAME);
66     }
67 
68     OPAL_CR_ENTER_LIBRARY();
69 
70     /* Call the back-end io component function */
71 
72     switch (fh->f_io_version) {
73     case MCA_IO_BASE_V_2_0_0:
74         rc = fh->f_io_selected_module.v2_0_0.
75           io_module_file_write_at_all_begin(fh, offset, buf, count,
76                                               datatype);
77         break;
78 
79     default:
80         rc = MPI_ERR_INTERN;
81         break;
82     }
83 
84     /* All done */
85 
86     OMPI_ERRHANDLER_RETURN(rc, fh, rc, FUNC_NAME);
87 }
88