fellow_cache: Fix fellow_cache_obj_slim reference count for waiting

parent 7c4542ae
...@@ -3500,14 +3500,14 @@ fellow_cache_obj_slim(const struct fellow_cache *fc, ...@@ -3500,14 +3500,14 @@ fellow_cache_obj_slim(const struct fellow_cache *fc,
// NULL: can not be on lru // NULL: can not be on lru
(void) fellow_cache_seg_ref_locked(NULL, fcs); (void) fellow_cache_seg_ref_locked(NULL, fcs);
ref = 1; ref++;
fellow_cache_seg_wait_locked(fcs); fellow_cache_seg_wait_locked(fcs);
AZ(pthread_mutex_lock(&lru->lru_mtx)); AZ(pthread_mutex_lock(&lru->lru_mtx));
} }
if (fcs->state == FCS_INCORE && if (fcs->state == FCS_INCORE &&
ref == 1 && fcs->refcnt == ref) { ref > 0 && fcs->refcnt == ref) {
/* we hold the only ref, can not be on LRU, /* we own all refs, can not be on LRU,
* so no need to go through full deref * so no need to go through full deref
*/ */
fcs->refcnt = 0; fcs->refcnt = 0;
...@@ -3525,7 +3525,7 @@ fellow_cache_obj_slim(const struct fellow_cache *fc, ...@@ -3525,7 +3525,7 @@ fellow_cache_obj_slim(const struct fellow_cache *fc,
AZ(fcs->fcs_onlru); AZ(fcs->fcs_onlru);
if (ref) 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)); 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