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