fellow_cache: Fix fellow_cache_obj_slim reference count for waiting

parent 062d80b1
......@@ -3522,14 +3522,14 @@ fellow_cache_obj_slim(const struct fellow_cache *fc,
// NULL: can not be on lru
(void) fellow_cache_seg_ref_locked(NULL, fcs);
ref = 1;
ref++;
fellow_cache_seg_wait_locked(fcs);
AZ(pthread_mutex_lock(&lru->lru_mtx));
}
if (fcs->state == FCS_INCORE &&
ref == 1 && fcs->refcnt == ref) {
/* we hold the only ref, can not be on LRU,
ref > 0 && fcs->refcnt == ref) {
/* we own all refs, can not be on LRU,
* so no need to go through full deref
*/
fcs->refcnt = 0;
......@@ -3547,7 +3547,7 @@ fellow_cache_obj_slim(const struct fellow_cache *fc,
AZ(fcs->fcs_onlru);
if (ref)
(void) fellow_cache_seg_deref_locked(NULL, fcs);
(void) fellow_cache_seg_deref_n_locked(NULL, fcs, ref);
}
AZ(pthread_mutex_unlock(&lru->lru_mtx));
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment