Lines Matching refs:entry

76 	struct mb_cache_entry *entry, *dup;  in mb_cache_entry_create()  local
87 entry = kmem_cache_alloc(mb_entry_cache, mask); in mb_cache_entry_create()
88 if (!entry) in mb_cache_entry_create()
91 INIT_LIST_HEAD(&entry->e_list); in mb_cache_entry_create()
93 atomic_set(&entry->e_refcnt, 1); in mb_cache_entry_create()
94 entry->e_key = key; in mb_cache_entry_create()
95 entry->e_value = value; in mb_cache_entry_create()
96 entry->e_reusable = reusable; in mb_cache_entry_create()
97 entry->e_referenced = 0; in mb_cache_entry_create()
103 kmem_cache_free(mb_entry_cache, entry); in mb_cache_entry_create()
107 hlist_bl_add_head(&entry->e_hash_list, head); in mb_cache_entry_create()
111 list_add_tail(&entry->e_list, &cache->c_list); in mb_cache_entry_create()
113 atomic_inc(&entry->e_refcnt); in mb_cache_entry_create()
121 void __mb_cache_entry_free(struct mb_cache_entry *entry) in __mb_cache_entry_free() argument
123 kmem_cache_free(mb_entry_cache, entry); in __mb_cache_entry_free()
128 struct mb_cache_entry *entry, in __entry_find() argument
131 struct mb_cache_entry *old_entry = entry; in __entry_find()
137 if (entry && !hlist_bl_unhashed(&entry->e_hash_list)) in __entry_find()
138 node = entry->e_hash_list.next; in __entry_find()
142 entry = hlist_bl_entry(node, struct mb_cache_entry, in __entry_find()
144 if (entry->e_key == key && entry->e_reusable) { in __entry_find()
145 atomic_inc(&entry->e_refcnt); in __entry_find()
150 entry = NULL; in __entry_find()
156 return entry; in __entry_find()
185 struct mb_cache_entry *entry) in mb_cache_entry_find_next() argument
187 return __entry_find(cache, entry, entry->e_key); in mb_cache_entry_find_next()
202 struct mb_cache_entry *entry; in mb_cache_entry_get() local
206 hlist_bl_for_each_entry(entry, node, head, e_hash_list) { in mb_cache_entry_get()
207 if (entry->e_key == key && entry->e_value == value) { in mb_cache_entry_get()
208 atomic_inc(&entry->e_refcnt); in mb_cache_entry_get()
212 entry = NULL; in mb_cache_entry_get()
215 return entry; in mb_cache_entry_get()
230 struct mb_cache_entry *entry; in mb_cache_entry_delete() local
234 hlist_bl_for_each_entry(entry, node, head, e_hash_list) { in mb_cache_entry_delete()
235 if (entry->e_key == key && entry->e_value == value) { in mb_cache_entry_delete()
237 hlist_bl_del_init(&entry->e_hash_list); in mb_cache_entry_delete()
240 if (!list_empty(&entry->e_list)) { in mb_cache_entry_delete()
241 list_del_init(&entry->e_list); in mb_cache_entry_delete()
245 atomic_dec(&entry->e_refcnt); in mb_cache_entry_delete()
248 mb_cache_entry_put(cache, entry); in mb_cache_entry_delete()
263 struct mb_cache_entry *entry) in mb_cache_entry_touch() argument
265 entry->e_referenced = 1; in mb_cache_entry_touch()
282 struct mb_cache_entry *entry; in mb_cache_shrink() local
288 entry = list_first_entry(&cache->c_list, in mb_cache_shrink()
290 if (entry->e_referenced) { in mb_cache_shrink()
291 entry->e_referenced = 0; in mb_cache_shrink()
292 list_move_tail(&entry->e_list, &cache->c_list); in mb_cache_shrink()
295 list_del_init(&entry->e_list); in mb_cache_shrink()
302 head = mb_cache_entry_head(cache, entry->e_key); in mb_cache_shrink()
304 if (!hlist_bl_unhashed(&entry->e_hash_list)) { in mb_cache_shrink()
305 hlist_bl_del_init(&entry->e_hash_list); in mb_cache_shrink()
306 atomic_dec(&entry->e_refcnt); in mb_cache_shrink()
309 if (mb_cache_entry_put(cache, entry)) in mb_cache_shrink()
393 struct mb_cache_entry *entry, *next; in mb_cache_destroy() local
401 list_for_each_entry_safe(entry, next, &cache->c_list, e_list) { in mb_cache_destroy()
402 if (!hlist_bl_unhashed(&entry->e_hash_list)) { in mb_cache_destroy()
403 hlist_bl_del_init(&entry->e_hash_list); in mb_cache_destroy()
404 atomic_dec(&entry->e_refcnt); in mb_cache_destroy()
407 list_del(&entry->e_list); in mb_cache_destroy()
408 WARN_ON(atomic_read(&entry->e_refcnt) != 1); in mb_cache_destroy()
409 mb_cache_entry_put(cache, entry); in mb_cache_destroy()