Lines Matching refs:pool

149 	struct zswap_pool *pool;  member
187 static int zswap_writeback_entry(struct zpool *pool, unsigned long handle);
188 static int zswap_pool_get(struct zswap_pool *pool);
189 static void zswap_pool_put(struct zswap_pool *pool);
203 struct zswap_pool *pool; in zswap_update_total_size() local
208 list_for_each_entry_rcu(pool, &zswap_pools, list) in zswap_update_total_size()
209 total += zpool_get_total_size(pool->zpool); in zswap_update_total_size()
309 zpool_free(entry->pool->zpool, entry->handle); in zswap_free_entry()
310 zswap_pool_put(entry->pool); in zswap_free_entry()
421 static int __zswap_cpu_comp_notifier(struct zswap_pool *pool, in __zswap_cpu_comp_notifier() argument
428 if (WARN_ON(*per_cpu_ptr(pool->tfm, cpu))) in __zswap_cpu_comp_notifier()
430 tfm = crypto_alloc_comp(pool->tfm_name, 0, 0); in __zswap_cpu_comp_notifier()
433 pool->tfm_name, PTR_ERR(tfm)); in __zswap_cpu_comp_notifier()
436 *per_cpu_ptr(pool->tfm, cpu) = tfm; in __zswap_cpu_comp_notifier()
440 tfm = *per_cpu_ptr(pool->tfm, cpu); in __zswap_cpu_comp_notifier()
443 *per_cpu_ptr(pool->tfm, cpu) = NULL; in __zswap_cpu_comp_notifier()
455 struct zswap_pool *pool = container_of(nb, typeof(*pool), notifier); in zswap_cpu_comp_notifier() local
457 return __zswap_cpu_comp_notifier(pool, action, cpu); in zswap_cpu_comp_notifier()
460 static int zswap_cpu_comp_init(struct zswap_pool *pool) in zswap_cpu_comp_init() argument
464 memset(&pool->notifier, 0, sizeof(pool->notifier)); in zswap_cpu_comp_init()
465 pool->notifier.notifier_call = zswap_cpu_comp_notifier; in zswap_cpu_comp_init()
469 if (__zswap_cpu_comp_notifier(pool, CPU_UP_PREPARE, cpu) == in zswap_cpu_comp_init()
472 __register_cpu_notifier(&pool->notifier); in zswap_cpu_comp_init()
478 __zswap_cpu_comp_notifier(pool, CPU_UP_CANCELED, cpu); in zswap_cpu_comp_init()
483 static void zswap_cpu_comp_destroy(struct zswap_pool *pool) in zswap_cpu_comp_destroy() argument
489 __zswap_cpu_comp_notifier(pool, CPU_UP_CANCELED, cpu); in zswap_cpu_comp_destroy()
490 __unregister_cpu_notifier(&pool->notifier); in zswap_cpu_comp_destroy()
500 struct zswap_pool *pool; in __zswap_pool_current() local
502 pool = list_first_or_null_rcu(&zswap_pools, typeof(*pool), list); in __zswap_pool_current()
503 WARN_ON(!pool); in __zswap_pool_current()
505 return pool; in __zswap_pool_current()
517 struct zswap_pool *pool; in zswap_pool_current_get() local
521 pool = __zswap_pool_current(); in zswap_pool_current_get()
522 if (!pool || !zswap_pool_get(pool)) in zswap_pool_current_get()
523 pool = NULL; in zswap_pool_current_get()
527 return pool; in zswap_pool_current_get()
532 struct zswap_pool *pool, *last = NULL; in zswap_pool_last_get() local
536 list_for_each_entry_rcu(pool, &zswap_pools, list) in zswap_pool_last_get()
537 last = pool; in zswap_pool_last_get()
549 struct zswap_pool *pool; in zswap_pool_find_get() local
553 list_for_each_entry_rcu(pool, &zswap_pools, list) { in zswap_pool_find_get()
554 if (strcmp(pool->tfm_name, compressor)) in zswap_pool_find_get()
556 if (strcmp(zpool_get_type(pool->zpool), type)) in zswap_pool_find_get()
559 if (!zswap_pool_get(pool)) in zswap_pool_find_get()
561 return pool; in zswap_pool_find_get()
569 struct zswap_pool *pool; in zswap_pool_create() local
573 pool = kzalloc(sizeof(*pool), GFP_KERNEL); in zswap_pool_create()
574 if (!pool) { in zswap_pool_create()
582 pool->zpool = zpool_create_pool(type, name, gfp, &zswap_zpool_ops); in zswap_pool_create()
583 if (!pool->zpool) { in zswap_pool_create()
587 pr_debug("using %s zpool\n", zpool_get_type(pool->zpool)); in zswap_pool_create()
589 strlcpy(pool->tfm_name, compressor, sizeof(pool->tfm_name)); in zswap_pool_create()
590 pool->tfm = alloc_percpu(struct crypto_comp *); in zswap_pool_create()
591 if (!pool->tfm) { in zswap_pool_create()
596 if (zswap_cpu_comp_init(pool)) in zswap_pool_create()
598 pr_debug("using %s compressor\n", pool->tfm_name); in zswap_pool_create()
603 kref_init(&pool->kref); in zswap_pool_create()
604 INIT_LIST_HEAD(&pool->list); in zswap_pool_create()
606 zswap_pool_debug("created", pool); in zswap_pool_create()
608 return pool; in zswap_pool_create()
611 free_percpu(pool->tfm); in zswap_pool_create()
612 if (pool->zpool) in zswap_pool_create()
613 zpool_destroy_pool(pool->zpool); in zswap_pool_create()
614 kfree(pool); in zswap_pool_create()
646 static void zswap_pool_destroy(struct zswap_pool *pool) in zswap_pool_destroy() argument
648 zswap_pool_debug("destroying", pool); in zswap_pool_destroy()
650 zswap_cpu_comp_destroy(pool); in zswap_pool_destroy()
651 free_percpu(pool->tfm); in zswap_pool_destroy()
652 zpool_destroy_pool(pool->zpool); in zswap_pool_destroy()
653 kfree(pool); in zswap_pool_destroy()
656 static int __must_check zswap_pool_get(struct zswap_pool *pool) in zswap_pool_get() argument
658 return kref_get_unless_zero(&pool->kref); in zswap_pool_get()
663 struct zswap_pool *pool = container_of(head, typeof(*pool), rcu_head); in __zswap_pool_release() local
666 WARN_ON(kref_get_unless_zero(&pool->kref)); in __zswap_pool_release()
669 zswap_pool_destroy(pool); in __zswap_pool_release()
674 struct zswap_pool *pool; in __zswap_pool_empty() local
676 pool = container_of(kref, typeof(*pool), kref); in __zswap_pool_empty()
680 WARN_ON(pool == zswap_pool_current()); in __zswap_pool_empty()
682 list_del_rcu(&pool->list); in __zswap_pool_empty()
683 call_rcu(&pool->rcu_head, __zswap_pool_release); in __zswap_pool_empty()
688 static void zswap_pool_put(struct zswap_pool *pool) in zswap_pool_put() argument
690 kref_put(&pool->kref, __zswap_pool_empty); in zswap_pool_put()
701 struct zswap_pool *pool, *put_pool = NULL; in __zswap_param_set() local
734 pool = zswap_pool_find_get(type, compressor); in __zswap_param_set()
735 if (pool) { in __zswap_param_set()
736 zswap_pool_debug("using existing", pool); in __zswap_param_set()
737 list_del_rcu(&pool->list); in __zswap_param_set()
740 pool = zswap_pool_create(type, compressor); in __zswap_param_set()
744 if (pool) in __zswap_param_set()
751 list_add_rcu(&pool->list, &zswap_pools); in __zswap_param_set()
752 } else if (pool) { in __zswap_param_set()
757 list_add_tail_rcu(&pool->list, &zswap_pools); in __zswap_param_set()
758 put_pool = pool; in __zswap_param_set()
836 static int zswap_writeback_entry(struct zpool *pool, unsigned long handle) in zswap_writeback_entry() argument
853 zhdr = zpool_map_handle(pool, handle, ZPOOL_MM_RO); in zswap_writeback_entry()
855 zpool_unmap_handle(pool, handle); 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()
891 put_cpu_ptr(entry->pool->tfm); in zswap_writeback_entry()
893 zpool_unmap_handle(entry->pool->zpool, entry->handle); in zswap_writeback_entry()
944 struct zswap_pool *pool; in zswap_shrink() local
947 pool = zswap_pool_last_get(); in zswap_shrink()
948 if (!pool) in zswap_shrink()
951 ret = zpool_shrink(pool->zpool, 1, NULL); in zswap_shrink()
953 zswap_pool_put(pool); in zswap_shrink()
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()
1063 zswap_pool_put(entry->pool); in zswap_frontswap_store()
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()
1101 put_cpu_ptr(entry->pool->tfm); in zswap_frontswap_load()
1103 zpool_unmap_handle(entry->pool->zpool, entry->handle); in zswap_frontswap_load()
1236 struct zswap_pool *pool; in init_zswap() local
1250 pool = __zswap_pool_create_fallback(); in init_zswap()
1251 if (!pool) { in init_zswap()
1255 pr_info("loaded using pool %s/%s\n", pool->tfm_name, in init_zswap()
1256 zpool_get_type(pool->zpool)); in init_zswap()
1258 list_add(&pool->list, &zswap_pools); in init_zswap()