xref: /linux-6.15/include/linux/zpool.h (revision 7b600411)
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