Lines Matching refs:cache

26 	struct fscache_cache *cache;  in fscache_alloc_cache()  local
28 cache = kzalloc(sizeof(*cache), GFP_KERNEL); in fscache_alloc_cache()
29 if (cache) { in fscache_alloc_cache()
31 cache->name = kstrdup(name, GFP_KERNEL); in fscache_alloc_cache()
32 if (!cache->name) { in fscache_alloc_cache()
33 kfree(cache); in fscache_alloc_cache()
37 refcount_set(&cache->ref, 1); in fscache_alloc_cache()
38 INIT_LIST_HEAD(&cache->cache_link); in fscache_alloc_cache()
39 cache->debug_id = atomic_inc_return(&fscache_cache_debug_id); in fscache_alloc_cache()
41 return cache; in fscache_alloc_cache()
44 static bool fscache_get_cache_maybe(struct fscache_cache *cache, in fscache_get_cache_maybe() argument
50 success = __refcount_inc_not_zero(&cache->ref, &ref); in fscache_get_cache_maybe()
52 trace_fscache_cache(cache->debug_id, ref + 1, where); in fscache_get_cache_maybe()
61 struct fscache_cache *candidate, *cache, *unnamed = NULL; in fscache_lookup_cache() local
66 list_for_each_entry(cache, &fscache_caches, cache_link) { in fscache_lookup_cache()
67 if (cache->name && name && strcmp(cache->name, name) == 0 && in fscache_lookup_cache()
68 fscache_get_cache_maybe(cache, fscache_cache_get_acquire)) in fscache_lookup_cache()
70 if (!cache->name && !name && in fscache_lookup_cache()
71 fscache_get_cache_maybe(cache, fscache_cache_get_acquire)) in fscache_lookup_cache()
76 list_for_each_entry(cache, &fscache_caches, cache_link) { in fscache_lookup_cache()
77 if (cache->name && in fscache_lookup_cache()
78 fscache_get_cache_maybe(cache, fscache_cache_get_acquire)) in fscache_lookup_cache()
93 list_for_each_entry(cache, &fscache_caches, cache_link) { in fscache_lookup_cache()
94 if (cache->name && name && strcmp(cache->name, name) == 0 && in fscache_lookup_cache()
95 fscache_get_cache_maybe(cache, fscache_cache_get_acquire)) in fscache_lookup_cache()
97 if (!cache->name) { in fscache_lookup_cache()
98 unnamed = cache; in fscache_lookup_cache()
100 fscache_get_cache_maybe(cache, fscache_cache_get_acquire)) in fscache_lookup_cache()
110 list_for_each_entry(cache, &fscache_caches, cache_link) { in fscache_lookup_cache()
111 if (cache->name && in fscache_lookup_cache()
112 fscache_get_cache_maybe(cache, fscache_cache_get_acquire)) in fscache_lookup_cache()
126 return cache; in fscache_lookup_cache()
128 cache = unnamed; in fscache_lookup_cache()
129 cache->name = candidate->name; in fscache_lookup_cache()
135 return cache; in fscache_lookup_cache()
151 struct fscache_cache *cache; in fscache_acquire_cache() local
154 cache = fscache_lookup_cache(name, true); in fscache_acquire_cache()
155 if (IS_ERR(cache)) in fscache_acquire_cache()
156 return cache; in fscache_acquire_cache()
158 if (!fscache_set_cache_state_maybe(cache, in fscache_acquire_cache()
162 fscache_put_cache(cache, fscache_cache_put_cache); in fscache_acquire_cache()
166 return cache; in fscache_acquire_cache()
179 void fscache_put_cache(struct fscache_cache *cache, in fscache_put_cache() argument
182 unsigned int debug_id = cache->debug_id; in fscache_put_cache()
186 if (IS_ERR_OR_NULL(cache)) in fscache_put_cache()
189 zero = __refcount_dec_and_test(&cache->ref, &ref); in fscache_put_cache()
194 list_del_init(&cache->cache_link); in fscache_put_cache()
196 kfree(cache->name); in fscache_put_cache()
197 kfree(cache); in fscache_put_cache()
208 void fscache_relinquish_cache(struct fscache_cache *cache) in fscache_relinquish_cache() argument
211 (cache->state == FSCACHE_CACHE_IS_PREPARING) ? in fscache_relinquish_cache()
215 cache->ops = NULL; in fscache_relinquish_cache()
216 cache->cache_priv = NULL; in fscache_relinquish_cache()
217 fscache_set_cache_state(cache, FSCACHE_CACHE_IS_NOT_PRESENT); in fscache_relinquish_cache()
218 fscache_put_cache(cache, where); in fscache_relinquish_cache()
233 int fscache_add_cache(struct fscache_cache *cache, in fscache_add_cache() argument
239 _enter("{%s,%s}", ops->name, cache->name); in fscache_add_cache()
241 BUG_ON(fscache_cache_state(cache) != FSCACHE_CACHE_IS_PREPARING); in fscache_add_cache()
247 n_accesses = atomic_inc_return(&cache->n_accesses); in fscache_add_cache()
248 trace_fscache_access_cache(cache->debug_id, refcount_read(&cache->ref), in fscache_add_cache()
253 cache->ops = ops; in fscache_add_cache()
254 cache->cache_priv = cache_priv; in fscache_add_cache()
255 fscache_set_cache_state(cache, FSCACHE_CACHE_IS_ACTIVE); in fscache_add_cache()
258 pr_notice("Cache \"%s\" added (type %s)\n", cache->name, ops->name); in fscache_add_cache()
259 _leave(" = 0 [%s]", cache->name); in fscache_add_cache()
288 bool fscache_begin_cache_access(struct fscache_cache *cache, enum fscache_access_trace why) in fscache_begin_cache_access() argument
292 if (!fscache_cache_is_live(cache)) in fscache_begin_cache_access()
295 n_accesses = atomic_inc_return(&cache->n_accesses); in fscache_begin_cache_access()
297 trace_fscache_access_cache(cache->debug_id, refcount_read(&cache->ref), in fscache_begin_cache_access()
299 if (!fscache_cache_is_live(cache)) { in fscache_begin_cache_access()
300 fscache_end_cache_access(cache, fscache_access_unlive); in fscache_begin_cache_access()
314 void fscache_end_cache_access(struct fscache_cache *cache, enum fscache_access_trace why) in fscache_end_cache_access() argument
319 n_accesses = atomic_dec_return(&cache->n_accesses); in fscache_end_cache_access()
320 trace_fscache_access_cache(cache->debug_id, refcount_read(&cache->ref), in fscache_end_cache_access()
323 wake_up_var(&cache->n_accesses); in fscache_end_cache_access()
336 void fscache_io_error(struct fscache_cache *cache) in fscache_io_error() argument
338 if (fscache_set_cache_state_maybe(cache, in fscache_io_error()
342 cache->name); in fscache_io_error()
354 void fscache_withdraw_cache(struct fscache_cache *cache) in fscache_withdraw_cache() argument
359 cache->name, atomic_read(&cache->object_count)); in fscache_withdraw_cache()
361 fscache_set_cache_state(cache, FSCACHE_CACHE_IS_WITHDRAWN); in fscache_withdraw_cache()
364 n_accesses = atomic_dec_return(&cache->n_accesses); in fscache_withdraw_cache()
365 trace_fscache_access_cache(cache->debug_id, refcount_read(&cache->ref), in fscache_withdraw_cache()
368 wait_var_event(&cache->n_accesses, in fscache_withdraw_cache()
369 atomic_read(&cache->n_accesses) == 0); in fscache_withdraw_cache()
381 struct fscache_cache *cache; in fscache_caches_seq_show() local
391 cache = list_entry(v, struct fscache_cache, cache_link); in fscache_caches_seq_show()
394 cache->debug_id, in fscache_caches_seq_show()
395 refcount_read(&cache->ref), in fscache_caches_seq_show()
396 atomic_read(&cache->n_volumes), in fscache_caches_seq_show()
397 atomic_read(&cache->object_count), in fscache_caches_seq_show()
398 atomic_read(&cache->n_accesses), in fscache_caches_seq_show()
399 fscache_cache_states[cache->state], in fscache_caches_seq_show()
400 cache->name ?: "-"); in fscache_caches_seq_show()