Lines Matching refs:cache

62  * create fld cache.
67 struct fld_cache *cache;
72 OBD_ALLOC_PTR(cache);
73 if (cache == NULL)
76 INIT_LIST_HEAD(&cache->fci_entries_head);
77 INIT_LIST_HEAD(&cache->fci_lru);
79 cache->fci_cache_count = 0;
80 rwlock_init(&cache->fci_lock);
82 strlcpy(cache->fci_name, name,
83 sizeof(cache->fci_name));
85 cache->fci_cache_size = cache_size;
86 cache->fci_threshold = cache_threshold;
88 /* Init fld cache info. */
89 memset(&cache->fci_stat, 0, sizeof(cache->fci_stat));
91 CDEBUG(D_INFO, "%s: FLD cache - Size: %d, Threshold: %d\n",
92 cache->fci_name, cache_size, cache_threshold);
94 return cache;
98 * destroy fld cache.
100 void fld_cache_fini(struct fld_cache *cache)
104 LASSERT(cache != NULL);
105 fld_cache_flush(cache);
107 if (cache->fci_stat.fst_count > 0) {
108 pct = cache->fci_stat.fst_cache * 100;
109 do_div(pct, cache->fci_stat.fst_count);
114 CDEBUG(D_INFO, "FLD cache statistics (%s):\n", cache->fci_name);
115 CDEBUG(D_INFO, " Total reqs: %llu\n", cache->fci_stat.fst_count);
116 CDEBUG(D_INFO, " Cache reqs: %llu\n", cache->fci_stat.fst_cache);
119 OBD_FREE_PTR(cache);
125 void fld_cache_entry_delete(struct fld_cache *cache,
130 cache->fci_cache_count--;
137 static void fld_fix_new_list(struct fld_cache *cache)
143 struct list_head *head = &cache->fci_entries_head;
167 fld_cache_entry_delete(cache, f_curr);
177 fld_cache_entry_delete(cache, f_curr);
181 fld_cache_entry_delete(cache, f_curr);
194 fld_cache_entry_delete(cache, f_curr);
199 * add node to fld cache
201 static inline void fld_cache_entry_add(struct fld_cache *cache,
206 list_add(&f_new->fce_lru, &cache->fci_lru);
208 cache->fci_cache_count++;
209 fld_fix_new_list(cache);
213 * Check if cache needs to be shrunk. If so - do it.
214 * Remove one entry in list and so on until cache is shrunk enough.
216 static int fld_cache_shrink(struct fld_cache *cache)
222 LASSERT(cache != NULL);
224 if (cache->fci_cache_count < cache->fci_cache_size)
227 curr = cache->fci_lru.prev;
229 while (cache->fci_cache_count + cache->fci_threshold >
230 cache->fci_cache_size && curr != &cache->fci_lru) {
234 fld_cache_entry_delete(cache, flde);
238 CDEBUG(D_INFO, "%s: FLD cache - Shrunk by %d entries\n",
239 cache->fci_name, num);
245 * kill all fld cache entries.
247 void fld_cache_flush(struct fld_cache *cache)
249 write_lock(&cache->fci_lock);
250 cache->fci_cache_size = 0;
251 fld_cache_shrink(cache);
252 write_unlock(&cache->fci_lock);
260 void fld_cache_punch_hole(struct fld_cache *cache,
290 fld_cache_entry_add(cache, f_new, &f_curr->fce_list);
291 fld_cache_entry_add(cache, fldt, &f_new->fce_list);
297 * handle range overlap in fld cache.
299 static void fld_cache_overlap_handle(struct fld_cache *cache,
319 fld_fix_new_list(cache);
324 * e.g. whole range migrated. update fld cache entry */
328 fld_fix_new_list(cache);
334 fld_cache_punch_hole(cache, f_curr, f_new);
344 fld_cache_entry_add(cache, f_new, f_curr->fce_list.prev);
354 fld_cache_entry_add(cache, f_new, &f_curr->fce_list);
376 * Insert FLD entry in FLD cache.
381 int fld_cache_insert_nolock(struct fld_cache *cache,
398 if (!cache->fci_no_shrink)
399 fld_cache_shrink(cache);
401 head = &cache->fci_entries_head;
414 fld_cache_overlap_handle(cache, f_curr, f_new);
423 /* Add new entry to cache and lru list. */
424 fld_cache_entry_add(cache, f_new, prev);
429 int fld_cache_insert(struct fld_cache *cache,
439 write_lock(&cache->fci_lock);
440 rc = fld_cache_insert_nolock(cache, flde);
441 write_unlock(&cache->fci_lock);
448 void fld_cache_delete_nolock(struct fld_cache *cache,
455 head = &cache->fci_entries_head;
461 fld_cache_entry_delete(cache, flde);
468 * Delete FLD entry in FLD cache.
471 void fld_cache_delete(struct fld_cache *cache,
474 write_lock(&cache->fci_lock);
475 fld_cache_delete_nolock(cache, range);
476 write_unlock(&cache->fci_lock);
480 *fld_cache_entry_lookup_nolock(struct fld_cache *cache,
487 head = &cache->fci_entries_head;
501 * lookup \a seq sequence for range in fld cache.
504 *fld_cache_entry_lookup(struct fld_cache *cache, struct lu_seq_range *range)
508 read_lock(&cache->fci_lock);
509 got = fld_cache_entry_lookup_nolock(cache, range);
510 read_unlock(&cache->fci_lock);
515 * lookup \a seq sequence for range in fld cache.
517 int fld_cache_lookup(struct fld_cache *cache,
524 read_lock(&cache->fci_lock);
525 head = &cache->fci_entries_head;
527 cache->fci_stat.fst_count++;
539 cache->fci_stat.fst_cache++;
540 read_unlock(&cache->fci_lock);
544 read_unlock(&cache->fci_lock);