summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDana Robinson <derobins@hdfgroup.org>2017-01-06 21:45:13 (GMT)
committerDana Robinson <derobins@hdfgroup.org>2017-01-06 21:45:13 (GMT)
commitbe00c2b6c2a370fdda6c63d1ba683a24646ce567 (patch)
treec4bdbf68081724299919101522cb5c248cf6b471
parent047646d469a8bf7ccc3362a8bd9de2dc182e543e (diff)
parent8d4c84eae2954a77c725f42298b20d694a6150c8 (diff)
downloadhdf5-be00c2b6c2a370fdda6c63d1ba683a24646ce567.zip
hdf5-be00c2b6c2a370fdda6c63d1ba683a24646ce567.tar.gz
hdf5-be00c2b6c2a370fdda6c63d1ba683a24646ce567.tar.bz2
Merge pull request #239 in HDFFV/hdf5 from develop_merge_cache_image_05 to develop
* commit '8d4c84eae2954a77c725f42298b20d694a6150c8': Bring changes to metadata cache "get entry status" call and new "child serialized / unserialized" messages and support from the cache image branch. Add "image up to date" flag / parameter to metadata cache entry status calls.
-rw-r--r--src/H5AC.c137
-rw-r--r--src/H5AClog.c95
-rw-r--r--src/H5ACmpio.c2
-rw-r--r--src/H5ACpkg.h4
-rw-r--r--src/H5ACprivate.h7
-rw-r--r--src/H5ACproxy_entry.c29
-rw-r--r--src/H5B2cache.c6
-rw-r--r--src/H5C.c278
-rw-r--r--src/H5Cpkg.h2
-rw-r--r--src/H5Cprivate.h23
-rw-r--r--src/H5Cquery.c5
-rw-r--r--src/H5EAcache.c10
-rw-r--r--src/H5FAcache.c6
-rw-r--r--src/H5FScache.c4
-rw-r--r--src/H5HFcache.c4
-rw-r--r--src/H5HLcache.c2
-rw-r--r--src/H5Ocache.c4
-rw-r--r--src/H5err.txt3
-rw-r--r--test/cache.c71
-rw-r--r--test/cache_common.c2
-rw-r--r--testpar/t_cache.c26
21 files changed, 663 insertions, 57 deletions
diff --git a/src/H5AC.c b/src/H5AC.c
index 6449584..117e662 100644
--- a/src/H5AC.c
+++ b/src/H5AC.c
@@ -834,6 +834,7 @@ H5AC_get_entry_status(const H5F_t *f, haddr_t addr, unsigned *status)
hbool_t is_corked;
hbool_t is_flush_dep_child; /* Entry @ addr is in the cache and is a flush dependency child */
hbool_t is_flush_dep_parent; /* Entry @ addr is in the cache and is a flush dependency parent */
+ hbool_t image_is_up_to_date; /* Entry @ addr is in the cache and has an up to date image */
herr_t ret_value = SUCCEED; /* Return value */
FUNC_ENTER_NOAPI(FAIL)
@@ -842,7 +843,7 @@ H5AC_get_entry_status(const H5F_t *f, haddr_t addr, unsigned *status)
HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL, "Bad param(s) on entry.")
if(H5C_get_entry_status(f, addr, NULL, &in_cache, &is_dirty,
- &is_protected, &is_pinned, &is_corked, &is_flush_dep_parent, &is_flush_dep_child) < 0)
+ &is_protected, &is_pinned, &is_corked, &is_flush_dep_parent, &is_flush_dep_child, &image_is_up_to_date) < 0)
HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL, "H5C_get_entry_status() failed.")
if(in_cache) {
@@ -859,6 +860,8 @@ H5AC_get_entry_status(const H5F_t *f, haddr_t addr, unsigned *status)
*status |= H5AC_ES__IS_FLUSH_DEP_PARENT;
if(is_flush_dep_child)
*status |= H5AC_ES__IS_FLUSH_DEP_CHILD;
+ if(image_is_up_to_date)
+ *status |= H5AC_ES__IMAGE_IS_UP_TO_DATE;
} /* end if */
else
*status = 0;
@@ -1131,6 +1134,138 @@ done:
/*-------------------------------------------------------------------------
+ * Function: H5AC_mark_entry_unserialized
+ *
+ * Purpose: Mark a pinned or protected entry as unserialized. The target
+ * entry MUST be either pinned, protected, or both.
+ *
+ * Return: Non-negative on success/Negative on failure
+ *
+ * Programmer: Quincey Koziol
+ * 12/22/16
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5AC_mark_entry_unserialized(void *thing)
+{
+#if H5AC__TRACE_FILE_ENABLED
+ char trace[128] = "";
+ FILE * trace_file_ptr = NULL;
+#endif /* H5AC__TRACE_FILE_ENABLED */
+ hbool_t log_enabled; /* TRUE if logging was set up */
+ hbool_t curr_logging; /* TRUE if currently logging */
+ H5AC_info_t *entry_ptr = NULL; /* Pointer to the cache entry */
+ H5C_t *cache_ptr = NULL; /* Pointer to the entry's associated metadata cache */
+ herr_t ret_value = SUCCEED; /* Return value */
+
+ FUNC_ENTER_NOAPI(FAIL)
+
+ /* Sanity check */
+ HDassert(thing);
+
+ /* Set up entry & cache pointers */
+ entry_ptr = (H5AC_info_t *)thing;
+ cache_ptr = entry_ptr->cache_ptr;
+
+#if H5AC__TRACE_FILE_ENABLED
+ /* For the mark entry unserialized call, only the addr
+ * is really necessary in the trace file. Write the result to catch
+ * occult errors.
+ */
+ if(NULL != (trace_file_ptr = H5C_get_trace_file_ptr_from_entry(thing)))
+ sprintf(trace, "%s 0x%lx", FUNC, (unsigned long)(entry_ptr->addr));
+#endif /* H5AC__TRACE_FILE_ENABLED */
+
+ /* Check if log messages are being emitted */
+ if(H5C_get_logging_status(cache_ptr, &log_enabled, &curr_logging) < 0)
+ HGOTO_ERROR(H5E_CACHE, H5E_CANTGET, FAIL, "unable to get logging status")
+
+ if(H5C_mark_entry_unserialized(thing) < 0)
+ HGOTO_ERROR(H5E_CACHE, H5E_CANTMARKUNSERIALIZED, FAIL, "can't mark entry unserialized")
+
+done:
+#if H5AC__TRACE_FILE_ENABLED
+ if(trace_file_ptr)
+ HDfprintf(trace_file_ptr, "%s %d\n", trace, (int)ret_value);
+#endif /* H5AC__TRACE_FILE_ENABLED */
+
+ /* If currently logging, generate a message */
+ if(curr_logging)
+ if(H5AC__write_mark_unserialized_entry_log_msg(cache_ptr, entry_ptr, ret_value) < 0)
+ HDONE_ERROR(H5E_CACHE, H5E_LOGFAIL, FAIL, "unable to emit log message")
+
+ FUNC_LEAVE_NOAPI(ret_value)
+} /* H5AC_mark_entry_unserialized() */
+
+
+/*-------------------------------------------------------------------------
+ * Function: H5AC_mark_entry_serialized
+ *
+ * Purpose: Mark a pinned entry as serialized. The target
+ * entry MUST be pinned.
+ *
+ * Return: Non-negative on success/Negative on failure
+ *
+ * Programmer: Quincey Koziol
+ * 12/22/16
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5AC_mark_entry_serialized(void *thing)
+{
+#if H5AC__TRACE_FILE_ENABLED
+ char trace[128] = "";
+ FILE * trace_file_ptr = NULL;
+#endif /* H5AC__TRACE_FILE_ENABLED */
+ hbool_t log_enabled; /* TRUE if logging was set up */
+ hbool_t curr_logging; /* TRUE if currently logging */
+ H5AC_info_t *entry_ptr = NULL; /* Pointer to the cache entry */
+ H5C_t *cache_ptr = NULL; /* Pointer to the entry's associated metadata cache */
+ herr_t ret_value = SUCCEED; /* Return value */
+
+ FUNC_ENTER_NOAPI(FAIL)
+
+ /* Sanity check */
+ HDassert(thing);
+
+#if H5AC__TRACE_FILE_ENABLED
+ /* For the mark entry serializedn call, only the addr
+ * is really necessary in the trace file. Write the result to catch
+ * occult errors.
+ */
+ if(NULL != (trace_file_ptr = H5C_get_trace_file_ptr_from_entry(thing)))
+ sprintf(trace, "%s 0x%lx", FUNC,
+ (unsigned long)(((H5C_cache_entry_t *)thing)->addr));
+#endif /* H5AC__TRACE_FILE_ENABLED */
+
+ entry_ptr = (H5AC_info_t *)thing;
+ cache_ptr = entry_ptr->cache_ptr;
+
+ /* Check if log messages are being emitted */
+ if(H5C_get_logging_status(cache_ptr, &log_enabled, &curr_logging) < 0)
+ HGOTO_ERROR(H5E_CACHE, H5E_CANTGET, FAIL, "unable to get logging status")
+
+ if(H5C_mark_entry_serialized(thing) < 0)
+ HGOTO_ERROR(H5E_CACHE, H5E_CANTMARKSERIALIZED, FAIL, "can't mark entry serialized")
+
+done:
+#if H5AC__TRACE_FILE_ENABLED
+ if(trace_file_ptr)
+ HDfprintf(trace_file_ptr, "%s %d\n", trace, (int)ret_value);
+#endif /* H5AC__TRACE_FILE_ENABLED */
+
+ /* If currently logging, generate a message */
+ if(curr_logging)
+ if(H5AC__write_mark_serialized_entry_log_msg(cache_ptr, entry_ptr, ret_value) < 0)
+ HDONE_ERROR(H5E_CACHE, H5E_LOGFAIL, FAIL, "unable to emit log message")
+
+ FUNC_LEAVE_NOAPI(ret_value)
+} /* H5AC_mark_entry_serialized() */
+
+
+/*-------------------------------------------------------------------------
* Function: H5AC_move_entry
*
* Purpose: Use this function to notify the cache that an object's
diff --git a/src/H5AClog.c b/src/H5AClog.c
index 1cdaa00..780373e 100644
--- a/src/H5AClog.c
+++ b/src/H5AClog.c
@@ -496,6 +496,101 @@ done:
/*-------------------------------------------------------------------------
+ * Function: H5AC__write_mark_unserialized_entry_log_msg
+ *
+ * Purpose: Write a log message for marking cache entries as unserialized.
+ *
+ * Return: Success: SUCCEED
+ * Failure: FAIL
+ *
+ * Programmer: Quincey Koziol
+ * Thursday, December 22, 2016
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5AC__write_mark_unserialized_entry_log_msg(const H5AC_t *cache,
+ const H5AC_info_t *entry,
+ herr_t fxn_ret_value)
+{
+ char msg[MSG_SIZE];
+ herr_t ret_value = SUCCEED;
+
+ FUNC_ENTER_NOAPI(FAIL)
+
+ /* Sanity checks */
+ HDassert(cache);
+ HDassert(entry);
+
+ /* Create the log message string */
+ HDsnprintf(msg, MSG_SIZE,
+"\
+{\
+\"timestamp\":%lld,\
+\"action\":\"unserialized\",\
+\"address\":0x%lx,\
+\"returned\":%d\
+},\n\
+"
+ , (long long)HDtime(NULL), (unsigned long)entry->addr, (int)fxn_ret_value);
+
+ /* Write the log message to the file */
+ if(H5C_write_log_message(cache, msg) < 0)
+ HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL, "unable to emit log message")
+
+done:
+ FUNC_LEAVE_NOAPI(ret_value)
+} /* H5AC__write_mark_unserialized_entry_log_msg() */
+
+
+/*-------------------------------------------------------------------------
+ * Function: H5AC__write_mark_serialize_entry_log_msg
+ *
+ * Purpose: Write a log message for marking cache entries as serialize.
+ *
+ * Return: Success: SUCCEED
+ * Failure: FAIL
+ *
+ * Programmer: Quincey Koziol
+ * Thursday, December 22, 2016
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5AC__write_mark_serialized_entry_log_msg(const H5AC_t *cache, const H5AC_info_t *entry,
+ herr_t fxn_ret_value)
+{
+ char msg[MSG_SIZE]; /* Log message buffer */
+ herr_t ret_value = SUCCEED; /* Return value */
+
+ FUNC_ENTER_NOAPI(FAIL)
+
+ /* Sanity checks */
+ HDassert(cache);
+ HDassert(entry);
+
+ /* Create the log message string */
+ HDsnprintf(msg, MSG_SIZE,
+"\
+{\
+\"timestamp\":%lld,\
+\"action\":\"serialized\",\
+\"address\":0x%lx,\
+\"returned\":%d\
+},\n\
+"
+ , (long long)HDtime(NULL), (unsigned long)entry->addr, (int)fxn_ret_value);
+
+ /* Write the log message to the file */
+ if(H5C_write_log_message(cache, msg) < 0)
+ HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL, "unable to emit log message")
+
+done:
+ FUNC_LEAVE_NOAPI(ret_value)
+} /* H5AC__write_mark_serialized_entry_log_msg() */
+
+
+/*-------------------------------------------------------------------------
* Function: H5AC__write_move_entry_log_msg
*
* Purpose: Write a log message for moving a cache entry.
diff --git a/src/H5ACmpio.c b/src/H5ACmpio.c
index 570783a..44ffd9d 100644
--- a/src/H5ACmpio.c
+++ b/src/H5ACmpio.c
@@ -1071,7 +1071,7 @@ H5AC__log_moved_entry(const H5F_t *f, haddr_t old_addr, haddr_t new_addr)
/* get entry status, size, etc here */
if(H5C_get_entry_status(f, old_addr, &entry_size, &entry_in_cache,
- &entry_dirty, NULL, NULL, NULL, NULL, NULL) < 0)
+ &entry_dirty, NULL, NULL, NULL, NULL, NULL, NULL) < 0)
HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL, "Can't get entry status.")
if(!entry_in_cache)
HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL, "entry not in cache.")
diff --git a/src/H5ACpkg.h b/src/H5ACpkg.h
index 3900ff1..dbbd8a0 100644
--- a/src/H5ACpkg.h
+++ b/src/H5ACpkg.h
@@ -452,6 +452,10 @@ H5_DLL herr_t H5AC__write_mark_dirty_entry_log_msg(const H5AC_t *cache,
herr_t fxn_ret_value);
H5_DLL herr_t H5AC__write_mark_clean_entry_log_msg(const H5AC_t *cache,
const H5AC_info_t *entry, herr_t fxn_ret_value);
+H5_DLL herr_t H5AC__write_mark_unserialized_entry_log_msg(const H5AC_t *cache,
+ const H5AC_info_t *entry, herr_t fxn_ret_value);
+H5_DLL herr_t H5AC__write_mark_serialized_entry_log_msg(const H5AC_t *cache,
+ const H5AC_info_t *entry, herr_t fxn_ret_value);
H5_DLL herr_t H5AC__write_move_entry_log_msg(const H5AC_t *cache,
haddr_t old_addr,
haddr_t new_addr,
diff --git a/src/H5ACprivate.h b/src/H5ACprivate.h
index 96f23cb..3dd6079 100644
--- a/src/H5ACprivate.h
+++ b/src/H5ACprivate.h
@@ -170,6 +170,8 @@ typedef H5C_notify_action_t H5AC_notify_action_t;
#define H5AC_NOTIFY_ACTION_ENTRY_CLEANED H5C_NOTIFY_ACTION_ENTRY_CLEANED
#define H5AC_NOTIFY_ACTION_CHILD_DIRTIED H5C_NOTIFY_ACTION_CHILD_DIRTIED
#define H5AC_NOTIFY_ACTION_CHILD_CLEANED H5C_NOTIFY_ACTION_CHILD_CLEANED
+#define H5AC_NOTIFY_ACTION_CHILD_UNSERIALIZED H5C_NOTIFY_ACTION_CHILD_UNSERIALIZED
+#define H5AC_NOTIFY_ACTION_CHILD_SERIALIZED H5C_NOTIFY_ACTION_CHILD_SERIALIZED
#define H5AC__CLASS_NO_FLAGS_SET H5C__CLASS_NO_FLAGS_SET
#define H5AC__CLASS_SPECULATIVE_LOAD_FLAG H5C__CLASS_SPECULATIVE_LOAD_FLAG
@@ -218,6 +220,8 @@ typedef struct H5AC_proxy_entry_t {
size_t nchildren; /* Number of children */
size_t ndirty_children; /* Number of dirty children */
/* (Note that this currently duplicates some cache functionality) */
+ size_t nunser_children; /* Number of unserialized children */
+ /* (Note that this currently duplicates some cache functionality) */
} H5AC_proxy_entry_t;
@@ -354,6 +358,7 @@ H5_DLLVAR hid_t H5AC_rawdata_dxpl_id;
#define H5AC_ES__IS_FLUSH_DEP_PARENT 0x0010
#define H5AC_ES__IS_FLUSH_DEP_CHILD 0x0020
#define H5AC_ES__IS_CORKED 0x0040
+#define H5AC_ES__IMAGE_IS_UP_TO_DATE 0x0080
/* external function declarations: */
@@ -377,6 +382,8 @@ H5_DLL herr_t H5AC_unprotect(H5F_t *f, hid_t dxpl_id, const H5AC_class_t *type,
H5_DLL herr_t H5AC_flush(H5F_t *f, hid_t dxpl_id);
H5_DLL herr_t H5AC_mark_entry_dirty(void *thing);
H5_DLL herr_t H5AC_mark_entry_clean(void *thing);
+H5_DLL herr_t H5AC_mark_entry_unserialized(void *thing);
+H5_DLL herr_t H5AC_mark_entry_serialized(void *thing);
H5_DLL herr_t H5AC_move_entry(H5F_t *f, const H5AC_class_t *type,
haddr_t old_addr, haddr_t new_addr, hid_t dxpl_id);
H5_DLL herr_t H5AC_dest(H5F_t *f, hid_t dxpl_id);
diff --git a/src/H5ACproxy_entry.c b/src/H5ACproxy_entry.c
index 66aacb3..cee9b72 100644
--- a/src/H5ACproxy_entry.c
+++ b/src/H5ACproxy_entry.c
@@ -312,6 +312,10 @@ H5AC_proxy_entry_add_child(H5AC_proxy_entry_t *pentry, H5F_t *f, hid_t dxpl_id,
if(H5AC_mark_entry_clean(pentry) < 0)
HGOTO_ERROR(H5E_CACHE, H5E_CANTCLEAN, FAIL, "can't mark proxy entry clean")
+ /* Proxies start out serialized (insertions are automatically marked unserialized) */
+ if(H5AC_mark_entry_serialized(pentry) < 0)
+ HGOTO_ERROR(H5E_CACHE, H5E_CANTSERIALIZE, FAIL, "can't mark proxy entry clean")
+
/* If there are currently parents, iterate over the list of parents, creating flush dependency on them */
if(pentry->parents)
if(H5SL_iterate(pentry->parents, H5AC__proxy_entry_add_child_cb, pentry) < 0)
@@ -438,6 +442,7 @@ H5AC_proxy_entry_dest(H5AC_proxy_entry_t *pentry)
HDassert(NULL == pentry->parents);
HDassert(0 == pentry->nchildren);
HDassert(0 == pentry->ndirty_children);
+ HDassert(0 == pentry->nunser_children);
/* Free the proxy entry object */
pentry = H5FL_FREE(H5AC_proxy_entry_t, pentry);
@@ -549,6 +554,7 @@ H5AC__proxy_entry_notify(H5AC_notify_action_t action, void *_thing)
case H5AC_NOTIFY_ACTION_BEFORE_EVICT:
/* Sanity checks */
HDassert(0 == pentry->ndirty_children);
+ HDassert(0 == pentry->nunser_children);
/* No action */
break;
@@ -590,6 +596,29 @@ H5AC__proxy_entry_notify(H5AC_notify_action_t action, void *_thing)
HGOTO_ERROR(H5E_CACHE, H5E_CANTCLEAN, FAIL, "can't mark proxy entry clean")
break;
+ case H5AC_NOTIFY_ACTION_CHILD_UNSERIALIZED:
+ /* Increment # of unserialized children */
+ pentry->nunser_children++;
+
+ /* Check for first unserialized child */
+ if(1 == pentry->nunser_children)
+ if(H5AC_mark_entry_unserialized(pentry) < 0)
+ HGOTO_ERROR(H5E_CACHE, H5E_CANTUNSERIALIZE, FAIL, "can't mark proxy entry unserialized")
+ break;
+
+ case H5AC_NOTIFY_ACTION_CHILD_SERIALIZED:
+ /* Sanity check */
+ HDassert(pentry->nunser_children > 0);
+
+ /* Decrement # of unserialized children */
+ pentry->nunser_children--;
+
+ /* Check for last unserialized child */
+ if(0 == pentry->nunser_children)
+ if(H5AC_mark_entry_serialized(pentry) < 0)
+ HGOTO_ERROR(H5E_CACHE, H5E_CANTSERIALIZE, FAIL, "can't mark proxy entry serialized")
+ break;
+
default:
#ifdef NDEBUG
HGOTO_ERROR(H5E_CACHE, H5E_BADVALUE, FAIL, "unknown notify action from metadata cache")
diff --git a/src/H5B2cache.c b/src/H5B2cache.c
index 6954e6c..e9b6a41 100644
--- a/src/H5B2cache.c
+++ b/src/H5B2cache.c
@@ -479,6 +479,8 @@ H5B2__cache_hdr_notify(H5AC_notify_action_t action, void *_thing)
case H5AC_NOTIFY_ACTION_ENTRY_CLEANED:
case H5AC_NOTIFY_ACTION_CHILD_DIRTIED:
case H5AC_NOTIFY_ACTION_CHILD_CLEANED:
+ case H5AC_NOTIFY_ACTION_CHILD_UNSERIALIZED:
+ case H5AC_NOTIFY_ACTION_CHILD_SERIALIZED:
/* do nothing */
break;
@@ -905,6 +907,8 @@ H5B2__cache_int_notify(H5AC_notify_action_t action, void *_thing)
case H5AC_NOTIFY_ACTION_ENTRY_CLEANED:
case H5AC_NOTIFY_ACTION_CHILD_DIRTIED:
case H5AC_NOTIFY_ACTION_CHILD_CLEANED:
+ case H5AC_NOTIFY_ACTION_CHILD_UNSERIALIZED:
+ case H5AC_NOTIFY_ACTION_CHILD_SERIALIZED:
/* do nothing */
break;
@@ -1291,6 +1295,8 @@ H5B2__cache_leaf_notify(H5AC_notify_action_t action, void *_thing)
case H5AC_NOTIFY_ACTION_ENTRY_CLEANED:
case H5AC_NOTIFY_ACTION_CHILD_DIRTIED:
case H5AC_NOTIFY_ACTION_CHILD_CLEANED:
+ case H5AC_NOTIFY_ACTION_CHILD_UNSERIALIZED:
+ case H5AC_NOTIFY_ACTION_CHILD_SERIALIZED:
/* do nothing */
break;
diff --git a/src/H5C.c b/src/H5C.c
index 37c833e..4adee6d 100644
--- a/src/H5C.c
+++ b/src/H5C.c
@@ -308,6 +308,7 @@ H5C_create(size_t max_cache_size,
cache_ptr->log_flush = log_flush;
cache_ptr->evictions_enabled = TRUE;
+ cache_ptr->close_warning_received = FALSE;
cache_ptr->index_len = 0;
cache_ptr->index_size = (size_t)0;
@@ -1439,6 +1440,7 @@ H5C_insert_entry(H5F_t * f,
entry_ptr->flush_dep_parent_nalloc = 0;
entry_ptr->flush_dep_nchildren = 0;
entry_ptr->flush_dep_ndirty_children = 0;
+ entry_ptr->flush_dep_nunser_children = 0;
entry_ptr->ht_next = NULL;
entry_ptr->ht_prev = NULL;
@@ -1645,12 +1647,25 @@ H5C_mark_entry_dirty(void *thing)
/* set the dirtied flag */
entry_ptr->dirtied = TRUE;
- } else if ( entry_ptr->is_pinned ) {
+ /* reset image_up_to_date */
+ if(entry_ptr->image_up_to_date) {
+ entry_ptr->image_up_to_date = FALSE;
+
+ if(entry_ptr->flush_dep_nparents > 0)
+ if(H5C__mark_flush_dep_unserialized(entry_ptr) < 0)
+ HGOTO_ERROR(H5E_CACHE, H5E_CANTNOTIFY, FAIL, "Can't propagate serialization status to fd parents")
+ }/* end if */
+ } /* end if */
+ else if ( entry_ptr->is_pinned ) {
hbool_t was_clean; /* Whether the entry was previously clean */
+ hbool_t image_was_up_to_date;
/* Remember previous dirty status */
was_clean = !entry_ptr->is_dirty;
+ /* Check if image is up to date */
+ image_was_up_to_date = entry_ptr->image_up_to_date;
+
/* Mark the entry as dirty if it isn't already */
entry_ptr->is_dirty = TRUE;
entry_ptr->image_up_to_date = FALSE;
@@ -1678,6 +1693,10 @@ H5C_mark_entry_dirty(void *thing)
if(H5C__mark_flush_dep_dirty(entry_ptr) < 0)
HGOTO_ERROR(H5E_CACHE, H5E_CANTMARKDIRTY, FAIL, "Can't propagate flush dep dirty flag")
} /* end if */
+ if(image_was_up_to_date)
+ if(entry_ptr->flush_dep_nparents > 0)
+ if(H5C__mark_flush_dep_unserialized(entry_ptr) < 0)
+ HGOTO_ERROR(H5E_CACHE, H5E_CANTNOTIFY, FAIL, "Can't propagate serialization status to fd parents")
} /* end if */
else
HGOTO_ERROR(H5E_CACHE, H5E_CANTMARKDIRTY, FAIL, "Entry is neither pinned nor protected??")
@@ -1767,6 +1786,99 @@ done:
/*-------------------------------------------------------------------------
+ * Function: H5C_mark_entry_unserialized
+ *
+ * Purpose: Mark a pinned or protected entry as unserialized. The target
+ * entry MUST be either pinned or protected, and MAY be both.
+ *
+ * Return: Non-negative on success/Negative on failure
+ *
+ * Programmer: Quincey Koziol
+ * 12/23/16
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5C_mark_entry_unserialized(void *thing)
+{
+ H5C_cache_entry_t *entry = (H5C_cache_entry_t *)thing;
+ herr_t ret_value = SUCCEED; /* Return value */
+
+ FUNC_ENTER_NOAPI(FAIL)
+
+ /* Sanity checks */
+ HDassert(entry);
+ HDassert(H5F_addr_defined(entry->addr));
+
+ if(entry->is_protected || entry->is_pinned) {
+ HDassert(!entry->is_read_only);
+
+ /* Reset image_up_to_date */
+ if(entry->image_up_to_date) {
+ entry->image_up_to_date = FALSE;
+
+ if(entry->flush_dep_nparents > 0)
+ if(H5C__mark_flush_dep_unserialized(entry) < 0)
+ HGOTO_ERROR(H5E_CACHE, H5E_CANTSET, FAIL, "Can't propagate serialization status to fd parents")
+ }/* end if */
+ } /* end if */
+ else
+ HGOTO_ERROR(H5E_CACHE, H5E_CANTMARKUNSERIALIZED, FAIL, "Entry to unserialize is neither pinned nor protected??")
+
+done:
+ FUNC_LEAVE_NOAPI(ret_value)
+} /* H5C_mark_entry_unserialized() */
+
+
+/*-------------------------------------------------------------------------
+ * Function: H5C_mark_entry_serialized
+ *
+ * Purpose: Mark a pinned entry as serialized. The target entry MUST be
+ * pinned.
+ *
+ * Return: Non-negative on success/Negative on failure
+ *
+ * Programmer: Quincey Koziol
+ * 12/23/16
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5C_mark_entry_serialized(void *_thing)
+{
+ H5C_cache_entry_t *entry = (H5C_cache_entry_t *)_thing;
+ herr_t ret_value = SUCCEED; /* Return value */
+
+ FUNC_ENTER_NOAPI(FAIL)
+
+ /* Sanity checks */
+ HDassert(entry);
+ HDassert(H5F_addr_defined(entry->addr));
+
+ /* Operate on pinned entry */
+ if(entry->is_protected)
+ HGOTO_ERROR(H5E_CACHE, H5E_CANTMARKSERIALIZED, FAIL, "entry is protected")
+ else if(entry->is_pinned) {
+ /* Check for entry changing status and do notifications, etc. */
+ if(!entry->image_up_to_date) {
+ /* Set the image_up_to_date flag */
+ entry->image_up_to_date = TRUE;
+
+ /* Propagate the serialize up the flush dependency chain, if appropriate */
+ if(entry->flush_dep_nparents > 0)
+ if(H5C__mark_flush_dep_serialized(entry) < 0)
+ HGOTO_ERROR(H5E_CACHE, H5E_CANTMARKSERIALIZED, FAIL, "Can't propagate flush dep serialize")
+ } /* end if */
+ } /* end if */
+ else
+ HGOTO_ERROR(H5E_CACHE, H5E_CANTMARKSERIALIZED, FAIL, "Entry is not pinned??")
+
+done:
+ FUNC_LEAVE_NOAPI(ret_value)
+} /* H5C_mark_entry_serialized() */
+
+
+/*-------------------------------------------------------------------------
*
* Function: H5C_move_entry
*
@@ -1867,7 +1979,12 @@ H5C_move_entry(H5C_t * cache_ptr,
entry_ptr->is_dirty = TRUE;
/* This shouldn't be needed, but it keeps the test code happy */
- entry_ptr->image_up_to_date = FALSE;
+ if(entry_ptr->image_up_to_date) {
+ entry_ptr->image_up_to_date = FALSE;
+ if(entry_ptr->flush_dep_nparents > 0)
+ if(H5C__mark_flush_dep_unserialized(entry_ptr) < 0)
+ HGOTO_ERROR(H5E_CACHE, H5E_CANTNOTIFY, FAIL, "Can't propagate serialization status to fd parents")
+ } /* end if */
/* Modify cache data structures */
H5C__INSERT_IN_INDEX(cache_ptr, entry_ptr, FAIL)
@@ -1965,7 +2082,14 @@ H5C_resize_entry(void *thing, size_t new_size)
/* mark the entry as dirty if it isn't already */
entry_ptr->is_dirty = TRUE;
- entry_ptr->image_up_to_date = FALSE;
+
+ /* Reset the image up-to-date status */
+ if(entry_ptr->image_up_to_date) {
+ entry_ptr->image_up_to_date = FALSE;
+ if(entry_ptr->flush_dep_nparents > 0)
+ if(H5C__mark_flush_dep_unserialized(entry_ptr) < 0)
+ HGOTO_ERROR(H5E_CACHE, H5E_CANTNOTIFY, FAIL, "Can't propagate serialization status to fd parents")
+ } /* end if */
/* Release the current image */
if(entry_ptr->image_ptr)
@@ -3229,18 +3353,13 @@ H5C_unprotect(H5F_t * f,
/* Mark the entry as dirty if appropriate */
entry_ptr->is_dirty = (entry_ptr->is_dirty || dirtied);
- /* the image_up_to_date field was introduced to support
- * journaling. Until we re-introduce journaling, this
- * field should be equal to !entry_ptr->is_dirty.
- *
- * When journaling is re-enabled it should be set
- * to FALSE if dirtied is TRUE.
- */
-#if 1 /* JRM */
- entry_ptr->image_up_to_date = FALSE;
-#else /* JRM */
- entry_ptr->image_up_to_date = !entry_ptr->is_dirty;
-#endif /* JRM */
+ if(dirtied)
+ if(entry_ptr->image_up_to_date) {
+ entry_ptr->image_up_to_date = FALSE;
+ if(entry_ptr->flush_dep_nparents > 0)
+ if(H5C__mark_flush_dep_unserialized(entry_ptr) < 0)
+ HGOTO_ERROR(H5E_CACHE, H5E_CANTNOTIFY, FAIL, "Can't propagate serialization status to fd parents")
+ } /* end if */
/* Check for newly dirtied entry */
if(was_clean && entry_ptr->is_dirty) {
@@ -3782,6 +3901,20 @@ H5C_create_flush_dependency(void * parent_thing, void * child_thing)
HGOTO_ERROR(H5E_CACHE, H5E_CANTNOTIFY, FAIL, "can't notify parent about child entry dirty flag set")
} /* end if */
+ /* adjust the parent's number of unserialized children. Note
+ * that it is possible for and entry to be clean and unserialized.
+ */
+ if(!child_entry->image_up_to_date) {
+ HDassert(parent_entry->flush_dep_nunser_children < parent_entry->flush_dep_nchildren);
+
+ parent_entry->flush_dep_nunser_children++;
+
+ /* If the parent has a 'notify' callback, send a 'child entry unserialized' notice */
+ if(parent_entry->type->notify &&
+ (parent_entry->type->notify)(H5C_NOTIFY_ACTION_CHILD_UNSERIALIZED, parent_entry) < 0)
+ HGOTO_ERROR(H5E_CACHE, H5E_CANTNOTIFY, FAIL, "can't notify parent about child entry serialized flag reset")
+ } /* end if */
+
/* Post-conditions, for successful operation */
HDassert(parent_entry->is_pinned);
HDassert(parent_entry->flush_dep_nchildren > 0);
@@ -3893,6 +4026,18 @@ H5C_destroy_flush_dependency(void *parent_thing, void * child_thing)
HGOTO_ERROR(H5E_CACHE, H5E_CANTNOTIFY, FAIL, "can't notify parent about child entry dirty flag reset")
} /* end if */
+ /* adjust parent entry's number of unserialized children */
+ if(!child_entry->image_up_to_date) {
+ HDassert(parent_entry->flush_dep_nunser_children > 0);
+
+ parent_entry->flush_dep_nunser_children--;
+
+ /* If the parent has a 'notify' callback, send a 'child entry serialized' notice */
+ if(parent_entry->type->notify &&
+ (parent_entry->type->notify)(H5C_NOTIFY_ACTION_CHILD_SERIALIZED, parent_entry) < 0)
+ HGOTO_ERROR(H5E_CACHE, H5E_CANTNOTIFY, FAIL, "can't notify parent about child entry serialized flag set")
+ } /* end if */
+
/* Shrink or free the parent array if apporpriate */
if(child_entry->flush_dep_nparents == 0) {
child_entry->flush_dep_parent = (H5C_cache_entry_t **)H5FL_BLK_FREE(parent, child_entry->flush_dep_parent);
@@ -5950,6 +6095,9 @@ H5C_flush_ring(H5F_t *f, hid_t dxpl_id, H5C_ring_t ring, unsigned flags)
&& (entry_ptr->flush_dep_nchildren == 0
|| entry_ptr->flush_dep_ndirty_children == 0)
&& entry_ptr->ring == ring) {
+
+ HDassert(entry_ptr->flush_dep_nunser_children == 0);
+
if(entry_ptr->is_protected) {
/* we probably have major problems -- but lets
* flush everything we can before we decide
@@ -6811,6 +6959,7 @@ H5C_load_entry(H5F_t * f,
entry->flush_dep_parent_nalloc = 0;
entry->flush_dep_nchildren = 0;
entry->flush_dep_ndirty_children = 0;
+ entry->flush_dep_nunser_children = 0;
entry->ht_next = NULL;
entry->ht_prev = NULL;
entry->il_next = NULL;
@@ -7882,9 +8031,102 @@ done:
FUNC_LEAVE_NOAPI(ret_value)
} /* H5C__mark_flush_dep_clean() */
-#ifndef NDEBUG
/*-------------------------------------------------------------------------
+ * Function: H5C__mark_flush_dep_serialized()
+ *
+ * Purpose: Decrement the flush_dep_nunser_children fields of all the
+ * target entry's flush dependency parents in response to
+ * the target entry becoming serialized.
+ *
+ * Return: Non-negative on success/Negative on failure
+ *
+ * Programmer: John Mainzer
+ * 8/30/16
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5C__mark_flush_dep_serialized(H5C_cache_entry_t * entry_ptr)
+{
+ unsigned u; /* Local index variable */
+ herr_t ret_value = SUCCEED; /* Return value */
+
+ FUNC_ENTER_STATIC
+
+ /* Sanity checks */
+ HDassert(entry_ptr);
+
+ /* Iterate over the parent entries, if any */
+ for(u = 0; u < entry_ptr->flush_dep_nparents; u++) {
+
+ HDassert(entry_ptr->flush_dep_parent);
+ HDassert(entry_ptr->flush_dep_parent[u]->magic == H5C__H5C_CACHE_ENTRY_T_MAGIC);
+ HDassert(entry_ptr->flush_dep_parent[u]->flush_dep_nunser_children > 0);
+
+ /* decrement the parents number of unserialized children */
+ entry_ptr->flush_dep_parent[u]->flush_dep_nunser_children--;
+
+ /* If the parent has a 'notify' callback, send a 'child entry serialized' notice */
+ if(entry_ptr->flush_dep_parent[u]->type->notify &&
+ (entry_ptr->flush_dep_parent[u]->type->notify)(H5C_NOTIFY_ACTION_CHILD_SERIALIZED, entry_ptr->flush_dep_parent[u]) < 0)
+ HGOTO_ERROR(H5E_CACHE, H5E_CANTNOTIFY, FAIL, "can't notify parent about child entry serialized flag set")
+ } /* end for */
+
+done:
+ FUNC_LEAVE_NOAPI(ret_value)
+} /* H5C__mark_flush_dep_serialized() */
+
+
+/*-------------------------------------------------------------------------
+ * Function: H5C__mark_flush_dep_unserialized()
+ *
+ * Purpose: Decrement the flush_dep_nunser_children fields of all the
+ * target entry's flush dependency parents in response to
+ * the target entry becoming unserialized.
+ *
+ * Return: Non-negative on success/Negative on failure
+ *
+ * Programmer: John Mainzer
+ * 8/30/16
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5C__mark_flush_dep_unserialized(H5C_cache_entry_t * entry_ptr)
+{
+ unsigned u; /* Local index variable */
+ herr_t ret_value = SUCCEED; /* Return value */
+
+ FUNC_ENTER_STATIC
+
+ /* Sanity checks */
+ HDassert(entry_ptr);
+
+ /* Iterate over the parent entries, if any */
+ for(u = 0; u < entry_ptr->flush_dep_nparents; u++) {
+ /* Sanity check */
+ HDassert(entry_ptr->flush_dep_parent);
+ HDassert(entry_ptr->flush_dep_parent[u]->magic == H5C__H5C_CACHE_ENTRY_T_MAGIC);
+ HDassert(entry_ptr->flush_dep_parent[u]->flush_dep_nunser_children <
+ entry_ptr->flush_dep_parent[u]->flush_dep_nchildren);
+
+ /* increment parents number of usserialized children */
+ entry_ptr->flush_dep_parent[u]->flush_dep_nunser_children++;
+
+ /* If the parent has a 'notify' callback, send a 'child entry unserialized' notice */
+ if(entry_ptr->flush_dep_parent[u]->type->notify &&
+ (entry_ptr->flush_dep_parent[u]->type->notify)(H5C_NOTIFY_ACTION_CHILD_UNSERIALIZED, entry_ptr->flush_dep_parent[u]) < 0)
+ HGOTO_ERROR(H5E_CACHE, H5E_CANTNOTIFY, FAIL, "can't notify parent about child entry serialized flag reset")
+ } /* end for */
+
+done:
+ FUNC_LEAVE_NOAPI(ret_value)
+} /* H5C__mark_flush_dep_unserialized() */
+
+
+#ifndef NDEBUG
+/*-------------------------------------------------------------------------
* Function: H5C__assert_flush_dep_nocycle()
*
* Purpose: Assert recursively that base_entry is not the same as
@@ -8074,6 +8316,10 @@ H5C__generate_image(H5F_t *f, H5C_t *cache_ptr, H5C_cache_entry_t *entry_ptr,
#endif /* H5C_DO_MEMORY_SANITY_CHECKS */
entry_ptr->image_up_to_date = TRUE;
+ if(entry_ptr->flush_dep_nparents > 0)
+ if(H5C__mark_flush_dep_serialized(entry_ptr) < 0)
+ HGOTO_ERROR(H5E_CACHE, H5E_CANTNOTIFY, FAIL, "Can't propagate serialization status to fd parents")
+
done:
FUNC_LEAVE_NOAPI(ret_value)
} /* H5C__generate_image */
diff --git a/src/H5Cpkg.h b/src/H5Cpkg.h
index 306f5f9..6e37bca 100644
--- a/src/H5Cpkg.h
+++ b/src/H5Cpkg.h
@@ -4594,6 +4594,8 @@ H5_DLLVAR const H5C_class_t H5C__epoch_marker_class;
/* General routines */
H5_DLL herr_t H5C__flush_single_entry(H5F_t *f, hid_t dxpl_id,
H5C_cache_entry_t *entry_ptr, unsigned flags);
+H5_DLL herr_t H5C__mark_flush_dep_serialized(H5C_cache_entry_t * entry_ptr);
+H5_DLL herr_t H5C__mark_flush_dep_unserialized(H5C_cache_entry_t * entry_ptr);
H5_DLL herr_t H5C__flush_marked_entries(H5F_t * f, hid_t dxpl_id);
H5_DLL herr_t H5C__iter_tagged_entries(H5C_t *cache, haddr_t tag, hbool_t match_global,
H5C_tag_iter_cb_t cb, void *cb_ctx);
diff --git a/src/H5Cprivate.h b/src/H5Cprivate.h
index 3b9634f..654ce35 100644
--- a/src/H5Cprivate.h
+++ b/src/H5Cprivate.h
@@ -867,7 +867,9 @@ typedef enum H5C_notify_action_t {
H5C_NOTIFY_ACTION_ENTRY_DIRTIED, /* Entry has been marked dirty. */
H5C_NOTIFY_ACTION_ENTRY_CLEANED, /* Entry has been marked clean. */
H5C_NOTIFY_ACTION_CHILD_DIRTIED, /* Dependent child has been marked dirty. */
- H5C_NOTIFY_ACTION_CHILD_CLEANED /* Dependent child has been marked clean. */
+ H5C_NOTIFY_ACTION_CHILD_CLEANED, /* Dependent child has been marked clean. */
+ H5C_NOTIFY_ACTION_CHILD_UNSERIALIZED, /* Dependent child has been marked unserialized. */
+ H5C_NOTIFY_ACTION_CHILD_SERIALIZED /* Dependent child has been marked serialized. */
} H5C_notify_action_t;
/* Cache client callback function pointers */
@@ -1214,6 +1216,19 @@ typedef int H5C_ring_t;
* either dirty or have a nonzero flush_dep_ndirty_children. If
* this field is nonzero, then this entry cannot be flushed.
*
+ * flush_dep_nunser_children: Number of flush dependency children
+ * that are either unserialized, or have a non-zero number of
+ * positive number of unserialized children.
+ *
+ * Note that since there is no requirement that a clean entry
+ * be serialized, it is possible that flush_dep_nunser_children
+ * to be greater than flush_dep_ndirty_children.
+ *
+ * This field exist to facilitate correct ordering of entry
+ * serializations when it is necessary to serialize all the
+ * entries in the metadata cache. Thus in the cache
+ * serialization, no entry can be serialized unless this
+ * field contains 0.
*
* Fields supporting the hash table:
*
@@ -1398,6 +1413,7 @@ typedef struct H5C_cache_entry_t {
unsigned flush_dep_parent_nalloc;
unsigned flush_dep_nchildren;
unsigned flush_dep_ndirty_children;
+ unsigned flush_dep_nunser_children;
hbool_t pinned_from_client;
hbool_t pinned_from_cache;
@@ -1761,7 +1777,8 @@ H5_DLL herr_t H5C_get_cache_hit_rate(H5C_t *cache_ptr, double *hit_rate_ptr);
H5_DLL herr_t H5C_get_entry_status(const H5F_t *f, haddr_t addr,
size_t *size_ptr, hbool_t *in_cache_ptr, hbool_t *is_dirty_ptr,
hbool_t *is_protected_ptr, hbool_t *is_pinned_ptr, hbool_t *is_corked_ptr,
- hbool_t *is_flush_dep_parent_ptr, hbool_t *is_flush_dep_child_ptr);
+ hbool_t *is_flush_dep_parent_ptr, hbool_t *is_flush_dep_child_ptr,
+ hbool_t *image_up_to_date_ptr);
H5_DLL herr_t H5C_get_evictions_enabled(const H5C_t *cache_ptr, hbool_t *evictions_enabled_ptr);
H5_DLL void * H5C_get_aux_ptr(const H5C_t *cache_ptr);
H5_DLL FILE *H5C_get_trace_file_ptr(const H5C_t *cache_ptr);
@@ -1770,6 +1787,8 @@ H5_DLL herr_t H5C_insert_entry(H5F_t *f, hid_t dxpl_id, const H5C_class_t *type,
haddr_t addr, void *thing, unsigned int flags);
H5_DLL herr_t H5C_mark_entry_dirty(void *thing);
H5_DLL herr_t H5C_mark_entry_clean(void *thing);
+H5_DLL herr_t H5C_mark_entry_unserialized(void *thing);
+H5_DLL herr_t H5C_mark_entry_serialized(void *thing);
H5_DLL herr_t H5C_move_entry(H5C_t *cache_ptr, const H5C_class_t *type,
haddr_t old_addr, haddr_t new_addr);
H5_DLL herr_t H5C_pin_protected_entry(void *thing);
diff --git a/src/H5Cquery.c b/src/H5Cquery.c
index be0d4fa..f5409f7 100644
--- a/src/H5Cquery.c
+++ b/src/H5Cquery.c
@@ -231,7 +231,8 @@ H5C_get_entry_status(const H5F_t *f,
hbool_t * is_pinned_ptr,
hbool_t * is_corked_ptr,
hbool_t * is_flush_dep_parent_ptr,
- hbool_t * is_flush_dep_child_ptr)
+ hbool_t * is_flush_dep_child_ptr,
+ hbool_t * image_up_to_date_ptr)
{
H5C_t * cache_ptr;
H5C_cache_entry_t * entry_ptr = NULL;
@@ -280,6 +281,8 @@ H5C_get_entry_status(const H5F_t *f,
*is_flush_dep_parent_ptr = (entry_ptr->flush_dep_nchildren > 0);
if(is_flush_dep_child_ptr != NULL)
*is_flush_dep_child_ptr = (entry_ptr->flush_dep_nparents > 0);
+ if(image_up_to_date_ptr != NULL )
+ *image_up_to_date_ptr = entry_ptr->image_up_to_date;
} /* end else */
done:
diff --git a/src/H5EAcache.c b/src/H5EAcache.c
index 1119e39..894b31a 100644
--- a/src/H5EAcache.c
+++ b/src/H5EAcache.c
@@ -554,6 +554,8 @@ H5EA__cache_hdr_notify(H5AC_notify_action_t action, void *_thing))
case H5AC_NOTIFY_ACTION_ENTRY_CLEANED:
case H5AC_NOTIFY_ACTION_CHILD_DIRTIED:
case H5AC_NOTIFY_ACTION_CHILD_CLEANED:
+ case H5AC_NOTIFY_ACTION_CHILD_UNSERIALIZED:
+ case H5AC_NOTIFY_ACTION_CHILD_SERIALIZED:
/* do nothing */
break;
@@ -958,6 +960,8 @@ H5EA__cache_iblock_notify(H5AC_notify_action_t action, void *_thing))
case H5AC_NOTIFY_ACTION_ENTRY_CLEANED:
case H5AC_NOTIFY_ACTION_CHILD_DIRTIED:
case H5AC_NOTIFY_ACTION_CHILD_CLEANED:
+ case H5AC_NOTIFY_ACTION_CHILD_UNSERIALIZED:
+ case H5AC_NOTIFY_ACTION_CHILD_SERIALIZED:
/* do nothing */
break;
@@ -1381,6 +1385,8 @@ H5EA__cache_sblock_notify(H5AC_notify_action_t action, void *_thing))
case H5AC_NOTIFY_ACTION_ENTRY_CLEANED:
case H5AC_NOTIFY_ACTION_CHILD_DIRTIED:
case H5AC_NOTIFY_ACTION_CHILD_CLEANED:
+ case H5AC_NOTIFY_ACTION_CHILD_UNSERIALIZED:
+ case H5AC_NOTIFY_ACTION_CHILD_SERIALIZED:
/* do nothing */
break;
@@ -1792,6 +1798,8 @@ H5EA__cache_dblock_notify(H5AC_notify_action_t action, void *_thing))
case H5AC_NOTIFY_ACTION_ENTRY_CLEANED:
case H5AC_NOTIFY_ACTION_CHILD_DIRTIED:
case H5AC_NOTIFY_ACTION_CHILD_CLEANED:
+ case H5AC_NOTIFY_ACTION_CHILD_UNSERIALIZED:
+ case H5AC_NOTIFY_ACTION_CHILD_SERIALIZED:
/* do nothing */
break;
@@ -2171,6 +2179,8 @@ H5EA__cache_dblk_page_notify(H5AC_notify_action_t action, void *_thing))
case H5AC_NOTIFY_ACTION_ENTRY_CLEANED:
case H5AC_NOTIFY_ACTION_CHILD_DIRTIED:
case H5AC_NOTIFY_ACTION_CHILD_CLEANED:
+ case H5AC_NOTIFY_ACTION_CHILD_UNSERIALIZED:
+ case H5AC_NOTIFY_ACTION_CHILD_SERIALIZED:
/* do nothing */
break;
diff --git a/src/H5FAcache.c b/src/H5FAcache.c
index 11e8571..40117a7 100644
--- a/src/H5FAcache.c
+++ b/src/H5FAcache.c
@@ -475,6 +475,8 @@ H5FA__cache_hdr_notify(H5AC_notify_action_t action, void *_thing))
case H5AC_NOTIFY_ACTION_ENTRY_CLEANED:
case H5AC_NOTIFY_ACTION_CHILD_DIRTIED:
case H5AC_NOTIFY_ACTION_CHILD_CLEANED:
+ case H5AC_NOTIFY_ACTION_CHILD_UNSERIALIZED:
+ case H5AC_NOTIFY_ACTION_CHILD_SERIALIZED:
/* do nothing */
break;
@@ -879,6 +881,8 @@ H5FA__cache_dblock_notify(H5AC_notify_action_t action, void *_thing))
case H5AC_NOTIFY_ACTION_ENTRY_CLEANED:
case H5AC_NOTIFY_ACTION_CHILD_DIRTIED:
case H5AC_NOTIFY_ACTION_CHILD_CLEANED:
+ case H5AC_NOTIFY_ACTION_CHILD_UNSERIALIZED:
+ case H5AC_NOTIFY_ACTION_CHILD_SERIALIZED:
/* do nothing */
break;
@@ -1254,6 +1258,8 @@ H5FA__cache_dblk_page_notify(H5AC_notify_action_t action, void *_thing))
case H5AC_NOTIFY_ACTION_ENTRY_CLEANED:
case H5AC_NOTIFY_ACTION_CHILD_DIRTIED:
case H5AC_NOTIFY_ACTION_CHILD_CLEANED:
+ case H5AC_NOTIFY_ACTION_CHILD_UNSERIALIZED:
+ case H5AC_NOTIFY_ACTION_CHILD_SERIALIZED:
/* do nothing */
break;
diff --git a/src/H5FScache.c b/src/H5FScache.c
index 6235509..dcc8122 100644
--- a/src/H5FScache.c
+++ b/src/H5FScache.c
@@ -808,6 +808,8 @@ H5FS__cache_hdr_notify(H5AC_notify_action_t action, void *_thing)
case H5AC_NOTIFY_ACTION_ENTRY_CLEANED:
case H5AC_NOTIFY_ACTION_CHILD_DIRTIED:
case H5AC_NOTIFY_ACTION_CHILD_CLEANED:
+ case H5AC_NOTIFY_ACTION_CHILD_UNSERIALIZED:
+ case H5AC_NOTIFY_ACTION_CHILD_SERIALIZED:
case H5AC_NOTIFY_ACTION_BEFORE_EVICT:
/* do nothing */
break;
@@ -1340,6 +1342,8 @@ H5FS__cache_sinfo_notify(H5AC_notify_action_t action, void *_thing)
case H5AC_NOTIFY_ACTION_ENTRY_CLEANED:
case H5AC_NOTIFY_ACTION_CHILD_DIRTIED:
case H5AC_NOTIFY_ACTION_CHILD_CLEANED:
+ case H5AC_NOTIFY_ACTION_CHILD_UNSERIALIZED:
+ case H5AC_NOTIFY_ACTION_CHILD_SERIALIZED:
/* do nothing */
break;
diff --git a/src/H5HFcache.c b/src/H5HFcache.c
index e72cc6c..302fe04 100644
--- a/src/H5HFcache.c
+++ b/src/H5HFcache.c
@@ -1492,6 +1492,8 @@ H5HF__cache_iblock_notify(H5AC_notify_action_t action, void *_thing)
case H5AC_NOTIFY_ACTION_ENTRY_CLEANED:
case H5AC_NOTIFY_ACTION_CHILD_DIRTIED:
case H5AC_NOTIFY_ACTION_CHILD_CLEANED:
+ case H5AC_NOTIFY_ACTION_CHILD_UNSERIALIZED:
+ case H5AC_NOTIFY_ACTION_CHILD_SERIALIZED:
/* do nothing */
break;
@@ -2505,6 +2507,8 @@ H5HF__cache_dblock_notify(H5AC_notify_action_t action, void *_thing)
case H5AC_NOTIFY_ACTION_ENTRY_CLEANED:
case H5AC_NOTIFY_ACTION_CHILD_DIRTIED:
case H5AC_NOTIFY_ACTION_CHILD_CLEANED:
+ case H5AC_NOTIFY_ACTION_CHILD_UNSERIALIZED:
+ case H5AC_NOTIFY_ACTION_CHILD_SERIALIZED:
/* do nothing */
break;
diff --git a/src/H5HLcache.c b/src/H5HLcache.c
index b2ca839..3668d81 100644
--- a/src/H5HLcache.c
+++ b/src/H5HLcache.c
@@ -904,6 +904,8 @@ H5HL__cache_datablock_notify(H5C_notify_action_t action, void *_thing)
case H5AC_NOTIFY_ACTION_ENTRY_CLEANED:
case H5AC_NOTIFY_ACTION_CHILD_DIRTIED:
case H5AC_NOTIFY_ACTION_CHILD_CLEANED:
+ case H5AC_NOTIFY_ACTION_CHILD_UNSERIALIZED:
+ case H5AC_NOTIFY_ACTION_CHILD_SERIALIZED:
/* do nothing */
break;
diff --git a/src/H5Ocache.c b/src/H5Ocache.c
index 1067b8c..19b91f8 100644
--- a/src/H5Ocache.c
+++ b/src/H5Ocache.c
@@ -600,6 +600,8 @@ H5O__cache_notify(H5AC_notify_action_t action, void *_thing)
case H5AC_NOTIFY_ACTION_CHILD_DIRTIED:
case H5AC_NOTIFY_ACTION_CHILD_CLEANED:
+ case H5AC_NOTIFY_ACTION_CHILD_UNSERIALIZED:
+ case H5AC_NOTIFY_ACTION_CHILD_SERIALIZED:
/* do nothing */
break;
@@ -989,6 +991,8 @@ H5O__cache_chk_notify(H5AC_notify_action_t action, void *_thing)
case H5AC_NOTIFY_ACTION_CHILD_DIRTIED:
case H5AC_NOTIFY_ACTION_CHILD_CLEANED:
+ case H5AC_NOTIFY_ACTION_CHILD_UNSERIALIZED:
+ case H5AC_NOTIFY_ACTION_CHILD_SERIALIZED:
/* do nothing */
break;
diff --git a/src/H5err.txt b/src/H5err.txt
index 9531df9..44c5a93 100644
--- a/src/H5err.txt
+++ b/src/H5err.txt
@@ -157,6 +157,7 @@ MINOR, ATOM, H5E_NOIDS, Out of IDs for group
# Cache related errors
MINOR, CACHE, H5E_CANTFLUSH, Unable to flush data from cache
+MINOR, CACHE, H5E_CANTUNSERIALIZE, Unable to mark metadata as unserialized
MINOR, CACHE, H5E_CANTSERIALIZE, Unable to serialize data from cache
MINOR, CACHE, H5E_CANTTAG, Unable to tag metadata in the cache
MINOR, CACHE, H5E_CANTLOAD, Unable to load metadata into cache
@@ -170,6 +171,8 @@ MINOR, CACHE, H5E_CANTPIN, Unable to pin cache entry
MINOR, CACHE, H5E_CANTUNPIN, Unable to un-pin cache entry
MINOR, CACHE, H5E_CANTMARKDIRTY, Unable to mark a pinned entry as dirty
MINOR, CACHE, H5E_CANTMARKCLEAN, Unable to mark a pinned entry as clean
+MINOR, CACHE, H5E_CANTMARKUNSERIALIZED, Unable to mark an entry as unserialized
+MINOR, CACHE, H5E_CANTMARKSERIALIZED, Unable to mark an entry as serialized
MINOR, CACHE, H5E_CANTDIRTY, Unable to mark metadata as dirty
MINOR, CACHE, H5E_CANTCLEAN, Unable to mark metadata as clean
MINOR, CACHE, H5E_CANTEXPUNGE, Unable to expunge a metadata cache entry
diff --git a/test/cache.c b/test/cache.c
index 8f4935b..2209d8f 100644
--- a/test/cache.c
+++ b/test/cache.c
@@ -2886,7 +2886,7 @@ check_insert_entry(void)
result = H5C_get_entry_status(file_ptr, entry_ptr->addr, &entry_size,
&in_cache, &is_dirty, &is_protected,
- &is_pinned, NULL, NULL, NULL);
+ &is_pinned, NULL, NULL, NULL, NULL);
if(result < 0) {
@@ -12781,7 +12781,7 @@ check_get_entry_status(void)
*/
result = H5C_get_entry_status(file_ptr, entry_ptr->addr, &entry_size,
- &in_cache, &is_dirty, &is_protected, &is_pinned, NULL, NULL, NULL);
+ &in_cache, &is_dirty, &is_protected, &is_pinned, NULL, NULL, NULL, NULL);
if(result < 0) {
@@ -12809,7 +12809,7 @@ check_get_entry_status(void)
if(pass) {
result = H5C_get_entry_status(file_ptr, entry_ptr->addr, &entry_size,
- &in_cache, &is_dirty, &is_protected, &is_pinned, NULL, NULL, NULL);
+ &in_cache, &is_dirty, &is_protected, &is_pinned, NULL, NULL, NULL, NULL);
if(result < 0) {
@@ -12835,7 +12835,7 @@ check_get_entry_status(void)
if(pass) {
result = H5C_get_entry_status(file_ptr, entry_ptr->addr, &entry_size,
- &in_cache, &is_dirty, &is_protected, &is_pinned, NULL, NULL, NULL);
+ &in_cache, &is_dirty, &is_protected, &is_pinned, NULL, NULL, NULL, NULL);
if(result < 0) {
@@ -12861,7 +12861,7 @@ check_get_entry_status(void)
if(pass) {
result = H5C_get_entry_status(file_ptr, entry_ptr->addr, &entry_size,
- &in_cache, &is_dirty, &is_protected, &is_pinned, NULL, NULL, NULL);
+ &in_cache, &is_dirty, &is_protected, &is_pinned, NULL, NULL, NULL, NULL);
if(result < 0) {
@@ -12887,7 +12887,7 @@ check_get_entry_status(void)
if(pass) {
result = H5C_get_entry_status(file_ptr, entry_ptr->addr, &entry_size,
- &in_cache, &is_dirty, &is_protected, &is_pinned, NULL, NULL, NULL);
+ &in_cache, &is_dirty, &is_protected, &is_pinned, NULL, NULL, NULL, NULL);
if(result < 0) {
@@ -12913,7 +12913,7 @@ check_get_entry_status(void)
if(pass) {
result = H5C_get_entry_status(file_ptr, entry_ptr->addr, &entry_size,
- &in_cache, &is_dirty, &is_protected, &is_pinned, NULL, NULL, NULL);
+ &in_cache, &is_dirty, &is_protected, &is_pinned, NULL, NULL, NULL, NULL);
if(result < 0) {
@@ -13001,7 +13001,7 @@ check_expunge_entry(void)
result = H5C_get_entry_status(file_ptr, entry_ptr->addr, &entry_size,
&in_cache, &is_dirty, &is_protected,
- &is_pinned, NULL, NULL, NULL);
+ &is_pinned, NULL, NULL, NULL, NULL);
if(result < 0) {
@@ -13042,7 +13042,7 @@ check_expunge_entry(void)
if(pass) {
result = H5C_get_entry_status(file_ptr, entry_ptr->addr, &entry_size,
- &in_cache, &is_dirty, &is_protected, &is_pinned, NULL, NULL, NULL);
+ &in_cache, &is_dirty, &is_protected, &is_pinned, NULL, NULL, NULL, NULL);
if(result < 0) {
@@ -13085,7 +13085,7 @@ check_expunge_entry(void)
*/
result = H5C_get_entry_status(file_ptr, entry_ptr->addr, &entry_size,
- &in_cache, &is_dirty, &is_protected, &is_pinned, NULL, NULL, NULL);
+ &in_cache, &is_dirty, &is_protected, &is_pinned, NULL, NULL, NULL, NULL);
if(result < 0) {
@@ -13126,7 +13126,7 @@ check_expunge_entry(void)
result = H5C_get_entry_status(file_ptr, entry_ptr->addr, &entry_size,
&in_cache, &is_dirty, &is_protected,
- &is_pinned, NULL, NULL, NULL);
+ &is_pinned, NULL, NULL, NULL, NULL);
if(result < 0) {
@@ -13168,7 +13168,7 @@ check_expunge_entry(void)
result = H5C_get_entry_status(file_ptr, entry_ptr->addr, &entry_size,
&in_cache, &is_dirty, &is_protected,
- &is_pinned, NULL, NULL, NULL);
+ &is_pinned, NULL, NULL, NULL, NULL);
if(result < 0) {
@@ -13212,7 +13212,7 @@ check_expunge_entry(void)
result = H5C_get_entry_status(file_ptr, entry_ptr->addr, &entry_size,
&in_cache, &is_dirty, &is_protected,
- &is_pinned, NULL, NULL, NULL);
+ &is_pinned, NULL, NULL, NULL, NULL);
if(result < 0) {
@@ -14199,7 +14199,7 @@ check_resize_entry(void)
result = H5C_get_entry_status(file_ptr, entry_ptr->addr,
&reported_entry_size, &in_cache,
&is_dirty, &is_protected, &is_pinned,
- NULL, NULL, NULL);
+ NULL, NULL, NULL, NULL);
if(result < 0) {
@@ -14277,7 +14277,7 @@ check_resize_entry(void)
result = H5C_get_entry_status(file_ptr, entry_ptr->addr,
&reported_entry_size, &in_cache,
&is_dirty, &is_protected, &is_pinned,
- NULL, NULL, NULL);
+ NULL, NULL, NULL, NULL);
if(result < 0) {
@@ -14362,7 +14362,7 @@ check_resize_entry(void)
result = H5C_get_entry_status(file_ptr, entry_ptr->addr,
&reported_entry_size, &in_cache,
&is_dirty, &is_protected, &is_pinned,
- NULL, NULL, NULL);
+ NULL, NULL, NULL, NULL);
if(result < 0) {
@@ -14430,7 +14430,7 @@ check_resize_entry(void)
result = H5C_get_entry_status(file_ptr, entry_ptr->addr,
&reported_entry_size, &in_cache,
&is_dirty, &is_protected, &is_pinned,
- NULL, NULL, NULL);
+ NULL, NULL, NULL, NULL);
if(result < 0) {
@@ -14490,7 +14490,7 @@ check_resize_entry(void)
result = H5C_get_entry_status(file_ptr, entry_ptr->addr,
&reported_entry_size, &in_cache,
&is_dirty, &is_protected, &is_pinned,
- NULL, NULL, NULL);
+ NULL, NULL, NULL, NULL);
if(result < 0) {
@@ -14530,7 +14530,7 @@ check_resize_entry(void)
result = H5C_get_entry_status(file_ptr, entry_ptr->addr, &entry_size,
&in_cache, &is_dirty, &is_protected,
- &is_pinned, NULL, NULL, NULL);
+ &is_pinned, NULL, NULL, NULL, NULL);
if(result < 0) {
@@ -14644,7 +14644,7 @@ check_resize_entry(void)
result = H5C_get_entry_status(file_ptr, entry_ptr->addr,
&reported_entry_size, &in_cache,
&is_dirty, &is_protected, &is_pinned,
- NULL, NULL, NULL);
+ NULL, NULL, NULL, NULL);
if(result < 0) {
@@ -14724,7 +14724,7 @@ check_resize_entry(void)
result = H5C_get_entry_status(file_ptr, entry_ptr->addr,
&reported_entry_size, &in_cache,
&is_dirty, &is_protected, &is_pinned,
- NULL, NULL, NULL);
+ NULL, NULL, NULL, NULL);
if(result < 0) {
@@ -14809,7 +14809,7 @@ check_resize_entry(void)
result = H5C_get_entry_status(file_ptr, entry_ptr->addr,
&reported_entry_size, &in_cache,
&is_dirty, &is_protected, &is_pinned,
- NULL, NULL, NULL);
+ NULL, NULL, NULL, NULL);
if(result < 0) {
@@ -14879,7 +14879,7 @@ check_resize_entry(void)
result = H5C_get_entry_status(file_ptr, entry_ptr->addr,
&reported_entry_size, &in_cache,
&is_dirty, &is_protected, &is_pinned,
- NULL, NULL, NULL);
+ NULL, NULL, NULL, NULL);
if(result < 0) {
@@ -14939,7 +14939,7 @@ check_resize_entry(void)
result = H5C_get_entry_status(file_ptr, entry_ptr->addr,
&reported_entry_size, &in_cache,
&is_dirty, &is_protected, &is_pinned,
- NULL, NULL, NULL);
+ NULL, NULL, NULL, NULL);
if(result < 0) {
@@ -14979,7 +14979,7 @@ check_resize_entry(void)
result = H5C_get_entry_status(file_ptr, entry_ptr->addr, &entry_size,
&in_cache, &is_dirty, &is_protected,
- &is_pinned, NULL, NULL, NULL);
+ &is_pinned, NULL, NULL, NULL, NULL);
if(result < 0) {
@@ -15275,7 +15275,7 @@ check_evictions_enabled(void)
result = H5C_get_entry_status(file_ptr, entry_ptr->addr,
NULL, &in_cache, NULL, NULL, NULL,
- NULL, NULL, NULL);
+ NULL, NULL, NULL, NULL);
if(result < 0) {
@@ -15341,7 +15341,7 @@ check_evictions_enabled(void)
entry_ptr = &(base_addr[1]);
result = H5C_get_entry_status(file_ptr, entry_ptr->addr,
- NULL, &in_cache, NULL, NULL, NULL, NULL, NULL, NULL);
+ NULL, &in_cache, NULL, NULL, NULL, NULL, NULL, NULL, NULL);
if(result < 0) {
@@ -15560,7 +15560,7 @@ check_evictions_enabled(void)
entry_ptr = &(base_addr[2]);
result = H5C_get_entry_status(file_ptr, entry_ptr->addr,
- NULL, &in_cache, NULL, NULL, NULL, NULL, NULL, NULL);
+ NULL, &in_cache, NULL, NULL, NULL, NULL, NULL, NULL, NULL);
if(result < 0) {
@@ -15595,7 +15595,7 @@ check_evictions_enabled(void)
entry_ptr = &(base_addr[3]);
result = H5C_get_entry_status(file_ptr, entry_ptr->addr,
- NULL, &in_cache, NULL, NULL, NULL, NULL, NULL, NULL);
+ NULL, &in_cache, NULL, NULL, NULL, NULL, NULL, NULL, NULL);
if(result < 0) {
@@ -15729,7 +15729,7 @@ check_evictions_enabled(void)
entry_ptr = &(base_addr[4]);
result = H5C_get_entry_status(file_ptr, entry_ptr->addr,
- NULL, &in_cache, NULL, NULL, NULL, NULL, NULL, NULL);
+ NULL, &in_cache, NULL, NULL, NULL, NULL, NULL, NULL, NULL);
if(result < 0) {
@@ -28877,7 +28877,7 @@ check_flush_deps(void)
/* Check the parent's entry status */
entry_ptr = &(base_addr[1]);
if(H5C_get_entry_status(file_ptr, entry_ptr->addr, NULL, &in_cache,
- NULL, NULL, NULL, NULL, &is_flush_dep_parent, &is_flush_dep_child) < 0)
+ NULL, NULL, NULL, NULL, &is_flush_dep_parent, &is_flush_dep_child, NULL) < 0)
CACHE_ERROR("H5C_get_entry_status() failed")
if(!in_cache || is_flush_dep_parent || is_flush_dep_child)
CACHE_ERROR("invalid entry status")
@@ -28885,7 +28885,7 @@ check_flush_deps(void)
/* Check the child's entry status */
entry_ptr = &(base_addr[0]);
if(H5C_get_entry_status(file_ptr, entry_ptr->addr, NULL, &in_cache,
- NULL, NULL, NULL, NULL, &is_flush_dep_parent, &is_flush_dep_child) < 0)
+ NULL, NULL, NULL, NULL, &is_flush_dep_parent, &is_flush_dep_child, NULL) < 0)
CACHE_ERROR("H5C_get_entry_status() failed")
if(!in_cache || is_flush_dep_parent || is_flush_dep_child)
CACHE_ERROR("invalid entry status")
@@ -28896,7 +28896,7 @@ check_flush_deps(void)
/* Check the parent's entry status */
entry_ptr = &(base_addr[1]);
if(H5C_get_entry_status(file_ptr, entry_ptr->addr, NULL, &in_cache,
- NULL, NULL, NULL, NULL, &is_flush_dep_parent, &is_flush_dep_child) < 0)
+ NULL, NULL, NULL, NULL, &is_flush_dep_parent, &is_flush_dep_child, NULL) < 0)
CACHE_ERROR("H5C_get_entry_status() failed")
if(!in_cache || !is_flush_dep_parent || is_flush_dep_child)
CACHE_ERROR("invalid entry status")
@@ -28904,7 +28904,7 @@ check_flush_deps(void)
/* Check the child's entry status */
entry_ptr = &(base_addr[0]);
if(H5C_get_entry_status(file_ptr, entry_ptr->addr, NULL, &in_cache,
- NULL, NULL, NULL, NULL, &is_flush_dep_parent, &is_flush_dep_child) < 0)
+ NULL, NULL, NULL, NULL, &is_flush_dep_parent, &is_flush_dep_child, NULL) < 0)
CACHE_ERROR("H5C_get_entry_status() failed")
if(!in_cache || is_flush_dep_parent || !is_flush_dep_child)
CACHE_ERROR("invalid entry status")
@@ -35867,7 +35867,7 @@ check_stats__smoke_check_1(H5F_t * file_ptr)
int i;
herr_t result;
- if(pass)
+ if(pass) {
if(cache_ptr == NULL) {
pass = FALSE;
@@ -35893,6 +35893,7 @@ check_stats__smoke_check_1(H5F_t * file_ptr)
*/
cache_ptr->min_clean_size = 0;
} /* end else */
+ } /* end if */
if(pass)
/* first fill the cache with monster entryies via insertion */
diff --git a/test/cache_common.c b/test/cache_common.c
index daf9777..5151d65 100644
--- a/test/cache_common.c
+++ b/test/cache_common.c
@@ -1565,6 +1565,8 @@ notify(H5C_notify_action_t action, void *thing, int32_t entry_type)
case H5C_NOTIFY_ACTION_ENTRY_CLEANED:
case H5C_NOTIFY_ACTION_CHILD_DIRTIED:
case H5C_NOTIFY_ACTION_CHILD_CLEANED:
+ case H5C_NOTIFY_ACTION_CHILD_UNSERIALIZED:
+ case H5C_NOTIFY_ACTION_CHILD_SERIALIZED:
/* do nothing */
break;
diff --git a/testpar/t_cache.c b/testpar/t_cache.c
index 94a6e7c..8753325 100644
--- a/testpar/t_cache.c
+++ b/testpar/t_cache.c
@@ -2927,6 +2927,30 @@ datum_notify(H5C_notify_action_t action, void *thing)
/* do nothing */
break;
+ case H5AC_NOTIFY_ACTION_CHILD_UNSERIALIZED:
+ if ( callbacks_verbose ) {
+
+ HDfprintf(stdout,
+ "%d: notify() action = child entry unserialized, idx = %d, addr = %ld.\n",
+ world_mpi_rank, idx, (long)entry_ptr->header.addr);
+ fflush(stdout);
+ }
+
+ /* do nothing */
+ break;
+
+ case H5AC_NOTIFY_ACTION_CHILD_SERIALIZED:
+ if ( callbacks_verbose ) {
+
+ HDfprintf(stdout,
+ "%d: notify() action = child entry serialized, idx = %d, addr = %ld.\n",
+ world_mpi_rank, idx, (long)entry_ptr->header.addr);
+ fflush(stdout);
+ }
+
+ /* do nothing */
+ break;
+
default:
nerrors++;
ret_value = FAIL;
@@ -3054,7 +3078,7 @@ expunge_entry(H5F_t * file_ptr,
HDassert( ! ((entry_ptr->header).is_dirty) );
result = H5C_get_entry_status(file_ptr, entry_ptr->base_addr,
- NULL, &in_cache, NULL, NULL, NULL, NULL, NULL, NULL);
+ NULL, &in_cache, NULL, NULL, NULL, NULL, NULL, NULL, NULL);
if ( result < 0 ) {