• Home
  • Raw
  • Download

Lines Matching refs:pool

156 	struct zswap_pool *pool;  member
203 static int zswap_writeback_entry(struct zpool *pool, unsigned long handle);
204 static int zswap_pool_get(struct zswap_pool *pool);
205 static void zswap_pool_put(struct zswap_pool *pool);
219 struct zswap_pool *pool; in zswap_update_total_size() local
224 list_for_each_entry_rcu(pool, &zswap_pools, list) in zswap_update_total_size()
225 total += zpool_get_total_size(pool->zpool); in zswap_update_total_size()
328 zpool_free(entry->pool->zpool, entry->handle); in zswap_free_entry()
329 zswap_pool_put(entry->pool); in zswap_free_entry()
400 struct zswap_pool *pool = hlist_entry(node, struct zswap_pool, node); in zswap_cpu_comp_prepare() local
403 if (WARN_ON(*per_cpu_ptr(pool->tfm, cpu))) in zswap_cpu_comp_prepare()
406 tfm = crypto_alloc_comp(pool->tfm_name, 0, 0); in zswap_cpu_comp_prepare()
409 pool->tfm_name, PTR_ERR(tfm)); in zswap_cpu_comp_prepare()
412 *per_cpu_ptr(pool->tfm, cpu) = tfm; in zswap_cpu_comp_prepare()
418 struct zswap_pool *pool = hlist_entry(node, struct zswap_pool, node); in zswap_cpu_comp_dead() local
421 tfm = *per_cpu_ptr(pool->tfm, cpu); in zswap_cpu_comp_dead()
424 *per_cpu_ptr(pool->tfm, cpu) = NULL; in zswap_cpu_comp_dead()
434 struct zswap_pool *pool; in __zswap_pool_current() local
436 pool = list_first_or_null_rcu(&zswap_pools, typeof(*pool), list); in __zswap_pool_current()
437 WARN_ONCE(!pool && zswap_has_pool, in __zswap_pool_current()
440 return pool; in __zswap_pool_current()
452 struct zswap_pool *pool; in zswap_pool_current_get() local
456 pool = __zswap_pool_current(); in zswap_pool_current_get()
457 if (!zswap_pool_get(pool)) in zswap_pool_current_get()
458 pool = NULL; in zswap_pool_current_get()
462 return pool; in zswap_pool_current_get()
467 struct zswap_pool *pool, *last = NULL; in zswap_pool_last_get() local
471 list_for_each_entry_rcu(pool, &zswap_pools, list) in zswap_pool_last_get()
472 last = pool; in zswap_pool_last_get()
486 struct zswap_pool *pool; in zswap_pool_find_get() local
490 list_for_each_entry_rcu(pool, &zswap_pools, list) { in zswap_pool_find_get()
491 if (strcmp(pool->tfm_name, compressor)) in zswap_pool_find_get()
493 if (strcmp(zpool_get_type(pool->zpool), type)) in zswap_pool_find_get()
496 if (!zswap_pool_get(pool)) in zswap_pool_find_get()
498 return pool; in zswap_pool_find_get()
506 struct zswap_pool *pool; in zswap_pool_create() local
522 pool = kzalloc(sizeof(*pool), GFP_KERNEL); in zswap_pool_create()
523 if (!pool) in zswap_pool_create()
529 pool->zpool = zpool_create_pool(type, name, gfp, &zswap_zpool_ops); in zswap_pool_create()
530 if (!pool->zpool) { in zswap_pool_create()
534 pr_debug("using %s zpool\n", zpool_get_type(pool->zpool)); in zswap_pool_create()
536 strlcpy(pool->tfm_name, compressor, sizeof(pool->tfm_name)); in zswap_pool_create()
537 pool->tfm = alloc_percpu(struct crypto_comp *); in zswap_pool_create()
538 if (!pool->tfm) { in zswap_pool_create()
544 &pool->node); in zswap_pool_create()
547 pr_debug("using %s compressor\n", pool->tfm_name); in zswap_pool_create()
552 kref_init(&pool->kref); in zswap_pool_create()
553 INIT_LIST_HEAD(&pool->list); in zswap_pool_create()
555 zswap_pool_debug("created", pool); in zswap_pool_create()
557 return pool; in zswap_pool_create()
560 free_percpu(pool->tfm); in zswap_pool_create()
561 if (pool->zpool) in zswap_pool_create()
562 zpool_destroy_pool(pool->zpool); in zswap_pool_create()
563 kfree(pool); in zswap_pool_create()
607 static void zswap_pool_destroy(struct zswap_pool *pool) in zswap_pool_destroy() argument
609 zswap_pool_debug("destroying", pool); in zswap_pool_destroy()
611 cpuhp_state_remove_instance(CPUHP_MM_ZSWP_POOL_PREPARE, &pool->node); in zswap_pool_destroy()
612 free_percpu(pool->tfm); in zswap_pool_destroy()
613 zpool_destroy_pool(pool->zpool); in zswap_pool_destroy()
614 kfree(pool); in zswap_pool_destroy()
617 static int __must_check zswap_pool_get(struct zswap_pool *pool) in zswap_pool_get() argument
619 if (!pool) in zswap_pool_get()
622 return kref_get_unless_zero(&pool->kref); in zswap_pool_get()
627 struct zswap_pool *pool = container_of(work, typeof(*pool), work); in __zswap_pool_release() local
632 WARN_ON(kref_get_unless_zero(&pool->kref)); in __zswap_pool_release()
635 zswap_pool_destroy(pool); in __zswap_pool_release()
640 struct zswap_pool *pool; in __zswap_pool_empty() local
642 pool = container_of(kref, typeof(*pool), kref); in __zswap_pool_empty()
646 WARN_ON(pool == zswap_pool_current()); in __zswap_pool_empty()
648 list_del_rcu(&pool->list); in __zswap_pool_empty()
650 INIT_WORK(&pool->work, __zswap_pool_release); in __zswap_pool_empty()
651 schedule_work(&pool->work); in __zswap_pool_empty()
656 static void zswap_pool_put(struct zswap_pool *pool) in zswap_pool_put() argument
658 kref_put(&pool->kref, __zswap_pool_empty); in zswap_pool_put()
669 struct zswap_pool *pool, *put_pool = NULL; in __zswap_param_set() local
707 pool = zswap_pool_find_get(type, compressor); in __zswap_param_set()
708 if (pool) { in __zswap_param_set()
709 zswap_pool_debug("using existing", pool); in __zswap_param_set()
710 WARN_ON(pool == zswap_pool_current()); in __zswap_param_set()
711 list_del_rcu(&pool->list); in __zswap_param_set()
716 if (!pool) in __zswap_param_set()
717 pool = zswap_pool_create(type, compressor); in __zswap_param_set()
719 if (pool) in __zswap_param_set()
728 list_add_rcu(&pool->list, &zswap_pools); in __zswap_param_set()
730 } else if (pool) { in __zswap_param_set()
735 list_add_tail_rcu(&pool->list, &zswap_pools); in __zswap_param_set()
736 put_pool = pool; in __zswap_param_set()
741 if (!zswap_has_pool && !pool) { in __zswap_param_set()
840 static int zswap_writeback_entry(struct zpool *pool, unsigned long handle) in zswap_writeback_entry() argument
857 zhdr = zpool_map_handle(pool, handle, ZPOOL_MM_RO); in zswap_writeback_entry()
868 zpool_unmap_handle(pool, handle); in zswap_writeback_entry()
891 tfm = *get_cpu_ptr(entry->pool->tfm); in zswap_writeback_entry()
894 put_cpu_ptr(entry->pool->tfm); in zswap_writeback_entry()
941 zpool_unmap_handle(pool, handle); in zswap_writeback_entry()
947 struct zswap_pool *pool; in zswap_shrink() local
950 pool = zswap_pool_last_get(); in zswap_shrink()
951 if (!pool) in zswap_shrink()
954 ret = zpool_shrink(pool->zpool, 1, NULL); in zswap_shrink()
956 zswap_pool_put(pool); in zswap_shrink()
1053 entry->pool = zswap_pool_current_get(); in zswap_frontswap_store()
1054 if (!entry->pool) { in zswap_frontswap_store()
1061 tfm = *get_cpu_ptr(entry->pool->tfm); in zswap_frontswap_store()
1065 put_cpu_ptr(entry->pool->tfm); in zswap_frontswap_store()
1072 hlen = zpool_evictable(entry->pool->zpool) ? sizeof(zhdr) : 0; in zswap_frontswap_store()
1074 if (zpool_malloc_support_movable(entry->pool->zpool)) in zswap_frontswap_store()
1076 ret = zpool_malloc(entry->pool->zpool, hlen + dlen, gfp, &handle); in zswap_frontswap_store()
1085 buf = zpool_map_handle(entry->pool->zpool, handle, ZPOOL_MM_RW); in zswap_frontswap_store()
1088 zpool_unmap_handle(entry->pool->zpool, handle); in zswap_frontswap_store()
1118 zswap_pool_put(entry->pool); in zswap_frontswap_store()
1158 src = zpool_map_handle(entry->pool->zpool, entry->handle, ZPOOL_MM_RO); in zswap_frontswap_load()
1159 if (zpool_evictable(entry->pool->zpool)) in zswap_frontswap_load()
1162 tfm = *get_cpu_ptr(entry->pool->tfm); in zswap_frontswap_load()
1164 put_cpu_ptr(entry->pool->tfm); in zswap_frontswap_load()
1166 zpool_unmap_handle(entry->pool->zpool, entry->handle); in zswap_frontswap_load()
1300 struct zswap_pool *pool; in init_zswap() local
1324 pool = __zswap_pool_create_fallback(); in init_zswap()
1325 if (pool) { in init_zswap()
1326 pr_info("loaded using pool %s/%s\n", pool->tfm_name, in init_zswap()
1327 zpool_get_type(pool->zpool)); in init_zswap()
1328 list_add(&pool->list, &zswap_pools); in init_zswap()