summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/H5FD.c119
-rw-r--r--src/H5FDcore.c1
-rw-r--r--src/H5FDdevelop.h1
-rw-r--r--src/H5FDdirect.c1
-rw-r--r--src/H5FDfamily.c1
-rw-r--r--src/H5FDhdfs.c1
-rw-r--r--src/H5FDlog.c1
-rw-r--r--src/H5FDmirror.c1
-rw-r--r--src/H5FDmpio.c1
-rw-r--r--src/H5FDmulti.c1
-rw-r--r--src/H5FDprivate.h1
-rw-r--r--src/H5FDros3.c1
-rw-r--r--src/H5FDsec2.c1
-rw-r--r--src/H5FDsplitter.c1
-rw-r--r--src/H5FDstdio.c1
-rw-r--r--src/H5FDvfd_swmr.c645
-rw-r--r--src/H5FDvfd_swmr.h6
-rw-r--r--src/H5Fint.c11
-rw-r--r--test/h5test.c1
19 files changed, 386 insertions, 410 deletions
diff --git a/src/H5FD.c b/src/H5FD.c
index fcf39f5..2cae1a8 100644
--- a/src/H5FD.c
+++ b/src/H5FD.c
@@ -60,7 +60,7 @@ typedef struct H5FD_wrap_t {
/********************/
/* Local Prototypes */
/********************/
-static herr_t H5FD__free_cls(H5FD_class_t *cls);
+static herr_t H5FD__free_cls(H5FD_class_t *cls, void **request);
static herr_t H5FD__query(const H5FD_t *f, unsigned long *flags /*out*/);
/*********************/
@@ -180,7 +180,7 @@ H5FD_term_package(void)
*-------------------------------------------------------------------------
*/
static herr_t
-H5FD__free_cls(H5FD_class_t *cls)
+H5FD__free_cls(H5FD_class_t *cls, void H5_ATTR_UNUSED **request)
{
herr_t ret_value = SUCCEED;
@@ -668,68 +668,81 @@ done:
FUNC_LEAVE_API(ret_value)
}
-/* Helper routine for H5FD_deduplicate(): compare `self` and `other` using
- * the deduplication method of `self`, if it has one; otherwise compare using
- * `H5FDcmp()`.
+/*-------------------------------------------------------------------------
+ * Function: H5FD__dedup
+ *
+ * Purpose: Helper routine for H5FD_deduplicate
+ *
+ * Compares `self` and `other` using the dedup callback of
+ * `self` (if it has one); otherwise compares using `H5FDcmp()`.
+ *
+ * No `dedup' callback:
+ *
+ * If `self` has no de-duplication method, compare `self` and
+ * `other` using `H5FDcmp()` and return `self` if they're equal
+ * and `other` if unequal.
+ *
+ * `dedup' callback present:
+ *
+ * If `self` does have a de-duplication callback, invoke it and
+ * return the method's result: `other` if it duplicates `self`,
+ * `self` if `other` does NOT duplicate it, NULL if `other`
+ * conflicts with `self` or if there is an error.
*
- * If `self` has no de-duplication method, compare `self` and `other`
- * using `H5FDcmp()` and return `self` if they're equal and `other` if
- * unequal.
+ * Return: Success: `self' or `other', as described above
*
- * If `self` does have a de-duplication method, call it and return the
- * method's result: `other` if it duplicates `self`, `self` if `other`
- * does NOT duplicate it, NULL if `other` conflicts with `self` or if
- * there is an error.
+ * Failure: NULL
+ *
+ * Note: Unlike H5FD_deduplicate(), this routine does not free `self`
+ * under any circumstances.
+ *
+ *-------------------------------------------------------------------------
*
- * Unlike H5FD_deduplicate(), this routine does not free `self` under any
- * circumstances.
*/
-static H5FD_t *
-H5FD_dedup(H5FD_t *self, H5FD_t *other, hid_t fapl)
-{
- H5FD_t *(*dedup)(H5FD_t *, H5FD_t *, hid_t);
-
- if ((dedup = self->cls->dedup) != NULL)
- return (*dedup)(self, other, fapl);
-
- if (H5FDcmp(self, other) == 0)
- return self;
- return other;
-}
-
-/* Search the already-opened VFD instances for an instance similar to the
- * instance `file` newly-opened using file-access properties given by `fapl`.
+/*-------------------------------------------------------------------------
+ * Function: H5FD_deduplicate
+ *
+ * Purpose: Search the already-opened VFD instances for an instance
+ * similar to the instance `file` newly-opened using file access
+ * properties given by `fapl_id`.
*
- * If there is an already-open instance that is functionally
- * identical to `file`, close `file` and return the already-open instance.
+ * Return: It's complicated...
*
- * If there is an already-open instance that conflicts with `file` because,
- * for example, its file-access properties are incompatible with `fapl`'s
- * or, for another example, it is under exclusive control by a third VFD
- * instance, then close `file` and return `NULL`.
+ * If there is an already-open instance that is functionally
+ * identical to `file`, close `file` and return the already
+ * open instance.
*
- * Otherwise, return `file` to indicate that there are no identical or
- * conflicting VFD instances already open.
+ * If there is an already open instance that conflicts with
+ * `file` because, for example, its file-access properties are
+ * incompatible with `fapl_id`'s or, for another example, it is
+ * under exclusive control by a third VFD instance, then close
+ * `file` and return `NULL`.
+ *
+ * Otherwise, return `file` to indicate that there are no
+ * identical or conflicting VFD instances already open.
+ *-------------------------------------------------------------------------
*/
H5FD_t *
-H5FD_deduplicate(H5FD_t *file, hid_t fapl)
+H5FD_deduplicate(H5FD_t *file, hid_t fapl_id)
{
- H5FD_t * deduped = file;
H5FD_wrap_t *item;
+ H5FD_t * ret_value = file;
+
+ FUNC_ENTER_NOAPI(NULL)
TAILQ_FOREACH(item, &all_vfds, link)
{
- /* skip "self" */
+ /* Skip "self" */
if (item->file == file)
continue;
- /* skip files with exclusive owners, for now */
+ /* Skip files with exclusive owners, for now */
if (item->file->exc_owner != NULL)
continue;
- if ((deduped = H5FD_dedup(item->file, file, fapl)) != file)
- goto finish;
+ if ((ret_value = H5FD_vfd_swmr_dedup(item->file, file, fapl_id)) != file)
+ goto done;
}
/* If we reach this stage, then we identified neither a conflict nor a
@@ -741,19 +754,17 @@ H5FD_deduplicate(H5FD_t *file, hid_t fapl)
if (item->file == file || item->file->exc_owner == NULL)
continue;
- if (H5FDcmp(file, item->file) == 0) {
- deduped = NULL;
- break;
- }
+ if (H5FD_cmp(file, item->file) == 0)
+ HGOTO_ERROR(H5E_VFL, H5E_FILEOPEN, NULL,
+ "found a conflicting open file when searching for duplicates")
}
-finish:
- if (deduped != file && H5FD_close(file) < 0) {
- HERROR(H5E_FILE, H5E_CANTOPENFILE, "could not close file");
- return NULL;
- }
- return deduped;
-}
+done:
+ if (ret_value != file && H5FD_close(file) < 0)
+ HDONE_ERROR(H5E_VFL, H5E_CANTCLOSEFILE, NULL, "could not close file")
+
+ FUNC_LEAVE_NOAPI(ret_value)
+} /* end H5FD_deduplicate() */
/*-------------------------------------------------------------------------
* Function: H5FD_open
diff --git a/src/H5FDcore.c b/src/H5FDcore.c
index f405200..50288c4 100644
--- a/src/H5FDcore.c
+++ b/src/H5FDcore.c
@@ -183,7 +183,6 @@ static const H5FD_class_t H5FD_core_g = {
H5FD__core_lock, /* lock */
H5FD__core_unlock, /* unlock */
H5FD__core_delete, /* del */
- NULL, /* dedup */
H5FD_FLMAP_DICHOTOMY /* fl_map */
};
diff --git a/src/H5FDdevelop.h b/src/H5FDdevelop.h
index 5cf30ff..a723a1d 100644
--- a/src/H5FDdevelop.h
+++ b/src/H5FDdevelop.h
@@ -192,7 +192,6 @@ typedef struct H5FD_class_t {
herr_t (*lock)(H5FD_t *file, hbool_t rw);
herr_t (*unlock)(H5FD_t *file);
herr_t (*del)(const char *name, hid_t fapl);
- H5FD_t *(*dedup)(H5FD_t *, H5FD_t *, hid_t);
H5FD_mem_t fl_map[H5FD_MEM_NTYPES];
} H5FD_class_t;
diff --git a/src/H5FDdirect.c b/src/H5FDdirect.c
index 2a51883..a1b7b7e 100644
--- a/src/H5FDdirect.c
+++ b/src/H5FDdirect.c
@@ -172,7 +172,6 @@ static const H5FD_class_t H5FD_direct_g = {
H5FD__direct_lock, /* lock */
H5FD__direct_unlock, /* unlock */
H5FD__direct_delete, /* del */
- NULL, /* dedup */
H5FD_FLMAP_DICHOTOMY /* fl_map */
};
diff --git a/src/H5FDfamily.c b/src/H5FDfamily.c
index 2356309..b265e1d 100644
--- a/src/H5FDfamily.c
+++ b/src/H5FDfamily.c
@@ -137,7 +137,6 @@ static const H5FD_class_t H5FD_family_g = {
H5FD__family_lock, /* lock */
H5FD__family_unlock, /* unlock */
H5FD__family_delete, /* del */
- NULL, /* dedup */
H5FD_FLMAP_DICHOTOMY /* fl_map */
};
diff --git a/src/H5FDhdfs.c b/src/H5FDhdfs.c
index b308f17..102a3ab 100644
--- a/src/H5FDhdfs.c
+++ b/src/H5FDhdfs.c
@@ -310,7 +310,6 @@ static const H5FD_class_t H5FD_hdfs_g = {
NULL, /* lock */
NULL, /* unlock */
NULL, /* del */
- NULL, /* dedup */
H5FD_FLMAP_DICHOTOMY /* fl_map */
};
diff --git a/src/H5FDlog.c b/src/H5FDlog.c
index 4fd5e27..707c97b 100644
--- a/src/H5FDlog.c
+++ b/src/H5FDlog.c
@@ -212,7 +212,6 @@ static const H5FD_class_t H5FD_log_g = {
H5FD__log_lock, /* lock */
H5FD__log_unlock, /* unlock */
H5FD__log_delete, /* del */
- NULL, /* dedup */
H5FD_FLMAP_DICHOTOMY /* fl_map */
};
diff --git a/src/H5FDmirror.c b/src/H5FDmirror.c
index 1886714..cf14c90 100644
--- a/src/H5FDmirror.c
+++ b/src/H5FDmirror.c
@@ -192,7 +192,6 @@ static const H5FD_class_t H5FD_mirror_g = {
H5FD__mirror_lock, /* lock */
H5FD__mirror_unlock, /* unlock */
NULL, /* del */
- NULL, /* dedup */
H5FD_FLMAP_DICHOTOMY /* fl_map */
};
diff --git a/src/H5FDmpio.c b/src/H5FDmpio.c
index 2d86eed..dd40399 100644
--- a/src/H5FDmpio.c
+++ b/src/H5FDmpio.c
@@ -127,7 +127,6 @@ static const H5FD_class_mpi_t H5FD_mpio_g = {
NULL, /* lock */
NULL, /* unlock */
H5FD__mpio_delete, /* del */
- NULL, /* dedup */
H5FD_FLMAP_DICHOTOMY /* fl_map */
}, /* End of superclass information */
H5FD__mpio_mpi_rank, /* get_rank */
diff --git a/src/H5FDmulti.c b/src/H5FDmulti.c
index 1b5815a..86f7664 100644
--- a/src/H5FDmulti.c
+++ b/src/H5FDmulti.c
@@ -201,7 +201,6 @@ static const H5FD_class_t H5FD_multi_g = {
H5FD_multi_lock, /* lock */
H5FD_multi_unlock, /* unlock */
H5FD_multi_delete, /* del */
- NULL, /* dedup */
H5FD_FLMAP_DEFAULT /* fl_map */
};
diff --git a/src/H5FDprivate.h b/src/H5FDprivate.h
index 2e3d270..0a8850f 100644
--- a/src/H5FDprivate.h
+++ b/src/H5FDprivate.h
@@ -367,6 +367,7 @@ H5_DLL H5FD_vfd_swmr_idx_entry_t *vfd_swmr_enlarge_shadow_index(struct H5F_t *);
H5_DLL void H5FD_vfd_swmr_dump_status(H5FD_t *, uint64_t);
H5_DLL void H5FD_vfd_swmr_set_pb_configured(H5FD_t *_file);
H5_DLL void H5FD_vfd_swmr_record_elapsed_ticks(H5FD_t *, uint64_t);
+H5_DLL H5FD_t *H5FD_vfd_swmr_dedup(H5FD_t *_self, H5FD_t *_other, hid_t fapl_id);
/* Function prototypes for MPI based VFDs*/
#ifdef H5_HAVE_PARALLEL
diff --git a/src/H5FDros3.c b/src/H5FDros3.c
index 0303b50..6e116ee 100644
--- a/src/H5FDros3.c
+++ b/src/H5FDros3.c
@@ -267,7 +267,6 @@ static const H5FD_class_t H5FD_ros3_g = {
NULL, /* lock */
NULL, /* unlock */
NULL, /* del */
- NULL, /* dedup */
H5FD_FLMAP_DICHOTOMY /* fl_map */
};
diff --git a/src/H5FDsec2.c b/src/H5FDsec2.c
index c694190..d823e3c 100644
--- a/src/H5FDsec2.c
+++ b/src/H5FDsec2.c
@@ -173,7 +173,6 @@ static const H5FD_class_t H5FD_sec2_g = {
H5FD__sec2_lock, /* lock */
H5FD__sec2_unlock, /* unlock */
H5FD__sec2_delete, /* del */
- NULL, /* dedup */
H5FD_FLMAP_DICHOTOMY /* fl_map */
};
diff --git a/src/H5FDsplitter.c b/src/H5FDsplitter.c
index 91a8e84..c27cd1b 100644
--- a/src/H5FDsplitter.c
+++ b/src/H5FDsplitter.c
@@ -163,7 +163,6 @@ static const H5FD_class_t H5FD_splitter_g = {
H5FD__splitter_lock, /* lock */
H5FD__splitter_unlock, /* unlock */
NULL, /* del */
- NULL, /* dedup */
H5FD_FLMAP_DICHOTOMY /* fl_map */
};
diff --git a/src/H5FDstdio.c b/src/H5FDstdio.c
index f9faf53..6631325 100644
--- a/src/H5FDstdio.c
+++ b/src/H5FDstdio.c
@@ -215,7 +215,6 @@ static const H5FD_class_t H5FD_stdio_g = {
H5FD_stdio_lock, /* lock */
H5FD_stdio_unlock, /* unlock */
H5FD_stdio_delete, /* del */
- NULL, /* dedup */
H5FD_FLMAP_DICHOTOMY /* fl_map */
};
diff --git a/src/H5FDvfd_swmr.c b/src/H5FDvfd_swmr.c
index 316ca6d..568f5d9 100644
--- a/src/H5FDvfd_swmr.c
+++ b/src/H5FDvfd_swmr.c
@@ -24,71 +24,64 @@
#include "H5Iprivate.h" /* IDs */
#include "H5MMprivate.h" /* Memory management */
#include "H5Pprivate.h" /* Property lists */
-#include "H5retry_private.h" /* Retry loops. */
+#include "H5retry_private.h" /* Retry loops. */
/* The driver identification number, initialized at runtime */
static hid_t H5FD_VFD_SWMR_g = 0;
+/* The description of a file belonging to this driver */
typedef struct H5FD_vfd_swmr_t {
- H5FD_t pub; /* public stuff, must be */
- /* first */
+ H5FD_t pub; /* public stuff, must be first */
/* HDF5 file */
- char hdf5_filename[H5FD_MAX_FILENAME_LEN]; /* Name of the HDF5 file from */
- /* open */
- H5FD_t *hdf5_file_lf; /* Driver info for the HDF5 */
- /* file */
+ char hdf5_filename[H5FD_MAX_FILENAME_LEN]; /* Name of the HDF5 file from open */
+ H5FD_t *hdf5_file_lf; /* Driver info for the HDF5 file */
/* Metadata file */
- int md_fd; /* File descriptor for the */
- /* metadata file */
- uint32_t md_pages_reserved; /* # of pages reserved at the */
- /* head of the metadata file */
- char md_file_path[H5FD_MAX_FILENAME_LEN]; /* Name of the metadate file */
- H5FD_vfd_swmr_md_header md_header; /* Metadata file header */
- H5FD_vfd_swmr_md_index md_index; /* Metadata file index */
-
- uint64_t *api_elapsed_ticks; /* Histogram of ticks elapsed
- * inside the API (reader only).
- * api_elapsed_ticks[elapsed] is
- * the number of times `elapsed`
- * ticks passed in an API call
- * during the program lifetime.
- */
- uint32_t api_elapsed_nbuckets; /* Number of histogram buckets. */
-
- hbool_t pb_configured; /* boolean flag set to TRUE */
- /* when the page buffer is */
- /* and to FALSE otherwise. */
- /* Used for sanity checking. */
- H5F_vfd_swmr_config_t config;
- hbool_t writer; /* True iff configured to write.
- * All methods on a write-mode
- * SWMR VFD instance are passed
- * to the lower VFD instance.
- */
+ int md_fd; /* File descriptor for the metadata file */
+ uint32_t md_pages_reserved; /* # of pages reserved at the head of the metadata file */
+ char md_file_path[H5FD_MAX_FILENAME_LEN]; /* Name of the metadate file */
+ H5FD_vfd_swmr_md_header md_header; /* Metadata file header */
+ H5FD_vfd_swmr_md_index md_index; /* Metadata file index */
+
+ /* Histogram of ticks elapsed inside the API (reader only).
+ * api_elapsed_ticks[elapsed] is the number of times
+ * `elapsed' ticks passed during an API call in the
+ * program's lifetime.
+ */
+ uint64_t *api_elapsed_ticks; /* Array of histogram buckets */
+ uint32_t api_elapsed_nbuckets; /* Number of histogram buckets. */
+
+ hbool_t pb_configured; /* Sanity-checking flag set when page buffer is configured */
+ H5F_vfd_swmr_config_t config; /* VFD SWMR configuration */
+
+ /* Flag set if the file is a SWMR writer.
+ * All methods on a write-mode SWMR VFD instance are passed
+ * to the lower VFD instance.
+ */
+ hbool_t writer;
+
} H5FD_vfd_swmr_t;
#define MAXADDR (((haddr_t)1 << (8 * sizeof(HDoff_t) - 1)) - 1)
/* Prototypes */
-static herr_t H5FD_vfd_swmr_term(void);
-static H5FD_t *H5FD_vfd_swmr_open(const char *name, unsigned flags, hid_t fapl_id, haddr_t maxaddr);
-static herr_t H5FD_vfd_swmr_close(H5FD_t *_file);
-static int H5FD_vfd_swmr_cmp(const H5FD_t *_f1, const H5FD_t *_f2);
-static H5FD_t *H5FD_vfd_swmr_dedup(H5FD_t *, H5FD_t *, hid_t);
-static herr_t H5FD_vfd_swmr_query(const H5FD_t *_f1, unsigned long *flags);
-static haddr_t H5FD_vfd_swmr_get_eoa(const H5FD_t *_file, H5FD_mem_t type);
-static herr_t H5FD_vfd_swmr_set_eoa(H5FD_t *_file, H5FD_mem_t type, haddr_t addr);
-static haddr_t H5FD_vfd_swmr_get_eof(const H5FD_t *_file, H5FD_mem_t type);
-static herr_t H5FD_vfd_swmr_get_handle(H5FD_t *_file, hid_t fapl, void **file_handle);
-static herr_t H5FD_vfd_swmr_read(H5FD_t *_file, H5FD_mem_t type, hid_t fapl_id, haddr_t addr, size_t size,
- void *buf);
-static herr_t H5FD_vfd_swmr_write(H5FD_t *_file, H5FD_mem_t type, hid_t fapl_id, haddr_t addr, size_t size,
- const void *buf);
-static herr_t H5FD_vfd_swmr_truncate(H5FD_t *_file, hid_t dxpl_id, hbool_t closing);
-static herr_t H5FD_vfd_swmr_lock(H5FD_t *_file, hbool_t rw);
-static herr_t H5FD_vfd_swmr_unlock(H5FD_t *_file);
+static herr_t H5FD__vfd_swmr_term(void);
+static H5FD_t *H5FD__vfd_swmr_open(const char *name, unsigned flags, hid_t fapl_id, haddr_t maxaddr);
+static herr_t H5FD__vfd_swmr_close(H5FD_t *_file);
+static int H5FD__vfd_swmr_cmp(const H5FD_t *_f1, const H5FD_t *_f2);
+static herr_t H5FD__vfd_swmr_query(const H5FD_t *_f1, unsigned long *flags);
+static haddr_t H5FD__vfd_swmr_get_eoa(const H5FD_t *_file, H5FD_mem_t type);
+static herr_t H5FD__vfd_swmr_set_eoa(H5FD_t *_file, H5FD_mem_t type, haddr_t addr);
+static haddr_t H5FD__vfd_swmr_get_eof(const H5FD_t *_file, H5FD_mem_t type);
+static herr_t H5FD__vfd_swmr_get_handle(H5FD_t *_file, hid_t fapl, void **file_handle);
+static herr_t H5FD__vfd_swmr_read(H5FD_t *_file, H5FD_mem_t type, hid_t fapl_id, haddr_t addr, size_t size,
+ void *buf);
+static herr_t H5FD__vfd_swmr_write(H5FD_t *_file, H5FD_mem_t type, hid_t fapl_id, haddr_t addr, size_t size,
+ const void *buf);
+static herr_t H5FD__vfd_swmr_truncate(H5FD_t *_file, hid_t dxpl_id, hbool_t closing);
+static herr_t H5FD__vfd_swmr_lock(H5FD_t *_file, hbool_t rw);
+static herr_t H5FD__vfd_swmr_unlock(H5FD_t *_file);
/* VFD SWMR */
static htri_t H5FD__vfd_swmr_header_deserialize(H5FD_vfd_swmr_t *, H5FD_vfd_swmr_md_header *);
@@ -97,40 +90,39 @@ static htri_t H5FD__vfd_swmr_index_deserialize(const H5FD_vfd_swmr_t *file, H5FD
static herr_t H5FD__vfd_swmr_load_hdr_and_idx(H5FD_vfd_swmr_t *, hbool_t);
static const H5FD_class_t H5FD_vfd_swmr_g = {
- "vfd_swmr", /* name */
- MAXADDR, /* maxaddr */
- H5F_CLOSE_WEAK, /* fc_degree */
- H5FD_vfd_swmr_term, /* terminate */
- NULL, /* sb_size */
- NULL, /* sb_encode */
- NULL, /* sb_decode */
- 0, /* fapl_size */
- NULL, /* fapl_get */
- NULL, /* fapl_copy */
- NULL, /* fapl_free */
- 0, /* dxpl_size */
- NULL, /* dxpl_copy */
- NULL, /* dxpl_free */
- H5FD_vfd_swmr_open, /* open */
- H5FD_vfd_swmr_close, /* close */
- H5FD_vfd_swmr_cmp, /* cmp */
- H5FD_vfd_swmr_query, /* query */
- NULL, /* get_type_map */
- NULL, /* alloc */
- NULL, /* free */
- H5FD_vfd_swmr_get_eoa, /* get_eoa */
- H5FD_vfd_swmr_set_eoa, /* set_eoa */
- H5FD_vfd_swmr_get_eof, /* get_eof */
- H5FD_vfd_swmr_get_handle, /* get_handle */
- H5FD_vfd_swmr_read, /* read */
- H5FD_vfd_swmr_write, /* write */
- NULL, /* flush */
- H5FD_vfd_swmr_truncate, /* truncate */
- H5FD_vfd_swmr_lock, /* lock */
- H5FD_vfd_swmr_unlock, /* unlock */
- NULL, /* del */
- H5FD_vfd_swmr_dedup, /* dedup */
- H5FD_FLMAP_DICHOTOMY /* fl_map */
+ "vfd_swmr", /* name */
+ MAXADDR, /* maxaddr */
+ H5F_CLOSE_WEAK, /* fc_degree */
+ H5FD__vfd_swmr_term, /* terminate */
+ NULL, /* sb_size */
+ NULL, /* sb_encode */
+ NULL, /* sb_decode */
+ 0, /* fapl_size */
+ NULL, /* fapl_get */
+ NULL, /* fapl_copy */
+ NULL, /* fapl_free */
+ 0, /* dxpl_size */
+ NULL, /* dxpl_copy */
+ NULL, /* dxpl_free */
+ H5FD__vfd_swmr_open, /* open */
+ H5FD__vfd_swmr_close, /* close */
+ H5FD__vfd_swmr_cmp, /* cmp */
+ H5FD__vfd_swmr_query, /* query */
+ NULL, /* get_type_map */
+ NULL, /* alloc */
+ NULL, /* free */
+ H5FD__vfd_swmr_get_eoa, /* get_eoa */
+ H5FD__vfd_swmr_set_eoa, /* set_eoa */
+ H5FD__vfd_swmr_get_eof, /* get_eof */
+ H5FD__vfd_swmr_get_handle, /* get_handle */
+ H5FD__vfd_swmr_read, /* read */
+ H5FD__vfd_swmr_write, /* write */
+ NULL, /* flush */
+ H5FD__vfd_swmr_truncate, /* truncate */
+ H5FD__vfd_swmr_lock, /* lock */
+ H5FD__vfd_swmr_unlock, /* unlock */
+ NULL, /* del */
+ H5FD_FLMAP_DICHOTOMY /* fl_map */
};
/* Declare a free list to manage the H5FD_vfd_swmr_t struct */
@@ -195,7 +187,7 @@ done:
} /* end H5FD_vfd_swmr_init() */
/*---------------------------------------------------------------------------
- * Function: H5FD_vfd_swmr_term
+ * Function: H5FD__vfd_swmr_term
*
* Purpose: Shut down the VFD
*
@@ -207,15 +199,15 @@ done:
*---------------------------------------------------------------------------
*/
static herr_t
-H5FD_vfd_swmr_term(void)
+H5FD__vfd_swmr_term(void)
{
- FUNC_ENTER_NOAPI_NOINIT_NOERR
+ FUNC_ENTER_STATIC_NOERR
/* Reset VFL ID */
H5FD_VFD_SWMR_g = 0;
FUNC_LEAVE_NOAPI(SUCCEED)
-} /* end H5FD_vfd_swmr_term() */
+} /* end H5FD__vfd_swmr_term() */
/*-------------------------------------------------------------------------
* Function: H5Pset_fapl_vfd_swmr (Not yet)
@@ -255,15 +247,15 @@ H5FD__swmr_reader_open(H5FD_vfd_swmr_t *file)
h5_retry_t retry;
hbool_t do_try; /* more tries remain */
herr_t ret_value = SUCCEED;
+
FUNC_ENTER_STATIC
file->api_elapsed_nbuckets = file->config.max_lag + 1;
file->api_elapsed_ticks = H5MM_calloc(file->api_elapsed_nbuckets * sizeof(*file->api_elapsed_ticks));
- if (file->api_elapsed_ticks == NULL) {
- HGOTO_ERROR(H5E_FILE, H5E_CANTALLOC, FAIL, "could not allocate API elapsed ticks");
- }
+ if (file->api_elapsed_ticks == NULL)
+ HGOTO_ERROR(H5E_VFL, H5E_CANTALLOC, FAIL, "could not allocate API elapsed ticks")
/* Retry on opening the metadata file */
for (do_try = h5_retry_init(&retry, H5FD_VFD_SWMR_MD_FILE_RETRY_MAX, H5_RETRY_DEFAULT_MINIVAL,
@@ -286,10 +278,10 @@ H5FD__swmr_reader_open(H5FD_vfd_swmr_t *file)
done:
FUNC_LEAVE_NOAPI(ret_value)
-}
+} /* end H5FD__swmr_reader_open() */
/*-------------------------------------------------------------------------
- * Function: H5FD_vfd_swmr_open
+ * Function: H5FD__vfd_swmr_open
*
* Purpose: Open the metadata file and the underlying HDF5 file
*
@@ -301,7 +293,7 @@ done:
*-------------------------------------------------------------------------
*/
static H5FD_t *
-H5FD_vfd_swmr_open(const char *name, unsigned flags, hid_t fapl_id, haddr_t maxaddr)
+H5FD__vfd_swmr_open(const char *name, unsigned flags, hid_t fapl_id, haddr_t maxaddr)
{
H5FD_vfd_swmr_t * file = NULL;
size_t page_buf_size;
@@ -309,35 +301,31 @@ H5FD_vfd_swmr_open(const char *name, unsigned flags, hid_t fapl_id, haddr_t maxa
H5F_vfd_swmr_config_t *vfd_swmr_config;
H5FD_t * ret_value = NULL; /* Return value */
- FUNC_ENTER_NOAPI_NOINIT
+ FUNC_ENTER_STATIC
/* Get file access property list */
- if (NULL == (plist = (H5P_genplist_t *)H5I_object(fapl_id))) {
- HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, NULL, "not a file access property list");
- }
+ if (NULL == (plist = (H5P_genplist_t *)H5I_object(fapl_id)))
+ HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, NULL, "not a file access property list")
if (H5P_get(plist, H5F_ACS_PAGE_BUFFER_SIZE_NAME, &page_buf_size) < 0)
- HGOTO_ERROR(H5E_FILE, H5E_CANTGET, NULL, "can't get page buffer size");
+ HGOTO_ERROR(H5E_VFL, H5E_CANTGET, NULL, "can't get page buffer size");
/* Paged allocation, too, has to be enabled, but the page buffer
* initialization (H5PB_create) will detect a conflicting configuration
* and return an error.
*/
- if (page_buf_size == 0) {
- HGOTO_ERROR(H5E_FILE, H5E_CANTGET, NULL, "page buffering must be enabled");
- }
+ if (page_buf_size == 0)
+ HGOTO_ERROR(H5E_VFL, H5E_CANTGET, NULL, "page buffering must be enabled")
/* Create the new driver struct */
- if (NULL == (file = H5FL_CALLOC(H5FD_vfd_swmr_t))) {
- HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, NULL, "unable to allocate file struct");
- }
+ if (NULL == (file = H5FL_CALLOC(H5FD_vfd_swmr_t)))
+ HGOTO_ERROR(H5E_VFL, H5E_NOSPACE, NULL, "unable to allocate file struct")
vfd_swmr_config = &file->config;
/* Get VFD SWMR configuration */
- if (H5P_get(plist, H5F_ACS_VFD_SWMR_CONFIG_NAME, vfd_swmr_config) < 0) {
- HGOTO_ERROR(H5E_PLIST, H5E_CANTGET, NULL, "can't get VFD SWMR config info");
- }
+ if (H5P_get(plist, H5F_ACS_VFD_SWMR_CONFIG_NAME, vfd_swmr_config) < 0)
+ HGOTO_ERROR(H5E_VFL, H5E_CANTGET, NULL, "can't get VFD SWMR config info")
file->md_fd = -1;
file->hdf5_file_lf = NULL;
@@ -354,9 +342,8 @@ H5FD_vfd_swmr_open(const char *name, unsigned flags, hid_t fapl_id, haddr_t maxa
file->writer = vfd_swmr_config->writer;
/* Ensure that this is the reader */
- if (!vfd_swmr_config->writer && H5FD__swmr_reader_open(file) < 0) {
- HGOTO_ERROR(H5E_VFL, H5E_OPENERROR, NULL, "perform reader-specific opening steps failed");
- }
+ if (!vfd_swmr_config->writer && H5FD__swmr_reader_open(file) < 0)
+ HGOTO_ERROR(H5E_VFL, H5E_OPENERROR, NULL, "perform reader-specific opening steps failed")
/* Hard-wired to open the underlying HDF5 file with SEC2 */
if ((file->hdf5_file_lf = H5FD_open(name, flags, H5P_FILE_ACCESS_DEFAULT, maxaddr)) == NULL)
@@ -380,23 +367,19 @@ H5FD_vfd_swmr_open(const char *name, unsigned flags, hid_t fapl_id, haddr_t maxa
done:
/* Handle closing if error */
- if (NULL == ret_value && file) {
-
- if (H5FD_vfd_swmr_close(&file->pub) < 0)
-
- HDONE_ERROR(H5E_FILE, H5E_CANTCLOSEFILE, NULL, "error from closing")
-
- } /* end if */
+ if (NULL == ret_value && file)
+ if (H5FD__vfd_swmr_close(&file->pub) < 0)
+ HDONE_ERROR(H5E_VFL, H5E_CANTCLOSEFILE, NULL, "error from closing")
FUNC_LEAVE_NOAPI(ret_value)
-} /* end H5FD_vfd_swmr_open() */
+} /* end H5FD__vfd_swmr_open() */
/* Perform the reader-only aspects of closing in VFD SWMR mode: optionally
* log and always release the histogram of ticks spent in API calls,
* close the shadow file, release the shadow index.
*/
static void
-swmr_reader_close(H5FD_vfd_swmr_t *file)
+H5FD__swmr_reader_close(H5FD_vfd_swmr_t *file)
{
vfd_swmr_reader_did_increase_tick_to(0);
@@ -404,18 +387,17 @@ swmr_reader_close(H5FD_vfd_swmr_t *file)
H5MM_xfree(file->api_elapsed_ticks);
/* Close the metadata file */
- if (file->md_fd >= 0 && HDclose(file->md_fd) < 0) {
+ if (file->md_fd >= 0 && HDclose(file->md_fd) < 0)
/* Push error, but keep going */
- HERROR(H5E_FILE, H5E_CANTCLOSEFILE, "unable to close the metadata file");
- }
+ HERROR(H5E_VFL, H5E_CANTCLOSEFILE, "unable to close the metadata file");
/* Free the index entries */
if (file->md_index.num_entries && file->md_index.entries)
file->md_index.entries = H5FL_SEQ_FREE(H5FD_vfd_swmr_idx_entry_t, file->md_index.entries);
-}
+} /* end H5FD__swmr_reader_close() */
/*-------------------------------------------------------------------------
- * Function: H5FD_vfd_swmr_close
+ * Function: H5FD__vfd_swmr_close
*
* Purpose: Handle closing for VFD SWMR driver
* --close the underlying HDF5 file
@@ -428,12 +410,12 @@ swmr_reader_close(H5FD_vfd_swmr_t *file)
*-------------------------------------------------------------------------
*/
static herr_t
-H5FD_vfd_swmr_close(H5FD_t *_file)
+H5FD__vfd_swmr_close(H5FD_t *_file)
{
H5FD_vfd_swmr_t *file = (H5FD_vfd_swmr_t *)_file;
herr_t ret_value = SUCCEED; /* Return value */
- FUNC_ENTER_NOAPI_NOINIT
+ FUNC_ENTER_STATIC
if (file->hdf5_file_lf != NULL) {
if (file->hdf5_file_lf->exc_owner != NULL) {
@@ -444,21 +426,21 @@ H5FD_vfd_swmr_close(H5FD_t *_file)
/* Close the underlying file */
if (H5FD_close(file->hdf5_file_lf) < 0)
/* Push error, but keep going */
- HDONE_ERROR(H5E_FILE, H5E_CANTCLOSEFILE, FAIL, "unable to close the HDF5 file")
+ HDONE_ERROR(H5E_VFL, H5E_CANTCLOSEFILE, FAIL, "unable to close the HDF5 file")
}
if (!file->writer)
- (void)swmr_reader_close(file);
+ H5FD__swmr_reader_close(file);
/* Release the driver info */
file = H5FL_FREE(H5FD_vfd_swmr_t, file);
FUNC_LEAVE_NOAPI(ret_value)
-} /* end H5FD_vfd_swmr_close() */
+} /* end H5FD__vfd_swmr_close() */
/*-------------------------------------------------------------------------
- * Function: H5FD_vfd_swmr_cmp
+ * Function: H5FD__vfd_swmr_cmp
*
* Purpose: Compares two files belonging to this driver using an
* arbitrary (but consistent) ordering.
@@ -470,58 +452,78 @@ H5FD_vfd_swmr_close(H5FD_t *_file)
*-------------------------------------------------------------------------
*/
static int
-H5FD_vfd_swmr_cmp(const H5FD_t *_f1, const H5FD_t *_f2)
+H5FD__vfd_swmr_cmp(const H5FD_t *_f1, const H5FD_t *_f2)
{
const H5FD_vfd_swmr_t *f1 = (const H5FD_vfd_swmr_t *)_f1;
const H5FD_vfd_swmr_t *f2 = (const H5FD_vfd_swmr_t *)_f2;
int ret_value = 0;
- FUNC_ENTER_NOAPI_NOINIT_NOERR
+ FUNC_ENTER_STATIC_NOERR
ret_value = H5FD_cmp(f1->hdf5_file_lf, f2->hdf5_file_lf);
FUNC_LEAVE_NOAPI(ret_value)
-} /* end H5FD_vfd_swmr_cmp() */
+} /* end H5FD_vfd__swmr_cmp() */
-/* Compare the already-opened VFD instance `_self` with the
- * VFD instance `_other` newly-opened with file-access properties `fapl`
- * and indicate whether the instances duplicate each other, if they conflict
- * with each other, or if they are dissimilar.
+/*-------------------------------------------------------------------------
+ * Function: H5FD_vfd_swmr_dedup
+ *
+ * Purpose: Compare the already-opened VFD instance `_self` with the
+ * VFD instance `_other` newly-opened with file-access properties
+ * `fapl_id` and indicate whether the instances duplicate each
+ * other, if they conflict with each other, or if they are
+ * dissimilar.
*
- * If `_self` duplicates `_other`, return `_self`.
+ * If `_self` duplicates `_other`, return `_self`.
*
- * Return NULL on error, or if `_other` and `_self` refer to the same file
- * but the file-access properties, `fapl`, conflict with the properties of
- * `_self`.
+ * Return NULL on error, or if `_other` and `_self` refer to the
+ * same file but the file-access properties, `fapl_id`, conflict
+ * with the properties of `_self`.
*
- * If `_other` neither duplicates nor conflicts with `_self`, then return
- * `_other`.
+ * If `_other` neither duplicates nor conflicts with `_self`,
+ * then return `_other`.
*
- * # Judging duplicate/conflicting/dissimilar VFD instances
+ * NOTE: Judging duplicate/conflicting/dissimilar VFD instances
*
- * `_self` duplicates `_other` if `_other` is also an instance of SWMR
- * class, the instances' lower files are equal under `H5FD_cmp()`, and
- * the file-access properties of `_self` match `fapl`.
- * The wildcard `fapl` value, `H5P_FILE_ACCESS_ANY_VFD`, matches all.
+ * `_self` DUPLICATES `_other` if `_other` is also an instance
+ * of SWMR class, the instances' lower files are equal under
+ * `H5FD_cmp()`, and the file-access properties of `_self` match
+ * `fapl_id`. The wildcard `fapl_id` value,
+ * `H5P_FILE_ACCESS_ANY_VFD`, matches all.
*
- * `_self` also duplicates `_other` if `_other` is not a SWMR instance, but
- * it equals the lower file of `_self` under `H5FD_cmp()`, and `fapl` is
- * `H5P_FILE_ACCESS_ANY_VFD`.
+ * `_self` also DUPLICATES `_other` if `_other` is not a SWMR
+ * instance, but it equals the lower file of `_self` under
+ * `H5FD_cmp()`, and `fapl_id` is `H5P_FILE_ACCESS_ANY_VFD`.
*
- * `_self` and `_other` conflict if both are SWMR instances referring to
- * the same lower file, and their file-access properties differ.
+ * `_self` and `_other` CONFLICT if both are SWMR instances
+ * referring to the same lower file, and their file-access
+ * properties differ.
*
- * `_self` and `_other` conflict if `_other` is not a SWMR instance, it
- * equals the lower file of `_self`, and `fapl` is not equal to
- * `H5P_FILE_ACCESS_ANY_VFD`.
+ * `_self` and `_other` CONFLICT if `_other` is not a SWMR
+ * instance, it equals the lower file of `_self`, and `fapl_id`
+ * is not equal to `H5P_FILE_ACCESS_ANY_VFD`.
+ *
+ * Return: Success: `_self' or `_other', as described above
+ * Failure: NULL
+ *-------------------------------------------------------------------------
*/
-static H5FD_t *
-H5FD_vfd_swmr_dedup(H5FD_t *_self, H5FD_t *_other, hid_t fapl)
+H5FD_t *
+H5FD_vfd_swmr_dedup(H5FD_t *_self, H5FD_t *_other, hid_t fapl_id)
{
- H5FD_vfd_swmr_t *self = (H5FD_vfd_swmr_t *)_self;
+ H5FD_vfd_swmr_t *self = (H5FD_vfd_swmr_t *)_self;
+ H5FD_t * ret_value = NULL;
+
+ FUNC_ENTER_NOAPI(NULL);
- HDassert(_self->driver_id == H5FD_VFD_SWMR_g);
+ /* Not VFD SWMR */
+ if (_self->driver_id != H5FD_VFD_SWMR_g) {
+ if (H5FD_cmp(_self, _other) == 0)
+ HGOTO_DONE(_self)
+ else
+ HGOTO_DONE(_other)
+ }
+ /* VFD SWMR */
if (_self->cls == _other->cls) {
H5FD_vfd_swmr_t * other = (H5FD_vfd_swmr_t *)_other;
H5P_genplist_t * plist;
@@ -529,53 +531,47 @@ H5FD_vfd_swmr_dedup(H5FD_t *_self, H5FD_t *_other, hid_t fapl)
hbool_t equal_configs;
if (H5FD_cmp(self->hdf5_file_lf, other->hdf5_file_lf) != 0)
- return _other;
+ HGOTO_DONE(_other)
- /* If fapl == _ANY_VFD, then the match between lower files is
+ /* If fapl_id == _ANY_VFD, then the match between lower files is
* sufficient.
*/
- if (fapl == H5P_FILE_ACCESS_ANY_VFD)
- return _self;
+ if (fapl_id == H5P_FILE_ACCESS_ANY_VFD)
+ HGOTO_DONE(_self)
- /* If fapl != _ANY_VFD, then we have either a duplicate or
+ /* If fapl_id != _ANY_VFD, then we have either a duplicate or
* a conflict. If the VFD SWMR parameters match, then
* return `self` to indicate a duplicate. Otherwise, return
* NULL to indicate a mismatch.
*/
- if (NULL == (plist = H5I_object(fapl))) {
- HERROR(H5E_ARGS, H5E_BADTYPE, "could not get fapl");
- return NULL;
- }
+ if (NULL == (plist = H5I_object(fapl_id)))
+ HGOTO_ERROR(H5E_VFL, H5E_CANTGET, NULL, "could not get fapl")
- if ((config = H5MM_malloc(sizeof(*config))) == NULL) {
- HERROR(H5E_ARGS, H5E_BADTYPE, "could not allocate config");
- return NULL;
- }
- if (H5P_get(plist, H5F_ACS_VFD_SWMR_CONFIG_NAME, config) < 0) {
- HERROR(H5E_PLIST, H5E_CANTGET, "cannot get VFD SWMR config");
- return NULL;
- }
+ if ((config = H5MM_malloc(sizeof(*config))) == NULL)
+ HGOTO_ERROR(H5E_VFL, H5E_BADTYPE, NULL, "could not allocate config")
+ if (H5P_get(plist, H5F_ACS_VFD_SWMR_CONFIG_NAME, config) < 0)
+ HGOTO_ERROR(H5E_VFL, H5E_CANTGET, NULL, "cannot get VFD SWMR config")
equal_configs = HDmemcmp(&self->config, config, sizeof(*config)) == 0;
H5MM_xfree(config);
if (equal_configs)
- return _self;
+ HGOTO_DONE(_self)
- HERROR(H5E_PLIST, H5E_CANTGET, "inconsistent VFD SWMR config");
- return NULL;
+ HGOTO_ERROR(H5E_VFL, H5E_CANTGET, NULL, "inconsistent VFD SWMR config")
}
- else if (H5FD_cmp(self->hdf5_file_lf, _other) == 0) {
- return (fapl == H5P_FILE_ACCESS_ANY_VFD) ? _self : NULL;
- }
- else {
- return _other;
- }
-}
+ else if (H5FD_cmp(self->hdf5_file_lf, _other) == 0)
+ ret_value = (fapl_id == H5P_FILE_ACCESS_ANY_VFD) ? _self : NULL;
+ else
+ ret_value = _other;
+
+done:
+ FUNC_LEAVE_NOAPI(ret_value);
+} /* end H5FD_vfd_swmr_dedup() */
/*-------------------------------------------------------------------------
- * Function: H5FD_vfd_swmr_query
+ * Function: H5FD__vfd_swmr_query
*
* Purpose: Set the flags that this VFL driver is capable of supporting.
* (listed in H5FDpublic.h)
@@ -585,49 +581,45 @@ H5FD_vfd_swmr_dedup(H5FD_t *_self, H5FD_t *_other, hid_t fapl)
*-------------------------------------------------------------------------
*/
static herr_t
-H5FD_vfd_swmr_query(const H5FD_t H5_ATTR_UNUSED *_file, unsigned long *flags /* out */)
+H5FD__vfd_swmr_query(const H5FD_t H5_ATTR_UNUSED *_file, unsigned long *flags /* out */)
{
- FUNC_ENTER_NOAPI_NOINIT_NOERR
+ FUNC_ENTER_STATIC_NOERR
/* Set the VFL feature flags that this driver supports */
if (flags) {
*flags = 0;
- *flags |= H5FD_FEAT_AGGREGATE_METADATA; /* OK to aggregate */
- /* metadata allocations */
- *flags |= H5FD_FEAT_ACCUMULATE_METADATA; /* OK to accumulate */
- /* metadata for faster */
- /* writes */
+ /* OK to aggregate metadata allocations */
+ *flags |= H5FD_FEAT_AGGREGATE_METADATA;
- *flags |= H5FD_FEAT_DATA_SIEVE; /* OK to perform data */
- /* sieving for faster */
- /* raw data reads & */
- /* writes */
+ /* OK to accumulate metadata for faster writes */
+ *flags |= H5FD_FEAT_ACCUMULATE_METADATA;
- *flags |= H5FD_FEAT_AGGREGATE_SMALLDATA; /* OK to aggregate */
- /* "small" raw data */
- /* allocations */
+ /* OK to perform data sieving for faster raw data reads & writes */
+ *flags |= H5FD_FEAT_DATA_SIEVE;
- *flags |= H5FD_FEAT_POSIX_COMPAT_HANDLE; /* get_handle callback */
- /* returns a POSIX file */
- /* descriptor */
+ /* OK to aggregate "small" raw data allocations */
+ *flags |= H5FD_FEAT_AGGREGATE_SMALLDATA;
- *flags |= H5FD_FEAT_SUPPORTS_SWMR_IO; /* VFD supports the */
- /* single-writer/ */
- /* multiple-readers */
- /* (SWMR) pattern */
+ /* get_handle callback returns a POSIX file descriptor */
+ *flags |= H5FD_FEAT_POSIX_COMPAT_HANDLE;
- *flags |= H5FD_FEAT_DEFAULT_VFD_COMPATIBLE; /* VFD creates a file */
- /* which can be opened */
- /* with the default VFD */
+ /* VFD supports the single-writer / multiple readers (SWMR) pattern */
+ *flags |= H5FD_FEAT_SUPPORTS_SWMR_IO;
- } /* end if */
+ /* VFD creates a file that can be opened with the default VFD
+ *
+ * NOTE: When this VFD becomes a true passthrough, this flag will
+ * probably need to go away.
+ */
+ *flags |= H5FD_FEAT_DEFAULT_VFD_COMPATIBLE;
+ }
FUNC_LEAVE_NOAPI(SUCCEED)
-} /* end H5FD_vfd_swmr_query() */
+} /* end H5FD__vfd_swmr_query() */
/*-------------------------------------------------------------------------
- * Function: H5FD_vfd_swmr_get_eoa
+ * Function: H5FD__vfd_swmr_get_eoa
*
* Purpose: Gets the end-of-address marker for the file for the
* underlying HDF5 file. The EOA marker is the first address
@@ -638,51 +630,49 @@ H5FD_vfd_swmr_query(const H5FD_t H5_ATTR_UNUSED *_file, unsigned long *flags /*
*-------------------------------------------------------------------------
*/
static haddr_t
-H5FD_vfd_swmr_get_eoa(const H5FD_t *_file, H5FD_mem_t type)
+H5FD__vfd_swmr_get_eoa(const H5FD_t *_file, H5FD_mem_t type)
{
const H5FD_vfd_swmr_t *file = (const H5FD_vfd_swmr_t *)_file;
haddr_t ret_value = HADDR_UNDEF;
- FUNC_ENTER_NOAPI_NOINIT
+ FUNC_ENTER_STATIC
if ((ret_value = H5FD_get_eoa(file->hdf5_file_lf, type)) == HADDR_UNDEF)
-
- HGOTO_ERROR(H5E_FILE, H5E_CANTINIT, HADDR_UNDEF, "unable to get HDF5 file eoa")
+ HGOTO_ERROR(H5E_VFL, H5E_CANTINIT, HADDR_UNDEF, "unable to get HDF5 file eoa")
done:
FUNC_LEAVE_NOAPI(ret_value)
-} /* end H5FD_vfd_swmr_get_eoa() */
+} /* end H5FD__vfd_swmr_get_eoa() */
/*-------------------------------------------------------------------------
- * Function: H5FD_vfd_swmr_set_eoa
+ * Function: H5FD__vfd_swmr_set_eoa
*
* Purpose: Set the end-of-address marker for the underlying HDF5 file.
* This function is called shortly after an existing HDF5 file
* is opened in order to tell the driver where the end of the
* HDF5 data is located.
*
- * Return: SUCCEED (Can't fail)
+ * Return: SUCCEED/FAIL
*
*-------------------------------------------------------------------------
*/
static herr_t
-H5FD_vfd_swmr_set_eoa(H5FD_t *_file, H5FD_mem_t type, haddr_t addr)
+H5FD__vfd_swmr_set_eoa(H5FD_t *_file, H5FD_mem_t type, haddr_t addr)
{
H5FD_vfd_swmr_t *file = (H5FD_vfd_swmr_t *)_file;
herr_t ret_value = SUCCEED;
- FUNC_ENTER_NOAPI_NOINIT
+ FUNC_ENTER_STATIC
if (H5FD_set_eoa(file->hdf5_file_lf, type, addr) < 0)
-
- HGOTO_ERROR(H5E_FILE, H5E_CANTINIT, FAIL, "unable to set HDF5 file eoa")
+ HGOTO_ERROR(H5E_VFL, H5E_CANTINIT, FAIL, "unable to set HDF5 file eoa")
done:
FUNC_LEAVE_NOAPI(ret_value)
-} /* end H5FD_vfd_swmr_set_eoa() */
+} /* end H5FD__vfd_swmr_set_eoa() */
/*-------------------------------------------------------------------------
- * Function: H5FD_vfd_swmr_get_eof
+ * Function: H5FD__vfd_swmr_get_eof
*
* Purpose: Returns the end-of-file marker, which is the greater of
* either the filesystem end-of-file or the HDF5 end-of-address
@@ -694,38 +684,37 @@ done:
*-------------------------------------------------------------------------
*/
static haddr_t
-H5FD_vfd_swmr_get_eof(const H5FD_t *_file, H5FD_mem_t type)
+H5FD__vfd_swmr_get_eof(const H5FD_t *_file, H5FD_mem_t type)
{
const H5FD_vfd_swmr_t *file = (const H5FD_vfd_swmr_t *)_file;
haddr_t ret_value = HADDR_UNDEF;
- FUNC_ENTER_NOAPI_NOINIT
+ FUNC_ENTER_STATIC
/* LATER: need to determine the metadata file or underlying HDF5 file ? */
if ((ret_value = H5FD_get_eof(file->hdf5_file_lf, type)) == HADDR_UNDEF)
-
- HGOTO_ERROR(H5E_FILE, H5E_CANTINIT, HADDR_UNDEF, "unable to set file eoa")
+ HGOTO_ERROR(H5E_VFL, H5E_CANTINIT, HADDR_UNDEF, "unable to set file eoa")
done:
FUNC_LEAVE_NOAPI(ret_value)
-} /* end H5FD_vfd_swmr_get_eof() */
+} /* end H5FD__vfd_swmr_get_eof() */
/*-------------------------------------------------------------------------
- * Function: H5FD_vfd_swmr_get_handle
+ * Function: H5FD__vfd_swmr_get_handle
*
- * Purpose: Returns the file handle for the underling HDF5 file
+ * Purpose: Returns the file handle for the underling HDF5 file
*
- * Returns: SUCCEED/FAIL
+ * Returns: SUCCEED/FAIL
*
*-------------------------------------------------------------------------
*/
static herr_t
-H5FD_vfd_swmr_get_handle(H5FD_t *_file, hid_t fapl, void **file_handle)
+H5FD__vfd_swmr_get_handle(H5FD_t *_file, hid_t fapl, void **file_handle)
{
H5FD_vfd_swmr_t *file = (H5FD_vfd_swmr_t *)_file;
herr_t ret_value = SUCCEED;
- FUNC_ENTER_NOAPI_NOINIT
+ FUNC_ENTER_STATIC
if (!file_handle)
HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "file handle not valid")
@@ -738,10 +727,10 @@ H5FD_vfd_swmr_get_handle(H5FD_t *_file, hid_t fapl, void **file_handle)
done:
FUNC_LEAVE_NOAPI(ret_value)
-} /* end H5FD_vfd_swmr_get_handle() */
+} /* end H5FD__vfd_swmr_get_handle() */
/*-------------------------------------------------------------------------
- * Function: H5FD_vfd_swmr_read
+ * Function: H5FD__vfd_swmr_read
*
* Purpose: If the target page or multi-page metadata entry is
* defined in the current metadata file index, satisfy
@@ -776,8 +765,8 @@ done:
*-------------------------------------------------------------------------
*/
static herr_t
-H5FD_vfd_swmr_read(H5FD_t *_file, H5FD_mem_t type, hid_t H5_ATTR_UNUSED dxpl_id, const haddr_t addr,
- size_t size, void *const buf /*out*/)
+H5FD__vfd_swmr_read(H5FD_t *_file, H5FD_mem_t type, hid_t H5_ATTR_UNUSED dxpl_id, const haddr_t addr,
+ size_t size, void *const buf /*out*/)
{
const size_t init_size = size;
haddr_t target_page;
@@ -792,7 +781,7 @@ H5FD_vfd_swmr_read(H5FD_t *_file, H5FD_mem_t type, hid_t H5_ATTR_UNUSED dxpl_id,
if (file->writer)
return H5FD_read(file->hdf5_file_lf, type, addr, size, buf);
- FUNC_ENTER_NOAPI_NOINIT
+ FUNC_ENTER_STATIC
HDassert(file && file->pub.cls);
HDassert(buf);
@@ -808,9 +797,9 @@ H5FD_vfd_swmr_read(H5FD_t *_file, H5FD_mem_t type, hid_t H5_ATTR_UNUSED dxpl_id,
if (entry == NULL) {
/* Cannot find addr in index, read from the underlying hdf5 file */
- if (H5FD_read(file->hdf5_file_lf, type, addr, size, buf) < 0) {
- HGOTO_ERROR(H5E_VFL, H5E_READERROR, FAIL, "file read request failed");
- }
+ if (H5FD_read(file->hdf5_file_lf, type, addr, size, buf) < 0)
+ HGOTO_ERROR(H5E_VFL, H5E_READERROR, FAIL, "file read request failed")
+
HGOTO_DONE(SUCCEED);
}
@@ -848,7 +837,7 @@ H5FD_vfd_swmr_read(H5FD_t *_file, H5FD_mem_t type, hid_t H5_ATTR_UNUSED dxpl_id,
} while (-1 == bytes_read && EINTR == errno);
if (-1 == bytes_read)
- HGOTO_ERROR(H5E_IO, H5E_READERROR, FAIL,
+ HGOTO_ERROR(H5E_VFL, H5E_READERROR, FAIL,
"error reading the page/multi-page entry from the md file")
HDassert(0 <= bytes_read && (size_t)bytes_read <= size);
@@ -871,30 +860,30 @@ H5FD_vfd_swmr_read(H5FD_t *_file, H5FD_mem_t type, hid_t H5_ATTR_UNUSED dxpl_id,
H5_checksum_metadata(buf, entry->length, 0) != entry->chksum) {
H5FD_vfd_swmr_md_header tmp_header;
- if (H5FD__vfd_swmr_header_deserialize(file, &tmp_header) != TRUE) {
+ if (H5FD__vfd_swmr_header_deserialize(file, &tmp_header) != TRUE)
HGOTO_ERROR(H5E_VFL, H5E_CANTLOAD, FAIL,
- "checksum error in shadow file entry; could not load header");
- }
+ "checksum error in shadow file entry; could not load header")
- HGOTO_ERROR(H5E_VFL, H5E_CANTLOAD, FAIL, "checksum error in shadow file entry");
+ HGOTO_ERROR(H5E_VFL, H5E_CANTLOAD, FAIL, "checksum error in shadow file entry")
}
done:
FUNC_LEAVE_NOAPI(ret_value)
-} /* end H5FD_vfd_swmr_read() */
+} /* end H5FD__vfd_swmr_read() */
-/*
- * Function: H5FD_vfd_swmr_write
+/*-------------------------------------------------------------------------
+ * Function: H5FD__vfd_swmr_write
*
* Purpose: Writes SIZE bytes of data to FILE beginning at address ADDR
* from buffer BUF according to data transfer properties in
* DXPL_ID.
*
* Return: SUCCEED/FAIL
+ *-------------------------------------------------------------------------
*/
static herr_t
-H5FD_vfd_swmr_write(H5FD_t *_file, H5FD_mem_t type, hid_t H5_ATTR_UNUSED dxpl_id, haddr_t addr, size_t size,
- const void *buf)
+H5FD__vfd_swmr_write(H5FD_t *_file, H5FD_mem_t type, hid_t H5_ATTR_UNUSED dxpl_id, haddr_t addr, size_t size,
+ const void *buf)
{
H5FD_vfd_swmr_t *file = (H5FD_vfd_swmr_t *)_file;
@@ -904,7 +893,7 @@ H5FD_vfd_swmr_write(H5FD_t *_file, H5FD_mem_t type, hid_t H5_ATTR_UNUSED dxpl_id
HDassert(file->writer);
return H5FD_write(file->hdf5_file_lf, type, addr, size, buf);
-}
+} /* end H5FD__vfd_swmr_write() */
/*-------------------------------------------------------------------------
* Function: H5FD_vfd_swmr_truncate
@@ -917,20 +906,22 @@ H5FD_vfd_swmr_write(H5FD_t *_file, H5FD_mem_t type, hid_t H5_ATTR_UNUSED dxpl_id
*-------------------------------------------------------------------------
*/
static herr_t
-H5FD_vfd_swmr_truncate(H5FD_t *_file, hid_t H5_ATTR_UNUSED dxpl_id, hbool_t closing)
+H5FD__vfd_swmr_truncate(H5FD_t *_file, hid_t H5_ATTR_UNUSED dxpl_id, hbool_t closing)
{
H5FD_vfd_swmr_t *file = (H5FD_vfd_swmr_t *)_file; /* VFD SWMR file struct */
+ FUNC_ENTER_STATIC_NOERR
+
/* This routine should only be called if the VFD instance is opened
* for writing.
*/
HDassert(file->writer);
- return H5FD_truncate(file->hdf5_file_lf, closing);
+ FUNC_LEAVE_NOAPI(H5FD_truncate(file->hdf5_file_lf, closing))
}
/*-------------------------------------------------------------------------
- * Function: H5FD_vfd_swmr_lock
+ * Function: H5FD__vfd_swmr_lock
*
* Purpose: To place an advisory lock on the underlying HDF5 file.
*
@@ -939,25 +930,24 @@ H5FD_vfd_swmr_truncate(H5FD_t *_file, hid_t H5_ATTR_UNUSED dxpl_id, hbool_t clos
*-------------------------------------------------------------------------
*/
static herr_t
-H5FD_vfd_swmr_lock(H5FD_t *_file, hbool_t rw)
+H5FD__vfd_swmr_lock(H5FD_t *_file, hbool_t rw)
{
H5FD_vfd_swmr_t *file = (H5FD_vfd_swmr_t *)_file; /* VFD SWMR file struct */
herr_t ret_value = SUCCEED; /* Return value */
- FUNC_ENTER_NOAPI_NOINIT
+ FUNC_ENTER_STATIC
HDassert(file);
if (H5FD_lock(file->hdf5_file_lf, rw) < 0)
-
- HGOTO_ERROR(H5E_IO, H5E_CANTLOCK, FAIL, "unable to lock the HDF5 file")
+ HGOTO_ERROR(H5E_VFL, H5E_CANTLOCK, FAIL, "unable to lock the HDF5 file")
done:
FUNC_LEAVE_NOAPI(ret_value)
-} /* end H5FD_vfd_swmr_lock() */
+} /* end H5FD__vfd_swmr_lock() */
/*-------------------------------------------------------------------------
- * Function: H5FD_vfd_swmr_unlock
+ * Function: H5FD__vfd_swmr_unlock
*
* Purpose: To remove the existing lock on the underlying HDF5 file
*
@@ -966,26 +956,25 @@ done:
*-------------------------------------------------------------------------
*/
static herr_t
-H5FD_vfd_swmr_unlock(H5FD_t *_file)
+H5FD__vfd_swmr_unlock(H5FD_t *_file)
{
H5FD_vfd_swmr_t *file = (H5FD_vfd_swmr_t *)_file; /* VFD SWMR file struct */
herr_t ret_value = SUCCEED; /* Return value */
- FUNC_ENTER_NOAPI_NOINIT
+ FUNC_ENTER_STATIC
HDassert(file);
if (H5FD_unlock(file->hdf5_file_lf) < 0)
-
- HGOTO_ERROR(H5E_IO, H5E_CANTUNLOCK, FAIL, "unable to unlock the HDF5 file")
+ HGOTO_ERROR(H5E_VFL, H5E_CANTUNLOCK, FAIL, "unable to unlock the HDF5 file")
done:
FUNC_LEAVE_NOAPI(ret_value)
-} /* end H5FD_vfd_swmr_unlock() */
+} /* end H5FD__vfd_swmr_unlock() */
-/*
+/*-------------------------------------------------------------------------
* Function: H5FD__vfd_swmr_load_hdr_and_idx()
*
* Purpose: Load and decode the header and index in the metadata file
@@ -1029,18 +1018,19 @@ done:
* Return: Success: SUCCEED
* Failure: FAIL
*
+ *-------------------------------------------------------------------------
*/
static herr_t
H5FD__vfd_swmr_load_hdr_and_idx(H5FD_vfd_swmr_t *file, hbool_t open)
{
hbool_t do_try;
h5_retry_t retry;
- H5FD_vfd_swmr_md_header md_header; /* Metadata file header, take 1 */
- H5FD_vfd_swmr_md_header md_header_two; /* Metadata file header, take 2 */
- H5FD_vfd_swmr_md_index md_index; /* Metadata file index */
- herr_t ret_value = SUCCEED; /* Return value */
+ H5FD_vfd_swmr_md_header md_header; /* Metadata file header, take 1 */
+ H5FD_vfd_swmr_md_header md_header_two; /* Metadata file header, take 2 */
+ H5FD_vfd_swmr_md_index md_index; /* Metadata file index */
htri_t rc;
static uint64_t last_index_offset = 0;
+ herr_t ret_value = SUCCEED; /* Return value */
FUNC_ENTER_STATIC
@@ -1058,7 +1048,7 @@ H5FD__vfd_swmr_load_hdr_and_idx(H5FD_vfd_swmr_t *file, hbool_t open)
continue;
if (rc != TRUE)
- HGOTO_ERROR(H5E_VFL, H5E_BADVALUE, FAIL, "could not read header");
+ HGOTO_ERROR(H5E_VFL, H5E_BADVALUE, FAIL, "could not read header")
if (md_header.index_offset != last_index_offset)
last_index_offset = md_header.index_offset;
@@ -1070,12 +1060,11 @@ H5FD__vfd_swmr_load_hdr_and_idx(H5FD_vfd_swmr_t *file, hbool_t open)
* time, then there is not a complete new index to read, so
* get out.
*/
- HGOTO_DONE(SUCCEED);
+ HGOTO_DONE(SUCCEED)
}
- else if (md_header.tick_num < file->md_header.tick_num) {
+ else if (md_header.tick_num < file->md_header.tick_num)
/* The tick number must not move backward. */
- HGOTO_ERROR(H5E_VFL, H5E_BADVALUE, FAIL, "tick number in header moved backwards");
- }
+ HGOTO_ERROR(H5E_VFL, H5E_BADVALUE, FAIL, "tick number in header moved backwards")
HDassert(md_header.tick_num > file->md_header.tick_num || open);
@@ -1088,7 +1077,7 @@ H5FD__vfd_swmr_load_hdr_and_idx(H5FD_vfd_swmr_t *file, hbool_t open)
continue;
if (rc != TRUE)
- HGOTO_ERROR(H5E_VFL, H5E_BADVALUE, FAIL, "could not read index");
+ HGOTO_ERROR(H5E_VFL, H5E_BADVALUE, FAIL, "could not read index")
/* If the tick_num is the same in both header and index,
* and the header reads the same the second time as the first time,
@@ -1108,18 +1097,16 @@ H5FD__vfd_swmr_load_hdr_and_idx(H5FD_vfd_swmr_t *file, hbool_t open)
(H5FD_vfd_swmr_idx_entry_t *)H5FL_SEQ_FREE(H5FD_vfd_swmr_idx_entry_t, md_index.entries);
}
- if (rc == FAIL) {
- HGOTO_ERROR(H5E_VFL, H5E_BADVALUE, FAIL, "could not re-read header");
- }
+ if (rc == FAIL)
+ HGOTO_ERROR(H5E_VFL, H5E_BADVALUE, FAIL, "could not re-read header")
}
/* Exhaust all retries for loading and decoding the md file header
* and index
*/
- if (!do_try) {
+ if (!do_try)
HGOTO_ERROR(H5E_VFL, H5E_CANTLOAD, FAIL,
"error in loading/decoding the metadata file header and index")
- }
/* Free VFD local entries */
if (file->md_index.entries != NULL) {
@@ -1170,30 +1157,28 @@ H5FD__vfd_swmr_header_deserialize(H5FD_vfd_swmr_t *file, H5FD_vfd_swmr_md_header
FUNC_ENTER_STATIC
/* Set file pointer to the beginning the file */
- if (HDlseek(file->md_fd, H5FD_MD_HEADER_OFF, SEEK_SET) < 0) {
- HGOTO_ERROR(H5E_VFL, H5E_SEEKERROR, FAIL, "unable to seek in metadata file");
- }
+ if (HDlseek(file->md_fd, H5FD_MD_HEADER_OFF, SEEK_SET) < 0)
+ HGOTO_ERROR(H5E_VFL, H5E_SEEKERROR, FAIL, "unable to seek in metadata file")
/* Read the header */
nread = HDread(file->md_fd, image, H5FD_MD_HEADER_SIZE);
/* Try again if a signal interrupted the read. */
if (nread == -1 && errno == EINTR)
- HGOTO_DONE(FALSE);
+ HGOTO_DONE(FALSE)
/* We cannot recover from any other error by trying again,
* so bail out.
*/
- if (nread == -1) {
- HGOTO_ERROR(H5E_VFL, H5E_READERROR, FAIL, "error in reading the shadow header");
- }
+ if (nread == -1)
+ HGOTO_ERROR(H5E_VFL, H5E_READERROR, FAIL, "error in reading the shadow header")
if ((uint64_t)nread < H5FD_MD_HEADER_SIZE)
- HGOTO_DONE(FALSE);
+ HGOTO_DONE(FALSE)
/* Verify magic number */
if (HDmemcmp(image, H5FD_MD_HEADER_MAGIC, H5_SIZEOF_MAGIC) != 0)
- HGOTO_DONE(FALSE);
+ HGOTO_DONE(FALSE)
/* Verify stored and computed checksums are equal */
H5F_get_checksums(image, H5FD_MD_HEADER_SIZE, &stored_chksum, &computed_chksum);
@@ -1208,9 +1193,8 @@ H5FD__vfd_swmr_header_deserialize(H5FD_vfd_swmr_t *file, H5FD_vfd_swmr_md_header
UINT32DECODE(p, md_header->fs_page_size);
UINT64DECODE(p, md_header->tick_num);
UINT64DECODE(p, md_header->index_offset);
- if ((index_length = uint64_decode(&p)) > SIZE_MAX) {
- HGOTO_ERROR(H5E_VFL, H5E_BADVALUE, FAIL, "index is too large to hold in core");
- }
+ if ((index_length = uint64_decode(&p)) > SIZE_MAX)
+ HGOTO_ERROR(H5E_VFL, H5E_BADVALUE, FAIL, "index is too large to hold in core")
md_header->index_length = (size_t)index_length;
@@ -1266,28 +1250,24 @@ H5FD__vfd_swmr_index_deserialize(const H5FD_vfd_swmr_t *file, H5FD_vfd_swmr_md_i
FUNC_ENTER_STATIC
/* Allocate buffer for reading index */
- if (NULL == (image = H5MM_malloc(md_header->index_length))) {
- HGOTO_ERROR(H5E_VFL, H5E_CANTALLOC, FAIL,
- "memory allocation failed for index's on disk image buffer");
- }
+ if (NULL == (image = H5MM_malloc(md_header->index_length)))
+ HGOTO_ERROR(H5E_VFL, H5E_CANTALLOC, FAIL, "memory allocation failed for index's on disk image buffer")
/* We may seek past EOF. That's ok, the read(2) will catch that. */
- if (HDlseek(file->md_fd, (HDoff_t)md_header->index_offset, SEEK_SET) < 0) {
- HGOTO_ERROR(H5E_VFL, H5E_SEEKERROR, FAIL, "unable to seek in metadata file");
- }
+ if (HDlseek(file->md_fd, (HDoff_t)md_header->index_offset, SEEK_SET) < 0)
+ HGOTO_ERROR(H5E_VFL, H5E_SEEKERROR, FAIL, "unable to seek in metadata file")
nread = HDread(file->md_fd, image, md_header->index_length);
/* Try again if a signal interrupted the read. */
if (nread == -1 && errno == EINTR)
- HGOTO_DONE(FALSE);
+ HGOTO_DONE(FALSE)
/* We cannot recover from any other error by trying again,
* so bail out.
*/
- if (nread == -1) {
- HGOTO_ERROR(H5E_VFL, H5E_READERROR, FAIL, "error in reading the header in metadata file");
- }
+ if (nread == -1)
+ HGOTO_ERROR(H5E_VFL, H5E_READERROR, FAIL, "error in reading the header in metadata file")
/* Try again if the read was not full.
*
@@ -1302,7 +1282,7 @@ H5FD__vfd_swmr_index_deserialize(const H5FD_vfd_swmr_t *file, H5FD_vfd_swmr_md_i
* like an unrecoverable error instead of retrying.
*/
if ((size_t)nread < md_header->index_length)
- HGOTO_DONE(FALSE);
+ HGOTO_DONE(FALSE)
/* If the index magic is incorrect, then assume that is a
* temporary error and try again.
@@ -1323,7 +1303,7 @@ H5FD__vfd_swmr_index_deserialize(const H5FD_vfd_swmr_t *file, H5FD_vfd_swmr_md_i
* re-reading the header.
*/
if (HDmemcmp(image, H5FD_MD_INDEX_MAGIC, H5_SIZEOF_MAGIC) != 0)
- HGOTO_DONE(FALSE);
+ HGOTO_DONE(FALSE)
/* Verify stored and computed checksums are equal */
H5F_get_checksums(image, md_header->index_length, &stored_chksum, &computed_chksum);
@@ -1343,9 +1323,8 @@ H5FD__vfd_swmr_index_deserialize(const H5FD_vfd_swmr_t *file, H5FD_vfd_swmr_md_i
if (md_index->num_entries) {
/* Allocate memory for index entries */
md_index->entries = H5FL_SEQ_CALLOC(H5FD_vfd_swmr_idx_entry_t, md_index->num_entries);
- if (NULL == md_index->entries) {
- HGOTO_ERROR(H5E_VFL, H5E_CANTALLOC, FAIL, "memory allocation failed for index entries");
- }
+ if (NULL == md_index->entries)
+ HGOTO_ERROR(H5E_VFL, H5E_CANTALLOC, FAIL, "memory allocation failed for index entries")
/* Decode index entries */
for (i = 0; i < md_index->num_entries; i++) {
@@ -1419,9 +1398,8 @@ H5FD_vfd_swmr_get_tick_and_idx(H5FD_t *_file, hbool_t reload_hdr_and_index, uint
FUNC_ENTER_NOAPI(FAIL)
/* Load and decode the header and index as indicated */
- if (reload_hdr_and_index && H5FD__vfd_swmr_load_hdr_and_idx(file, FALSE) < 0) {
+ if (reload_hdr_and_index && H5FD__vfd_swmr_load_hdr_and_idx(file, FALSE) < 0)
HGOTO_ERROR(H5E_VFL, H5E_CANTLOAD, FAIL, "unable to load/decode md header and index")
- }
/* Return tick_num */
if (tick_ptr != NULL)
@@ -1429,9 +1407,8 @@ H5FD_vfd_swmr_get_tick_and_idx(H5FD_t *_file, hbool_t reload_hdr_and_index, uint
if (index != NULL) {
- if (*num_entries_ptr < file->md_index.num_entries) {
- HGOTO_ERROR(H5E_VFL, H5E_CANTLOAD, FAIL, "not enough space to copy index");
- }
+ if (*num_entries_ptr < file->md_index.num_entries)
+ HGOTO_ERROR(H5E_VFL, H5E_CANTLOAD, FAIL, "not enough space to copy index")
HDmemcpy(index, file->md_index.entries,
(file->md_index.num_entries * sizeof(file->md_index.entries[0])));
@@ -1475,10 +1452,8 @@ H5FD_vfd_swmr_dump_status(H5FD_t *_file, uint64_t page)
while ((!in_index) && (i < (int)num_entries)) {
- if (index[i].hdf5_page_offset == page) {
-
+ if (index[i].hdf5_page_offset == page)
in_index = TRUE;
- }
HDassert((i == 0) || (index[i - 1].hdf5_page_offset < index[i].hdf5_page_offset));
@@ -1527,15 +1502,29 @@ H5FD_vfd_swmr_set_pb_configured(H5FD_t *_file)
} /* H5FD_vfd_swmr_set_pb_configured() */
-/* In the histogram of ticks spent in API calls, increase the bucket
- * for `elapsed` ticks by one.
+/*-------------------------------------------------------------------------
+ * Function: H5FD_vfd_swmr_record_elapsed_ticks
+ *
+ * Purpose: In the histogram of ticks spent in API calls, increase
+ * the bucket for `elapsed` ticks by one.
+ *
+ * Return: VOID
+ *
+ * Programmer: JRM -- 1/29/19
+ *
+ *-------------------------------------------------------------------------
+ *
*/
void
H5FD_vfd_swmr_record_elapsed_ticks(H5FD_t *_file, uint64_t elapsed)
{
+ FUNC_ENTER_NOAPI_NOINIT_NOERR
+
H5FD_vfd_swmr_t *file = (H5FD_vfd_swmr_t *)_file;
uint32_t elapsed_idx = MIN(elapsed, file->api_elapsed_nbuckets);
file->api_elapsed_ticks[elapsed_idx]++;
-}
+
+ FUNC_LEAVE_NOAPI_VOID
+} /* end H5FD_vfd_swmr_record_elapsed_ticks() */
diff --git a/src/H5FDvfd_swmr.h b/src/H5FDvfd_swmr.h
index d85cc95..096d5fb 100644
--- a/src/H5FDvfd_swmr.h
+++ b/src/H5FDvfd_swmr.h
@@ -16,10 +16,6 @@
#ifndef H5FDvfd_swmr_H
#define H5FDvfd_swmr_H
-#include "H5api_adpt.h" /* H5_DLL */
-#include "H5public.h" /* uint64_t *ahem* */
-#include "H5Ipublic.h" /* hid_t */
-
#define H5FD_VFD_SWMR (H5FD_vfd_swmr_init())
#ifdef __cplusplus
@@ -33,4 +29,4 @@ H5_DLL herr_t H5Pset_fapl_vfd_swmr(hid_t fapl_id);
}
#endif
-#endif /* H5FDvfd_swmr_H */
+#endif
diff --git a/src/H5Fint.c b/src/H5Fint.c
index 44506b6..247a047 100644
--- a/src/H5Fint.c
+++ b/src/H5Fint.c
@@ -1575,12 +1575,6 @@ H5F__dest(H5F_t *f, hbool_t flush)
/* Push error, but keep going*/
HDONE_ERROR(H5E_IO, H5E_CANTFLUSH, FAIL, "vfd swmr prep for flush or close failed")
- if ((f->shared->vfd_swmr) && (!f->shared->vfd_swmr_writer))
- HDfprintf(stdout,
- "The maximum jump in ticks is %" PRIu64
- "; The maximum expected lag configured is %" PRIu32 "\n",
- f->shared->max_jump_ticks, f->shared->vfd_swmr_config.max_lag);
-
/* Shutdown the page buffer cache */
if (H5PB_dest(f->shared) < 0)
/* Push error, but keep going*/
@@ -1932,9 +1926,8 @@ H5F_open(const char *name, unsigned flags, hid_t fcpl_id, hid_t fapl_id)
/* Avoid reusing a virtual file opened exclusively by a second virtual
* file, or opening the same file twice with different parameters.
*/
- if ((lf = H5FD_deduplicate(lf, fapl_id)) == NULL) {
- HGOTO_ERROR(H5E_FILE, H5E_CANTOPENFILE, NULL, "an already-open file conflicts with '%s'", name);
- }
+ if ((lf = H5FD_deduplicate(lf, fapl_id)) == NULL)
+ HGOTO_ERROR(H5E_FILE, H5E_CANTOPENFILE, NULL, "an already-open file conflicts with '%s'", name)
/* Is the file already open? */
if ((shared = H5F__sfile_search(lf)) != NULL) {
diff --git a/test/h5test.c b/test/h5test.c
index 9ec29ed..755ae93 100644
--- a/test/h5test.c
+++ b/test/h5test.c
@@ -1925,7 +1925,6 @@ static const H5FD_class_t H5FD_dummy_g = {
NULL, /* lock */
NULL, /* unlock */
NULL, /* del */
- NULL, /* dedup */
H5FD_FLMAP_DICHOTOMY /* fl_map */
};