1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155
|
/*
* Copyright (c) 2018 DataDirect Networks. All rights reserved.
* $COPYRIGHT$
*
* Additional copyrights may follow
*
* $HEADER$
*/
#include "ime_native.h"
#include "ompi_config.h"
#include "mpi.h"
#include "ompi/mca/fs/fs.h"
#include "ompi/mca/fs/base/base.h"
#include "ompi/mca/fs/ime/fs_ime.h"
/*
* *******************************************************************
* ************************ actions structure ************************
* *******************************************************************
*/
static mca_fs_base_module_1_0_0_t ime = {
mca_fs_ime_module_init, /* initialise after being selected */
mca_fs_ime_module_finalize, /* close a module on a communicator */
mca_fs_ime_file_open,
mca_fs_ime_file_close,
mca_fs_ime_file_delete,
mca_fs_ime_file_set_size,
mca_fs_ime_file_get_size,
mca_fs_ime_file_sync
};
/*
* *******************************************************************
* ************************* structure ends **************************
* *******************************************************************
*/
/*
* Private variables
*/
static int mca_fs_ime_IS_INITIALIZED = 0;
/*
* Function decls
*/
int mca_fs_ime_component_init_query(bool enable_progress_threads,
bool enable_mpi_threads)
{
/* Nothing to do */
return OMPI_SUCCESS;
}
struct mca_fs_base_module_1_0_0_t *
mca_fs_ime_component_file_query (ompio_file_t *fh, int *priority)
{
/* IME should only be used for paths starting with ime: or IME:
Therefore, this function will return a NULL module when no IME
path is detected. */
char *tmp;
*priority = mca_fs_ime_priority;
tmp = strchr (fh->f_filename, ':');
if (!tmp) {
/* The communicator might be NULL if we only want to delete the file */
if (OMPIO_ROOT == fh->f_rank || MPI_COMM_NULL == fh->f_comm) {
fh->f_fstype = mca_fs_base_get_fstype ( fh->f_filename );
}
if (fh->f_comm != MPI_COMM_NULL) {
fh->f_comm->c_coll->coll_bcast (&(fh->f_fstype),
1,
MPI_INT,
OMPIO_ROOT,
fh->f_comm,
fh->f_comm->c_coll->coll_bcast_module);
}
}
else {
if (!strncmp(fh->f_filename, DEFAULT_IME_PREFIX_NO_FWD_SLASH,
IME_FILE_PREFIX_LEN_NO_FWD_SLASH)){
fh->f_fstype = IME;
}
}
/* According to my understanding, a valid module should be returned
as long as a valid FS type is detected. (This isn't what is done
for LUSTRE or PVFS2)
*/
if (IME == fh->f_fstype) {
if (*priority < FS_IME_INCREASED_PRIORITY) {
*priority = FS_IME_INCREASED_PRIORITY;
}
return &ime;
}
return NULL;
}
int mca_fs_ime_component_file_unquery (ompio_file_t *file)
{
/* This function might be needed for some purposes later. for now it
* does not have anything to do since there are no steps which need
* to be undone if this module is not selected */
return OMPI_SUCCESS;
}
int mca_fs_ime_module_init (ompio_file_t *file)
{
/* Make sure the file type is not overwritten by the last queried
* component */
file->f_fstype = IME;
if (mca_fs_ime_IS_INITIALIZED == 0) {
mca_fs_ime_IS_INITIALIZED = 1;
ime_native_init();
}
return OMPI_SUCCESS;
}
int mca_fs_ime_module_finalize (ompio_file_t *file)
{
/*
* Nothing to do here:
* We can't finalize IME here because other files might
* still be using it. Instead, IME is finalized when
* the OMPIO component is closed.
*/
return OMPI_SUCCESS;
}
int mca_fs_ime_native_fini()
{
int ret;
if (mca_fs_ime_IS_INITIALIZED == 0) {
return OMPI_SUCCESS;
}
/* We don't actually need to reset this variable since
mca_fs_ime_native_fini is only called once:
when OMPIO is closed
*/
mca_fs_ime_IS_INITIALIZED = 0;
ret = ime_native_finalize();
if (ret != 0) {
return OMPI_ERROR;
}
return OMPI_SUCCESS;
}
|