1b2441318SGreg Kroah-Hartman /* SPDX-License-Identifier: GPL-2.0 */ 2af8d417aSDan Streetman /* 3af8d417aSDan Streetman * zpool memory storage api 4af8d417aSDan Streetman * 5af8d417aSDan Streetman * Copyright (C) 2014 Dan Streetman 6af8d417aSDan Streetman * 76df8bae8SYosry Ahmed * This is a common frontend for the zswap compressed memory storage 86df8bae8SYosry Ahmed * implementations. 9af8d417aSDan Streetman */ 10af8d417aSDan Streetman 11af8d417aSDan Streetman #ifndef _ZPOOL_H_ 12af8d417aSDan Streetman #define _ZPOOL_H_ 13af8d417aSDan Streetman 14af8d417aSDan Streetman struct zpool; 15af8d417aSDan Streetman 163f0e1312SDan Streetman bool zpool_has_pool(char *type); 173f0e1312SDan Streetman 1835499e2bSDomenico Cerasuolo struct zpool *zpool_create_pool(const char *type, const char *name, gfp_t gfp); 19af8d417aSDan Streetman 2069e18f4dSDan Streetman const char *zpool_get_type(struct zpool *pool); 21af8d417aSDan Streetman 22af8d417aSDan Streetman void zpool_destroy_pool(struct zpool *pool); 23af8d417aSDan Streetman 24af8d417aSDan Streetman int zpool_malloc(struct zpool *pool, size_t size, gfp_t gfp, 25af8d417aSDan Streetman unsigned long *handle); 26af8d417aSDan Streetman 27af8d417aSDan Streetman void zpool_free(struct zpool *pool, unsigned long handle); 28af8d417aSDan Streetman 29*9bbe033cSYosry Ahmed void *zpool_obj_read_begin(struct zpool *zpool, unsigned long handle, 30*9bbe033cSYosry Ahmed void *local_copy); 31*9bbe033cSYosry Ahmed 32*9bbe033cSYosry Ahmed void zpool_obj_read_end(struct zpool *zpool, unsigned long handle, 33*9bbe033cSYosry Ahmed void *handle_mem); 34*9bbe033cSYosry Ahmed 35*9bbe033cSYosry Ahmed void zpool_obj_write(struct zpool *zpool, unsigned long handle, 36*9bbe033cSYosry Ahmed void *handle_mem, size_t mem_len); 37*9bbe033cSYosry Ahmed 384196b48dSJohannes Weiner u64 zpool_get_total_pages(struct zpool *pool); 39af8d417aSDan Streetman 40af8d417aSDan Streetman 41af8d417aSDan Streetman /** 42af8d417aSDan Streetman * struct zpool_driver - driver implementation for zpool 43af8d417aSDan Streetman * @type: name of the driver. 44af8d417aSDan Streetman * @list: entry in the list of zpool drivers. 45af8d417aSDan Streetman * @create: create a new pool. 46af8d417aSDan Streetman * @destroy: destroy a pool. 47af8d417aSDan Streetman * @malloc: allocate mem from a pool. 48af8d417aSDan Streetman * @free: free mem from a pool. 49fc6697a8STian Tao * @sleep_mapped: whether zpool driver can sleep during map. 50af8d417aSDan Streetman * @map: map a handle. 51af8d417aSDan Streetman * @unmap: unmap a handle. 52af8d417aSDan Streetman * @total_size: get total size of a pool. 53af8d417aSDan Streetman * 54af8d417aSDan Streetman * This is created by a zpool implementation and registered 55af8d417aSDan Streetman * with zpool. 56af8d417aSDan Streetman */ 57af8d417aSDan Streetman struct zpool_driver { 58af8d417aSDan Streetman char *type; 59af8d417aSDan Streetman struct module *owner; 60af8d417aSDan Streetman atomic_t refcount; 61af8d417aSDan Streetman struct list_head list; 62af8d417aSDan Streetman 6335499e2bSDomenico Cerasuolo void *(*create)(const char *name, gfp_t gfp); 64af8d417aSDan Streetman void (*destroy)(void *pool); 65af8d417aSDan Streetman 66af8d417aSDan Streetman int (*malloc)(void *pool, size_t size, gfp_t gfp, 67af8d417aSDan Streetman unsigned long *handle); 68af8d417aSDan Streetman void (*free)(void *pool, unsigned long handle); 69af8d417aSDan Streetman 70*9bbe033cSYosry Ahmed void *(*obj_read_begin)(void *pool, unsigned long handle, 71*9bbe033cSYosry Ahmed void *local_copy); 72*9bbe033cSYosry Ahmed void (*obj_read_end)(void *pool, unsigned long handle, 73*9bbe033cSYosry Ahmed void *handle_mem); 74*9bbe033cSYosry Ahmed void (*obj_write)(void *pool, unsigned long handle, 75*9bbe033cSYosry Ahmed void *handle_mem, size_t mem_len); 76*9bbe033cSYosry Ahmed 774196b48dSJohannes Weiner u64 (*total_pages)(void *pool); 78af8d417aSDan Streetman }; 79af8d417aSDan Streetman 80af8d417aSDan Streetman void zpool_register_driver(struct zpool_driver *driver); 81af8d417aSDan Streetman 82af8d417aSDan Streetman int zpool_unregister_driver(struct zpool_driver *driver); 83af8d417aSDan Streetman 84fc6697a8STian Tao bool zpool_can_sleep_mapped(struct zpool *pool); 859c3760ebSYu Zhao 86af8d417aSDan Streetman #endif 87