summaryrefslogtreecommitdiffstats
path: root/src/H5C.c
diff options
context:
space:
mode:
authormainzer <mainzer#hdfgroup.org>2019-01-16 21:49:54 (GMT)
committermainzer <mainzer#hdfgroup.org>2019-01-16 21:49:54 (GMT)
commit83492f29ed5dcc00ed9bc3ab1b36f407656a2e29 (patch)
tree249d34aad1ed1b1739966a49d404592e1eab8ba8 /src/H5C.c
parent5aebfb4f39fdf323d4d125813af7b49d322d1f80 (diff)
downloadhdf5-83492f29ed5dcc00ed9bc3ab1b36f407656a2e29.zip
hdf5-83492f29ed5dcc00ed9bc3ab1b36f407656a2e29.tar.gz
hdf5-83492f29ed5dcc00ed9bc3ab1b36f407656a2e29.tar.bz2
Checkin of fix for the failure to evict all tagged entries issue.
Diffstat (limited to 'src/H5C.c')
-rw-r--r--src/H5C.c35
1 files changed, 19 insertions, 16 deletions
diff --git a/src/H5C.c b/src/H5C.c
index 36e09ac..88d6442 100644
--- a/src/H5C.c
+++ b/src/H5C.c
@@ -1001,7 +1001,7 @@ H5C_evict_or_refresh_all_entries_in_page(H5F_t * f, uint64_t page,
HDassert(cache_ptr->magic == H5C__H5C_T_MAGIC);
HDassert(cache_ptr->vfd_swmr_reader);
-#if 1 /* JRM */
+#if 0 /* JRM */
HDfprintf(stderr,
"H5C_evict_or_refresh_all_entries_in_page() entering. page = %lld\n",
page);
@@ -1044,12 +1044,17 @@ H5C_evict_or_refresh_all_entries_in_page(H5F_t * f, uint64_t page,
*/
if ( entry_ptr->is_pinned ) {
- if ( entry_ptr->tag_info ) {
+ /* if the entry has tag_info and there is no refresh
+ * callback, a call to H5C_evict_tagged_entries() is the
+ * only option available.
+ */
+ if ( ( entry_ptr->tag_info ) &&
+ ( entry_ptr->type->refresh == NULL ) ) {
tag = entry_ptr->tag_info->tag;
HDassert(!(entry_ptr->tag_info->corked));
-#if 1 /* JRM */
+#if 0 /* JRM */
HDfprintf(stderr,
"evicting tagged entries addr/page/tag == %lld/%lld/%lld\n",
entry_ptr->addr, entry_ptr->page, tag);
@@ -1068,22 +1073,20 @@ H5C_evict_or_refresh_all_entries_in_page(H5F_t * f, uint64_t page,
entry_ptr = NULL;
} else if ( entry_ptr->type->refresh ) {
-#if 1 /* JRM */
+#if 0 /* JRM */
HDfprintf(stderr, "refreshing addr/page/tag == %lld/%lld\n",
entry_ptr->addr, entry_ptr->page);
#endif /* JRM */
- /* If the entry is pinned and not tagged, it is a global
- * object such as the super block, persistant free
- * space manager, or a global heap.
+ /* If there is a refresh callback, use it to minimize
+ * overhead.
*
- * In this case, we must either refresh the entry,
- * or verify that it has not changed, and that no
- * action is required.
+ * At present, the only refresh call is for the
+ * superblock. This is essential, as the superblock
+ * is manually pinned for as long as the file is open,
+ * and thus cannot be evicted.
*
- * For the initial prototype, we avoid global heaps,
- * and claim that we need not concern ourselves with
- * free space managers, since the VFD SWMR reader opens
- * the file R/O.
+ * there may be other examples of this, but for the
+ * prototype, we seem to be able to avoid them.
*/
/* 1) Get the on disk size of the entry. Since the
@@ -1203,7 +1206,7 @@ H5C_evict_or_refresh_all_entries_in_page(H5F_t * f, uint64_t page,
} else {
/* The entry is pinned, is not tagged, and has no
- * callback.
+ * refresh callback.
*
* This should be un-reachable. If it is reached, we
* probably have another refresh callback to write.
@@ -1216,7 +1219,7 @@ H5C_evict_or_refresh_all_entries_in_page(H5F_t * f, uint64_t page,
* skip list -- thus no need for the
* H5C__DEL_FROM_SLIST_ON_DESTROY_FLAG.
*/
-#if 1 /* JRM */
+#if 0 /* JRM */
if ( entry_ptr->tag_info ) {
HDfprintf(stderr,