Lines Matching refs:entry

234 	struct zswap_entry *entry;  in zswap_entry_cache_alloc()  local
235 entry = kmem_cache_alloc(zswap_entry_cache, gfp); in zswap_entry_cache_alloc()
236 if (!entry) in zswap_entry_cache_alloc()
238 entry->refcount = 1; in zswap_entry_cache_alloc()
239 RB_CLEAR_NODE(&entry->rbnode); in zswap_entry_cache_alloc()
240 return entry; in zswap_entry_cache_alloc()
243 static void zswap_entry_cache_free(struct zswap_entry *entry) in zswap_entry_cache_free() argument
245 kmem_cache_free(zswap_entry_cache, entry); in zswap_entry_cache_free()
254 struct zswap_entry *entry; in zswap_rb_search() local
257 entry = rb_entry(node, struct zswap_entry, rbnode); in zswap_rb_search()
258 if (entry->offset > offset) in zswap_rb_search()
260 else if (entry->offset < offset) in zswap_rb_search()
263 return entry; in zswap_rb_search()
272 static int zswap_rb_insert(struct rb_root *root, struct zswap_entry *entry, in zswap_rb_insert() argument
281 if (myentry->offset > entry->offset) in zswap_rb_insert()
283 else if (myentry->offset < entry->offset) in zswap_rb_insert()
290 rb_link_node(&entry->rbnode, parent, link); in zswap_rb_insert()
291 rb_insert_color(&entry->rbnode, root); in zswap_rb_insert()
295 static void zswap_rb_erase(struct rb_root *root, struct zswap_entry *entry) in zswap_rb_erase() argument
297 if (!RB_EMPTY_NODE(&entry->rbnode)) { in zswap_rb_erase()
298 rb_erase(&entry->rbnode, root); in zswap_rb_erase()
299 RB_CLEAR_NODE(&entry->rbnode); in zswap_rb_erase()
307 static void zswap_free_entry(struct zswap_entry *entry) in zswap_free_entry() argument
309 zpool_free(entry->pool->zpool, entry->handle); in zswap_free_entry()
310 zswap_pool_put(entry->pool); in zswap_free_entry()
311 zswap_entry_cache_free(entry); in zswap_free_entry()
317 static void zswap_entry_get(struct zswap_entry *entry) in zswap_entry_get() argument
319 entry->refcount++; in zswap_entry_get()
326 struct zswap_entry *entry) in zswap_entry_put() argument
328 int refcount = --entry->refcount; in zswap_entry_put()
332 zswap_rb_erase(&tree->rbroot, entry); in zswap_entry_put()
333 zswap_free_entry(entry); in zswap_entry_put()
341 struct zswap_entry *entry; in zswap_entry_find_get() local
343 entry = zswap_rb_search(root, offset); in zswap_entry_find_get()
344 if (entry) in zswap_entry_find_get()
345 zswap_entry_get(entry); in zswap_entry_find_get()
347 return entry; in zswap_entry_find_get()
810 static int zswap_get_swap_cache_page(swp_entry_t entry, in zswap_get_swap_cache_page() argument
815 *retpage = __read_swap_cache_async(entry, GFP_KERNEL, in zswap_get_swap_cache_page()
842 struct zswap_entry *entry; in zswap_writeback_entry() local
861 entry = zswap_entry_find_get(&tree->rbroot, offset); in zswap_writeback_entry()
862 if (!entry) { in zswap_writeback_entry()
868 BUG_ON(offset != entry->offset); in zswap_writeback_entry()
885 src = (u8 *)zpool_map_handle(entry->pool->zpool, entry->handle, in zswap_writeback_entry()
888 tfm = *get_cpu_ptr(entry->pool->tfm); in zswap_writeback_entry()
889 ret = crypto_comp_decompress(tfm, src, entry->length, in zswap_writeback_entry()
891 put_cpu_ptr(entry->pool->tfm); in zswap_writeback_entry()
893 zpool_unmap_handle(entry->pool->zpool, entry->handle); in zswap_writeback_entry()
911 zswap_entry_put(tree, entry); in zswap_writeback_entry()
920 if (entry == zswap_rb_search(&tree->rbroot, offset)) in zswap_writeback_entry()
921 zswap_entry_put(tree, entry); in zswap_writeback_entry()
935 zswap_entry_put(tree, entry); in zswap_writeback_entry()
966 struct zswap_entry *entry, *dupentry; in zswap_frontswap_store() local
991 entry = zswap_entry_cache_alloc(GFP_KERNEL); in zswap_frontswap_store()
992 if (!entry) { in zswap_frontswap_store()
999 entry->pool = zswap_pool_current_get(); in zswap_frontswap_store()
1000 if (!entry->pool) { in zswap_frontswap_store()
1007 tfm = *get_cpu_ptr(entry->pool->tfm); in zswap_frontswap_store()
1011 put_cpu_ptr(entry->pool->tfm); in zswap_frontswap_store()
1019 ret = zpool_malloc(entry->pool->zpool, len, in zswap_frontswap_store()
1030 zhdr = zpool_map_handle(entry->pool->zpool, handle, ZPOOL_MM_RW); in zswap_frontswap_store()
1034 zpool_unmap_handle(entry->pool->zpool, handle); in zswap_frontswap_store()
1038 entry->offset = offset; in zswap_frontswap_store()
1039 entry->handle = handle; in zswap_frontswap_store()
1040 entry->length = dlen; in zswap_frontswap_store()
1045 ret = zswap_rb_insert(&tree->rbroot, entry, &dupentry); in zswap_frontswap_store()
1063 zswap_pool_put(entry->pool); in zswap_frontswap_store()
1065 zswap_entry_cache_free(entry); in zswap_frontswap_store()
1078 struct zswap_entry *entry; in zswap_frontswap_load() local
1086 entry = zswap_entry_find_get(&tree->rbroot, offset); in zswap_frontswap_load()
1087 if (!entry) { in zswap_frontswap_load()
1096 src = (u8 *)zpool_map_handle(entry->pool->zpool, entry->handle, in zswap_frontswap_load()
1099 tfm = *get_cpu_ptr(entry->pool->tfm); in zswap_frontswap_load()
1100 ret = crypto_comp_decompress(tfm, src, entry->length, dst, &dlen); in zswap_frontswap_load()
1101 put_cpu_ptr(entry->pool->tfm); in zswap_frontswap_load()
1103 zpool_unmap_handle(entry->pool->zpool, entry->handle); in zswap_frontswap_load()
1107 zswap_entry_put(tree, entry); in zswap_frontswap_load()
1117 struct zswap_entry *entry; in zswap_frontswap_invalidate_page() local
1121 entry = zswap_rb_search(&tree->rbroot, offset); in zswap_frontswap_invalidate_page()
1122 if (!entry) { in zswap_frontswap_invalidate_page()
1129 zswap_rb_erase(&tree->rbroot, entry); in zswap_frontswap_invalidate_page()
1132 zswap_entry_put(tree, entry); in zswap_frontswap_invalidate_page()
1141 struct zswap_entry *entry, *n; in zswap_frontswap_invalidate_area() local
1148 rbtree_postorder_for_each_entry_safe(entry, n, &tree->rbroot, rbnode) in zswap_frontswap_invalidate_area()
1149 zswap_free_entry(entry); in zswap_frontswap_invalidate_area()