I am trying to understand the assertion failure. Here it is again:
Assertion failed: (!entry->fh_hk.inavl), function _mdcache_lru_unref, file
mdcache_lru.c, line 1971.
I think mdcache_entry_t is always allocated by alloc_cache_entry, and I think that zero
initializes every field.
inavl is set to true in cih_set_latched, which happens in the /* We won the race. */ /*
nentry not reachable yet; no need to lock */ case inside mdcache_new_entry. I think that
means mdcache_find_keyed_reason returned ERR_FSAL_NOENT, then mdcache_alloc_handle
allocates the entry, then cih_get_by_key_latch returns null.
But something is wrong?? mdcache_lru_get does make a chain of calls that ends up in
cih_remove_checked, which sets inavl=false, but only if entry->fh_hk.inavl &&
node !!!!!! Maybe node happens to be null?
Maybe in this execution path we happened to be using /** New style LRU link */ (see
mdcache_fsal_obj_handle).