*/
static int fld_cache_shrink(struct fld_cache *cache)
{
- struct fld_cache_entry *flde;
- struct list_head *curr;
- int num = 0;
- ENTRY;
+ int num = 0;
- LASSERT(cache != NULL);
+ ENTRY;
- if (cache->fci_cache_count < cache->fci_cache_size)
- RETURN(0);
+ LASSERT(cache != NULL);
- curr = cache->fci_lru.prev;
+ if (cache->fci_cache_count < cache->fci_cache_size)
+ RETURN(0);
- while (cache->fci_cache_count + cache->fci_threshold >
- cache->fci_cache_size && curr != &cache->fci_lru) {
+ while (cache->fci_cache_count + cache->fci_threshold >
+ cache->fci_cache_size &&
+ !list_empty(&cache->fci_lru)) {
+ struct fld_cache_entry *flde =
+ list_last_entry(&cache->fci_lru, struct fld_cache_entry,
+ fce_lru);
- flde = list_entry(curr, struct fld_cache_entry, fce_lru);
- curr = curr->prev;
- fld_cache_entry_delete(cache, flde);
- num++;
- }
+ fld_cache_entry_delete(cache, flde);
+ num++;
+ }
- CDEBUG(D_INFO, "%s: FLD cache - Shrunk by "
- "%d entries\n", cache->fci_name, num);
+ CDEBUG(D_INFO, "%s: FLD cache - Shrunk by "
+ "%d entries\n", cache->fci_name, num);
- RETURN(0);
+ RETURN(0);
}
/**