summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDana Robinson <derobins@hdfgroup.org>2012-09-18 21:10:36 (GMT)
committerDana Robinson <derobins@hdfgroup.org>2012-09-18 21:10:36 (GMT)
commit3427f6b172a675d7fa25c11aa3b7ec6b284e9534 (patch)
treec20003d1dfae5c1fbef57d4cbc66e1ae3008ad5f
parent495b8de00214c9f99d6f10fd91de0feef55cefa8 (diff)
downloadhdf5-3427f6b172a675d7fa25c11aa3b7ec6b284e9534.zip
hdf5-3427f6b172a675d7fa25c11aa3b7ec6b284e9534.tar.gz
hdf5-3427f6b172a675d7fa25c11aa3b7ec6b284e9534.tar.bz2
[svn-r22784] Purpose:
Add flush dependencies to the fixed array code. Description: Added basic flush dependency wiring to the fixed array code. Does not include the test code, which will be added soon. NOTE: The Makefile.in change in test/ is not due to any changes made here. It appears to be from a missing bin/reconfigure in a prior checkin. Tested: jam (there is an existing flush/refresh test error)
-rwxr-xr-xconfigure2
-rw-r--r--src/H5FA.c85
-rw-r--r--src/H5FAcache.c322
-rw-r--r--src/H5FApkg.h7
-rw-r--r--src/H5FAprivate.h19
-rw-r--r--src/Makefile.am2
-rw-r--r--src/Makefile.in23
-rw-r--r--test/Makefile.in12
8 files changed, 308 insertions, 164 deletions
diff --git a/configure b/configure
index f0b3eb2..a32a3e2 100755
--- a/configure
+++ b/configure
@@ -1,5 +1,5 @@
#! /bin/sh
-# From configure.in Id: configure.in 22525 2012-07-09 16:54:50Z lrknox .
+# From configure.in Id: configure.in 22636 2012-08-06 19:42:49Z koziol .
# Guess values for system-dependent variables and create Makefiles.
# Generated by GNU Autoconf 2.68 for HDF5 1.9.125-FA_a5.
#
diff --git a/src/H5FA.c b/src/H5FA.c
index 136c2d8..92647fe 100644
--- a/src/H5FA.c
+++ b/src/H5FA.c
@@ -738,3 +738,88 @@ CATCH
END_FUNC(PRIV) /* end H5FA_iterate() */
+
+/*-------------------------------------------------------------------------
+ * Function: H5FA_depend
+ *
+ * Purpose: Make a child flush dependency between the fixed array's
+ * header and another piece of metadata in the file.
+ *
+ * Return: SUCCEED/FAIL
+ *
+ * Programmer: Dana Robinson
+ * derobins@hdfgroup.org
+ * Fall 2012
+ *
+ *-------------------------------------------------------------------------
+ */
+BEGIN_FUNC(PRIV, ERR,
+herr_t, SUCCEED, FAIL,
+H5FA_depend(H5AC_info_t *parent_entry, H5FA_t *fa))
+
+ /* Local variables */
+ H5FA_hdr_t *hdr = fa->hdr; /* Header for FA */
+
+#ifdef QAK
+HDfprintf(stderr, "%s: Called\n", FUNC);
+#endif /* QAK */
+
+ /*
+ * Check arguments.
+ */
+ HDassert(fa);
+ HDassert(hdr);
+
+ /* Set the shared array header's file context for this operation */
+ hdr->f = fa->f;
+
+ /* Set up flush dependency between parent entry and extensible array header */
+ if(H5FA__create_flush_depend(parent_entry, (H5AC_info_t *)hdr) < 0)
+ H5E_THROW(H5E_CANTDEPEND, "unable to create flush dependency on file metadata")
+
+CATCH
+
+END_FUNC(PRIV) /* end H5FA_depend() */
+
+
+/*-------------------------------------------------------------------------
+ * Function: H5FA_undepend
+ *
+ * Purpose: Remove a child flush dependency between the fixed array's
+ * header and another piece of metadata in the file.
+ *
+ * Return: SUCCEED/FAIL
+ *
+ * Programmer: Dana Robinson
+ * derobins@hdfgroup.org
+ * Fall 2012
+ *
+ *-------------------------------------------------------------------------
+ */
+BEGIN_FUNC(PRIV, ERR,
+herr_t, SUCCEED, FAIL,
+H5FA_undepend(H5AC_info_t *parent_entry, H5FA_t *fa))
+
+ /* Local variables */
+ H5FA_hdr_t *hdr = fa->hdr; /* Header for FA */
+
+#ifdef QAK
+HDfprintf(stderr, "%s: Called\n", FUNC);
+#endif /* QAK */
+
+ /*
+ * Check arguments.
+ */
+ HDassert(fa);
+ HDassert(hdr);
+
+ /* Set the shared array header's file context for this operation */
+ hdr->f = fa->f;
+
+ /* Remove flush dependency between parent entry and extensible array header */
+ if(H5FA__destroy_flush_depend(parent_entry, (H5AC_info_t *)hdr) < 0)
+ H5E_THROW(H5E_CANTUNDEPEND, "unable to destroy flush dependency on file metadata")
+
+CATCH
+
+END_FUNC(PRIV) /* end H5FA_undepend() */
diff --git a/src/H5FAcache.c b/src/H5FAcache.c
index 14df4c8..5c567a2 100644
--- a/src/H5FAcache.c
+++ b/src/H5FAcache.c
@@ -76,21 +76,22 @@
/* Metadata cache (H5AC) callbacks */
static H5FA_hdr_t *H5FA__cache_hdr_load(H5F_t *f, hid_t dxpl_id, haddr_t addr, void *udata);
static herr_t H5FA__cache_hdr_flush(H5F_t *f, hid_t dxpl_id, hbool_t destroy, haddr_t addr, H5FA_hdr_t *hdr, unsigned * flags_ptr);
+static herr_t H5FA__cache_hdr_dest(H5F_t *f, H5FA_hdr_t *hdr);
static herr_t H5FA__cache_hdr_clear(H5F_t *f, H5FA_hdr_t *hdr, hbool_t destroy);
static herr_t H5FA__cache_hdr_size(const H5F_t *f, const H5FA_hdr_t *hdr, size_t *size_ptr);
-static herr_t H5FA__cache_hdr_dest(H5F_t *f, H5FA_hdr_t *hdr);
static H5FA_dblock_t *H5FA__cache_dblock_load(H5F_t *f, hid_t dxpl_id, haddr_t addr, void *udata);
static herr_t H5FA__cache_dblock_flush(H5F_t *f, hid_t dxpl_id, hbool_t destroy, haddr_t addr, H5FA_dblock_t *dblock, unsigned * flags_ptr);
+static herr_t H5FA__cache_dblock_dest(H5F_t *f, H5FA_dblock_t *dblock);
static herr_t H5FA__cache_dblock_clear(H5F_t *f, H5FA_dblock_t *dblock, hbool_t destroy);
+static herr_t H5FA__cache_dblock_notify(H5AC_notify_action_t action, H5FA_dblock_t *dblock);
static herr_t H5FA__cache_dblock_size(const H5F_t *f, const H5FA_dblock_t *dblock, size_t *size_ptr);
-static herr_t H5FA__cache_dblock_dest(H5F_t *f, H5FA_dblock_t *dblock);
static H5FA_dblk_page_t *H5FA__cache_dblk_page_load(H5F_t *f, hid_t dxpl_id, haddr_t addr, void *udata);
static herr_t H5FA__cache_dblk_page_flush(H5F_t *f, hid_t dxpl_id, hbool_t destroy, haddr_t addr, H5FA_dblk_page_t *dblk_page, unsigned * flags_ptr);
+static herr_t H5FA__cache_dblk_page_dest(H5F_t *f, H5FA_dblk_page_t *dblk_page);
static herr_t H5FA__cache_dblk_page_clear(H5F_t *f, H5FA_dblk_page_t *dblk_page, hbool_t destroy);
static herr_t H5FA__cache_dblk_page_size(const H5F_t *f, const H5FA_dblk_page_t *dblk_page, size_t *size_ptr);
-static herr_t H5FA__cache_dblk_page_dest(H5F_t *f, H5FA_dblk_page_t *dblk_page);
/*********************/
@@ -116,7 +117,7 @@ const H5AC_class_t H5AC_FARRAY_DBLOCK[1] = {{
(H5AC_flush_func_t)H5FA__cache_dblock_flush,
(H5AC_dest_func_t)H5FA__cache_dblock_dest,
(H5AC_clear_func_t)H5FA__cache_dblock_clear,
- (H5AC_notify_func_t)NULL,
+ (H5AC_notify_func_t)H5FA__cache_dblock_notify,
(H5AC_size_func_t)H5FA__cache_dblock_size,
}};
@@ -377,6 +378,53 @@ END_FUNC(STATIC) /* end H5FA__cache_hdr_flush() */
/*-------------------------------------------------------------------------
+ * Function: H5FA__cache_hdr_dest
+ *
+ * Purpose: Destroys a fixed array header in memory.
+ *
+ * Return: Non-negative on success/Negative on failure
+ *
+ * Programmer: Vailin Choi
+ * Thursday, April 30, 2009
+ *
+ *-------------------------------------------------------------------------
+ */
+/* ARGSUSED */
+BEGIN_FUNC(STATIC, ERR,
+herr_t, SUCCEED, FAIL,
+H5FA__cache_hdr_dest(H5F_t *f, H5FA_hdr_t *hdr))
+
+ /* Check arguments */
+ HDassert(f);
+ HDassert(hdr);
+
+ /* Verify that header is clean */
+ HDassert(hdr->cache_info.is_dirty == FALSE);
+
+ /* If we're going to free the space on disk, the address must be valid */
+ HDassert(!hdr->cache_info.free_file_space_on_destroy || H5F_addr_defined(hdr->cache_info.addr));
+
+ /* Check for freeing file space for fixed array header */
+ if(hdr->cache_info.free_file_space_on_destroy) {
+ /* Sanity check address */
+ HDassert(H5F_addr_eq(hdr->addr, hdr->cache_info.addr));
+
+ /* Release the space on disk */
+ /* (XXX: Nasty usage of internal DXPL value! -QAK) */
+ if(H5MF_xfree(f, H5FD_MEM_FARRAY_HDR, H5AC_dxpl_id, hdr->cache_info.addr, (hsize_t)hdr->size) < 0)
+ H5E_THROW(H5E_CANTFREE, "unable to free fixed array header")
+ } /* end if */
+
+ /* Release the fixed array header */
+ if(H5FA__hdr_dest(hdr) < 0)
+ H5E_THROW(H5E_CANTFREE, "can't free fixed array header")
+
+CATCH
+
+END_FUNC(STATIC) /* end H5FA__cache_hdr_dest() */
+
+
+/*-------------------------------------------------------------------------
* Function: H5FA__cache_hdr_clear
*
* Purpose: Mark a fixed array header in memory as non-dirty.
@@ -439,53 +487,6 @@ END_FUNC(STATIC) /* end H5FA__cache_hdr_size() */
/*-------------------------------------------------------------------------
- * Function: H5FA__cache_hdr_dest
- *
- * Purpose: Destroys a fixed array header in memory.
- *
- * Return: Non-negative on success/Negative on failure
- *
- * Programmer: Vailin Choi
- * Thursday, April 30, 2009
- *
- *-------------------------------------------------------------------------
- */
-/* ARGSUSED */
-BEGIN_FUNC(STATIC, ERR,
-herr_t, SUCCEED, FAIL,
-H5FA__cache_hdr_dest(H5F_t *f, H5FA_hdr_t *hdr))
-
- /* Check arguments */
- HDassert(f);
- HDassert(hdr);
-
- /* Verify that header is clean */
- HDassert(hdr->cache_info.is_dirty == FALSE);
-
- /* If we're going to free the space on disk, the address must be valid */
- HDassert(!hdr->cache_info.free_file_space_on_destroy || H5F_addr_defined(hdr->cache_info.addr));
-
- /* Check for freeing file space for fixed array header */
- if(hdr->cache_info.free_file_space_on_destroy) {
- /* Sanity check address */
- HDassert(H5F_addr_eq(hdr->addr, hdr->cache_info.addr));
-
- /* Release the space on disk */
- /* (XXX: Nasty usage of internal DXPL value! -QAK) */
- if(H5MF_xfree(f, H5FD_MEM_FARRAY_HDR, H5AC_dxpl_id, hdr->cache_info.addr, (hsize_t)hdr->size) < 0)
- H5E_THROW(H5E_CANTFREE, "unable to free fixed array header")
- } /* end if */
-
- /* Release the fixed array header */
- if(H5FA__hdr_dest(hdr) < 0)
- H5E_THROW(H5E_CANTFREE, "can't free fixed array header")
-
-CATCH
-
-END_FUNC(STATIC) /* end H5FA__cache_hdr_dest() */
-
-
-/*-------------------------------------------------------------------------
* Function: H5FA__cache_dblock_load
*
* Purpose: Loads a fixed array data block from the disk.
@@ -724,6 +725,54 @@ END_FUNC(STATIC) /* end H5FA__cache_dblock_flush() */
/*-------------------------------------------------------------------------
+ * Function: H5FA__cache_dblock_dest
+ *
+ * Purpose: Destroys a fixed array data block in memory.
+ *
+ * Return: Non-negative on success/Negative on failure
+ *
+ * Programmer: Vailin Choi
+ * Thursday, April 30, 2009
+ *
+ *-------------------------------------------------------------------------
+ */
+/* ARGSUSED */
+BEGIN_FUNC(STATIC, ERR,
+herr_t, SUCCEED, FAIL,
+H5FA__cache_dblock_dest(H5F_t *f, H5FA_dblock_t *dblock))
+
+ /* Sanity check */
+ HDassert(f);
+ HDassert(dblock);
+
+ /* Verify that data block is clean */
+ HDassert(dblock->cache_info.is_dirty == FALSE);
+
+ /* If we're going to free the space on disk, the address must be valid */
+ HDassert(!dblock->cache_info.free_file_space_on_destroy || H5F_addr_defined(dblock->cache_info.addr));
+
+ /* Check for freeing file space for fixed array data block */
+ if(dblock->cache_info.free_file_space_on_destroy) {
+ /* Sanity check address */
+ HDassert(H5F_addr_eq(dblock->addr, dblock->cache_info.addr));
+
+ /* Release the space on disk */
+ /* (Includes space for pages!) */
+ /* (XXX: Nasty usage of internal DXPL value! -QAK) */
+ if(H5MF_xfree(f, H5FD_MEM_FARRAY_DBLOCK, H5AC_dxpl_id, dblock->cache_info.addr, (hsize_t)dblock->size) < 0)
+ H5E_THROW(H5E_CANTFREE, "unable to free fixed array data block")
+ } /* end if */
+
+ /* Release the data block */
+ if(H5FA__dblock_dest(dblock) < 0)
+ H5E_THROW(H5E_CANTFREE, "can't free fixed array data block")
+
+CATCH
+
+END_FUNC(STATIC) /* end H5FA__cache_dblock_dest() */
+
+
+/*-------------------------------------------------------------------------
* Function: H5FA__cache_dblock_clear
*
* Purpose: Mark a fixed array data block in memory as non-dirty.
@@ -755,6 +804,56 @@ END_FUNC(STATIC) /* end H5FA__cache_dblock_clear() */
/*-------------------------------------------------------------------------
+ * Function: H5FA__cache_dblock_notify
+ *
+ * Purpose: Handle cache action notifications
+ *
+ * Return: SUCCEED/FAIL
+ *
+ * Programmer: Dana Robinson
+ * derobins@hdfgroup.org
+ * Fall 2012
+ *
+ *-------------------------------------------------------------------------
+ */
+BEGIN_FUNC(STATIC, ERR,
+herr_t, SUCCEED, FAIL,
+H5FA__cache_dblock_notify(H5AC_notify_action_t action, H5FA_dblock_t *dblock))
+
+ /* Sanity check */
+ HDassert(dblock);
+
+ /* Check if the file was opened with SWMR-write access */
+ if(dblock->hdr->swmr_write) {
+ /* Determine which action to take */
+ switch(action) {
+ case H5AC_NOTIFY_ACTION_AFTER_INSERT:
+ /* Create flush dependency on extensible array header */
+ if(H5FA__create_flush_depend((H5AC_info_t *)dblock->hdr, (H5AC_info_t *)dblock) < 0)
+ H5E_THROW(H5E_CANTDEPEND, "unable to create flush dependency between data block and header, address = %llu", (unsigned long long)dblock->addr)
+ break;
+
+ case H5AC_NOTIFY_ACTION_BEFORE_EVICT:
+ /* Destroy flush dependency on extensible array header */
+ if(H5FA__destroy_flush_depend((H5AC_info_t *)dblock->hdr, (H5AC_info_t *)dblock) < 0)
+ H5E_THROW(H5E_CANTUNDEPEND, "unable to destroy flush dependency between data block and header, address = %llu", (unsigned long long)dblock->addr)
+ break;
+
+ default:
+#ifdef NDEBUG
+ H5E_THROW(H5E_BADVALUE, "unknown action from metadata cache")
+#else /* NDEBUG */
+ HDassert(0 && "Unknown action?!?");
+#endif /* NDEBUG */
+ } /* end switch */
+ } /* end if */
+
+CATCH
+
+END_FUNC(STATIC) /* end H5FA__cache_dblock_notify() */
+
+
+/*-------------------------------------------------------------------------
* Function: H5FA__cache_dblock_size
*
* Purpose: Compute the size in bytes of a fixed array data block
@@ -789,54 +888,6 @@ END_FUNC(STATIC) /* end H5FA__cache_dblock_size() */
/*-------------------------------------------------------------------------
- * Function: H5FA__cache_dblock_dest
- *
- * Purpose: Destroys a fixed array data block in memory.
- *
- * Return: Non-negative on success/Negative on failure
- *
- * Programmer: Vailin Choi
- * Thursday, April 30, 2009
- *
- *-------------------------------------------------------------------------
- */
-/* ARGSUSED */
-BEGIN_FUNC(STATIC, ERR,
-herr_t, SUCCEED, FAIL,
-H5FA__cache_dblock_dest(H5F_t *f, H5FA_dblock_t *dblock))
-
- /* Sanity check */
- HDassert(f);
- HDassert(dblock);
-
- /* Verify that data block is clean */
- HDassert(dblock->cache_info.is_dirty == FALSE);
-
- /* If we're going to free the space on disk, the address must be valid */
- HDassert(!dblock->cache_info.free_file_space_on_destroy || H5F_addr_defined(dblock->cache_info.addr));
-
- /* Check for freeing file space for fixed array data block */
- if(dblock->cache_info.free_file_space_on_destroy) {
- /* Sanity check address */
- HDassert(H5F_addr_eq(dblock->addr, dblock->cache_info.addr));
-
- /* Release the space on disk */
- /* (Includes space for pages!) */
- /* (XXX: Nasty usage of internal DXPL value! -QAK) */
- if(H5MF_xfree(f, H5FD_MEM_FARRAY_DBLOCK, H5AC_dxpl_id, dblock->cache_info.addr, (hsize_t)dblock->size) < 0)
- H5E_THROW(H5E_CANTFREE, "unable to free fixed array data block")
- } /* end if */
-
- /* Release the data block */
- if(H5FA__dblock_dest(dblock) < 0)
- H5E_THROW(H5E_CANTFREE, "can't free fixed array data block")
-
-CATCH
-
-END_FUNC(STATIC) /* end H5FA__cache_dblock_dest() */
-
-
-/*-------------------------------------------------------------------------
* Function: H5FA__cache_dblk_page_load
*
* Purpose: Loads a fixed array data block page from the disk.
@@ -1024,6 +1075,42 @@ END_FUNC(STATIC) /* end H5FA__cache_dblk_page_flush() */
/*-------------------------------------------------------------------------
+ * Function: H5FA__cache_dblk_page_dest
+ *
+ * Purpose: Destroys a fixed array data block page in memory.
+ *
+ * Note: Does _not_ free the space for the page on disk, that is
+ * handled through the data block that "owns" the page.
+ *
+ * Return: Non-negative on success/Negative on failure
+ *
+ * Programmer: Vailin Choi
+ * Thursday, April 30, 2009
+ *
+ *-------------------------------------------------------------------------
+ */
+/* ARGSUSED */
+BEGIN_FUNC(STATIC, ERR,
+herr_t, SUCCEED, FAIL,
+H5FA__cache_dblk_page_dest(H5F_t UNUSED *f, H5FA_dblk_page_t *dblk_page))
+
+ /* Sanity check */
+ HDassert(f);
+ HDassert(dblk_page);
+
+ /* Verify that data block page is clean */
+ HDassert(dblk_page->cache_info.is_dirty == FALSE);
+
+ /* Release the data block page */
+ if(H5FA__dblk_page_dest(dblk_page) < 0)
+ H5E_THROW(H5E_CANTFREE, "can't free fixed array data block page")
+
+CATCH
+
+END_FUNC(STATIC) /* end H5FA__cache_dblk_page_dest() */
+
+
+/*-------------------------------------------------------------------------
* Function: H5FA__cache_dblk_page_clear
*
* Purpose: Mark a fixed array data block page in memory as non-dirty.
@@ -1083,40 +1170,3 @@ H5FA__cache_dblk_page_size(const H5F_t UNUSED *f, const H5FA_dblk_page_t *dblk_p
*size_ptr = dblk_page->size;
END_FUNC(STATIC) /* end H5FA__cache_dblk_page_size() */
-
-
-/*-------------------------------------------------------------------------
- * Function: H5FA__cache_dblk_page_dest
- *
- * Purpose: Destroys a fixed array data block page in memory.
- *
- * Note: Does _not_ free the space for the page on disk, that is
- * handled through the data block that "owns" the page.
- *
- * Return: Non-negative on success/Negative on failure
- *
- * Programmer: Vailin Choi
- * Thursday, April 30, 2009
- *
- *-------------------------------------------------------------------------
- */
-/* ARGSUSED */
-BEGIN_FUNC(STATIC, ERR,
-herr_t, SUCCEED, FAIL,
-H5FA__cache_dblk_page_dest(H5F_t UNUSED *f, H5FA_dblk_page_t *dblk_page))
-
- /* Sanity check */
- HDassert(f);
- HDassert(dblk_page);
-
- /* Verify that data block page is clean */
- HDassert(dblk_page->cache_info.is_dirty == FALSE);
-
- /* Release the data block page */
- if(H5FA__dblk_page_dest(dblk_page) < 0)
- H5E_THROW(H5E_CANTFREE, "can't free fixed array data block page")
-
-CATCH
-
-END_FUNC(STATIC) /* end H5FA__cache_dblk_page_dest() */
-
diff --git a/src/H5FApkg.h b/src/H5FApkg.h
index b06406a..de472a3 100644
--- a/src/H5FApkg.h
+++ b/src/H5FApkg.h
@@ -137,6 +137,7 @@ typedef struct H5FA_hdr_t {
haddr_t addr; /* Address of header in file */
size_t size; /* Size of header in file */
H5F_t *f; /* Pointer to file for fixed array */
+ hbool_t swmr_write; /* Flag indicating the file is opened with SWMR-write access */
size_t file_rc; /* Reference count of files using array header */
hbool_t pending_delete; /* Array is pending deletion */
size_t sizeof_addr; /* Size of file addresses */
@@ -233,6 +234,12 @@ H5_DLLVAR const H5FA_class_t *const H5FA_client_class_g[H5FA_NUM_CLS_ID];
/* Package Private Prototypes */
/******************************/
+/* Generic routines */
+H5_DLL herr_t H5FA__create_flush_depend(H5AC_info_t *parent_entry,
+ H5AC_info_t *child_entry);
+H5_DLL herr_t H5FA__destroy_flush_depend(H5AC_info_t *parent_entry,
+ H5AC_info_t *child_entry);
+
/* Header routines */
H5_DLL H5FA_hdr_t *H5FA__hdr_alloc(H5F_t *f);
H5_DLL herr_t H5FA__hdr_init(H5FA_hdr_t *hdr, void *ctx_udata);
diff --git a/src/H5FAprivate.h b/src/H5FAprivate.h
index 9b054c9..0270df1 100644
--- a/src/H5FAprivate.h
+++ b/src/H5FAprivate.h
@@ -32,7 +32,8 @@
#endif /* NOT_YET */
/* Private headers needed by this file */
-#include "H5Fprivate.h" /* File access */
+#include "H5ACprivate.h" /* Metadata cache */
+#include "H5Fprivate.h" /* File access */
/**************************/
@@ -120,14 +121,16 @@ H5_DLLVAR const H5FA_class_t H5FA_CLS_FILT_CHUNK[1];
/* General routines */
H5_DLL H5FA_t *H5FA_create(H5F_t *f, hid_t dxpl_id, const H5FA_create_t *cparam,
void *ctx_udata);
-H5_DLL H5FA_t *H5FA_open(H5F_t *f, hid_t dxpl_id, haddr_t ea_addr, void *ctx_udata);
-H5_DLL herr_t H5FA_get_nelmts(const H5FA_t *ea, hsize_t *nelmts);
-H5_DLL herr_t H5FA_get_addr(const H5FA_t *ea, haddr_t *addr);
-H5_DLL herr_t H5FA_set(const H5FA_t *ea, hid_t dxpl_id, hsize_t idx, const void *elmt);
-H5_DLL herr_t H5FA_get(const H5FA_t *ea, hid_t dxpl_id, hsize_t idx, void *elmt);
+H5_DLL H5FA_t *H5FA_open(H5F_t *f, hid_t dxpl_id, haddr_t fa_addr, void *ctx_udata);
+H5_DLL herr_t H5FA_get_nelmts(const H5FA_t *fa, hsize_t *nelmts);
+H5_DLL herr_t H5FA_get_addr(const H5FA_t *fa, haddr_t *addr);
+H5_DLL herr_t H5FA_set(const H5FA_t *fa, hid_t dxpl_id, hsize_t idx, const void *elmt);
+H5_DLL herr_t H5FA_get(const H5FA_t *fa, hid_t dxpl_id, hsize_t idx, void *elmt);
+H5_DLL herr_t H5FA_depend(H5AC_info_t *parent_entry, H5FA_t *fa);
+H5_DLL herr_t H5FA_undepend(H5AC_info_t *parent_entry, H5FA_t *fa);
H5_DLL herr_t H5FA_iterate(H5FA_t *fa, hid_t dxpl_id, H5FA_operator_t op, void *udata);
-H5_DLL herr_t H5FA_close(H5FA_t *ea, hid_t dxpl_id);
-H5_DLL herr_t H5FA_delete(H5F_t *f, hid_t dxpl_id, haddr_t ea_addr, void *ctx_udata);
+H5_DLL herr_t H5FA_close(H5FA_t *fa, hid_t dxpl_id);
+H5_DLL herr_t H5FA_delete(H5F_t *f, hid_t dxpl_id, haddr_t fa_addr, void *ctx_udata);
/* Statistics routines */
H5_DLL herr_t H5FA_get_stats(const H5FA_t *ea, H5FA_stat_t *stats);
diff --git a/src/Makefile.am b/src/Makefile.am
index b9af766416..0f78a8d 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -58,7 +58,7 @@ libhdf5_la_SOURCES= H5.c H5checksum.c H5dbg.c H5system.c H5timer.c H5trace.c \
H5Fmount.c H5Fmpi.c H5Fquery.c \
H5Fsfile.c H5Fsuper.c H5Fsuper_cache.c H5Ftest.c \
H5FA.c H5FAcache.c H5FAdbg.c H5FAdblock.c H5FAdblkpage.c H5FAhdr.c \
- H5FAstat.c H5FAtest.c \
+ H5FAint.c H5FAstat.c H5FAtest.c \
H5FD.c H5FDcore.c \
H5FDdirect.c H5FDfamily.c H5FDint.c H5FDlog.c H5FDmpi.c H5FDmpio.c \
H5FDmpiposix.c H5FDmulti.c H5FDsec2.c H5FDspace.c H5FDstdio.c \
diff --git a/src/Makefile.in b/src/Makefile.in
index 92454fb..597f293 100644
--- a/src/Makefile.in
+++ b/src/Makefile.in
@@ -111,16 +111,16 @@ am_libhdf5_la_OBJECTS = H5.lo H5checksum.lo H5dbg.lo H5system.lo \
H5Fdeprec.lo H5Fefc.lo H5Ffake.lo H5Fio.lo H5Fmount.lo \
H5Fmpi.lo H5Fquery.lo H5Fsfile.lo H5Fsuper.lo \
H5Fsuper_cache.lo H5Ftest.lo H5FA.lo H5FAcache.lo H5FAdbg.lo \
- H5FAdblock.lo H5FAdblkpage.lo H5FAhdr.lo H5FAstat.lo \
- H5FAtest.lo H5FD.lo H5FDcore.lo H5FDdirect.lo H5FDfamily.lo \
- H5FDint.lo H5FDlog.lo H5FDmpi.lo H5FDmpio.lo H5FDmpiposix.lo \
- H5FDmulti.lo H5FDsec2.lo H5FDspace.lo H5FDstdio.lo H5FL.lo \
- H5FO.lo H5FS.lo H5FScache.lo H5FSdbg.lo H5FSsection.lo \
- H5FSstat.lo H5FStest.lo H5G.lo H5Gbtree2.lo H5Gcache.lo \
- H5Gcompact.lo H5Gdense.lo H5Gdeprec.lo H5Gent.lo H5Gint.lo \
- H5Glink.lo H5Gloc.lo H5Gname.lo H5Gnode.lo H5Gobj.lo H5Goh.lo \
- H5Groot.lo H5Gstab.lo H5Gtest.lo H5Gtraverse.lo H5HF.lo \
- H5HFbtree2.lo H5HFcache.lo H5HFdbg.lo H5HFdblock.lo \
+ H5FAdblock.lo H5FAdblkpage.lo H5FAhdr.lo H5FAint.lo \
+ H5FAstat.lo H5FAtest.lo H5FD.lo H5FDcore.lo H5FDdirect.lo \
+ H5FDfamily.lo H5FDint.lo H5FDlog.lo H5FDmpi.lo H5FDmpio.lo \
+ H5FDmpiposix.lo H5FDmulti.lo H5FDsec2.lo H5FDspace.lo \
+ H5FDstdio.lo H5FL.lo H5FO.lo H5FS.lo H5FScache.lo H5FSdbg.lo \
+ H5FSsection.lo H5FSstat.lo H5FStest.lo H5G.lo H5Gbtree2.lo \
+ H5Gcache.lo H5Gcompact.lo H5Gdense.lo H5Gdeprec.lo H5Gent.lo \
+ H5Gint.lo H5Glink.lo H5Gloc.lo H5Gname.lo H5Gnode.lo H5Gobj.lo \
+ H5Goh.lo H5Groot.lo H5Gstab.lo H5Gtest.lo H5Gtraverse.lo \
+ H5HF.lo H5HFbtree2.lo H5HFcache.lo H5HFdbg.lo H5HFdblock.lo \
H5HFdtable.lo H5HFhdr.lo H5HFhuge.lo H5HFiblock.lo H5HFiter.lo \
H5HFman.lo H5HFsection.lo H5HFspace.lo H5HFstat.lo H5HFtest.lo \
H5HFtiny.lo H5HG.lo H5HGcache.lo H5HGdbg.lo H5HGquery.lo \
@@ -520,7 +520,7 @@ libhdf5_la_SOURCES = H5.c H5checksum.c H5dbg.c H5system.c H5timer.c H5trace.c \
H5Fmount.c H5Fmpi.c H5Fquery.c \
H5Fsfile.c H5Fsuper.c H5Fsuper_cache.c H5Ftest.c \
H5FA.c H5FAcache.c H5FAdbg.c H5FAdblock.c H5FAdblkpage.c H5FAhdr.c \
- H5FAstat.c H5FAtest.c \
+ H5FAint.c H5FAstat.c H5FAtest.c \
H5FD.c H5FDcore.c \
H5FDdirect.c H5FDfamily.c H5FDint.c H5FDlog.c H5FDmpi.c H5FDmpio.c \
H5FDmpiposix.c H5FDmulti.c H5FDsec2.c H5FDspace.c H5FDstdio.c \
@@ -776,6 +776,7 @@ distclean-compile:
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/H5FAdblkpage.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/H5FAdblock.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/H5FAhdr.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/H5FAint.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/H5FAstat.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/H5FAtest.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/H5FD.Plo@am__quote@
diff --git a/test/Makefile.in b/test/Makefile.in
index de5de82..59b7b06 100644
--- a/test/Makefile.in
+++ b/test/Makefile.in
@@ -803,11 +803,10 @@ TRACE = perl $(top_srcdir)/bin/trace
CHECK_CLEANFILES = *.chkexe *.chklog *.clog accum.h5 cmpd_dset.h5 \
compact_dataset.h5 dataset.h5 dset_offset.h5 \
max_compact_dataset.h5 simple.h5 set_local.h5 random_chunks.h5 \
- huge_chunks.h5 chunk_cache.h5 big_chunk.h5 chunk_expand.h5 \
- chunk_fast.h5 \
- copy_dcpl_newfile.h5 extend.h5 istore.h5 extlinks*.h5 \
- frspace.h5 links*.h5 sys_file1 tfile[1-6].h5 th5s[1-4].h5 \
- lheap.h5 fheap.h5 ohdr.h5 stab.h5 extern_[1-3].h5 \
+ huge_chunks.h5 chunk_cache.h5 big_chunk.h5 chunk_fast.h5 \
+ chunk_expand.h5 copy_dcpl_newfile.h5 extend.h5 istore.h5 \
+ extlinks*.h5 frspace.h5 links*.h5 sys_file1 tfile[1-6].h5 \
+ th5s[1-4].h5 lheap.h5 fheap.h5 ohdr.h5 stab.h5 extern_[1-3].h5 \
extern_[1-4][ab].raw gheap[0-4].h5 dt_arith[1-2] links.h5 \
links[0-6]*.h5 extlinks[0-15].h5 tmp big.data \
big[0-9][0-9][0-9][0-9][0-9].h5 stdio.h5 sec2.h5 \
@@ -827,8 +826,7 @@ CHECK_CLEANFILES = *.chkexe *.chklog *.clog accum.h5 cmpd_dset.h5 \
earray.h5 efc[0-5].h5 log_vfd_out.log new_multi_file_v16-r.h5 \
new_multi_file_v16-s.h5 split_get_file_image_test-m.h5 \
split_get_file_image_test-r.h5 file_image_core_test.h5.copy \
- swmr_data.h5 \
- flushrefresh.h5 flushrefresh_VERIFICATION_START \
+ swmr_data.h5 flushrefresh.h5 flushrefresh_VERIFICATION_START \
flushrefresh_VERIFICATION_CHECKPOINT1 \
flushrefresh_VERIFICATION_CHECKPOINT2 \
flushrefresh_VERIFICATION_DONE