zpool
zpool 是一个中间层。因此zpool提供的API 分为两类,一类是同给服务提供者,一类是给服务使用者。include/linux/zpool.h这是提供给服务提供这个的API,当前系统中使用zpool的服务的有两个,zbud.c 这 zsmalloc.c106 void zpool_register_driver(struct zpool_driver *driver);108
·
zpool 是一个中间层。因此zpool提供的API 分为两类,一类是同给服务提供者,一类是给服务使用者。
include/linux/zpool.h
这是提供给服务提供这个的API,当前系统中使用zpool的服务的有两个,zbud.c 这 zsmalloc.c
106 void zpool_register_driver(struct zpool_driver *driver);
108 int zpool_unregister_driver(struct zpool_driver *driver);
38 void zpool_register_driver(struct zpool_driver *driver)
39 {
40 spin_lock(&drivers_lock);
41 atomic_set(&driver->refcount, 0);
42 list_add(&driver->list, &drivers_head);
43 spin_unlock(&drivers_lock);
44 }
45 EXPORT_SYMBOL(zpool_register_driver);
一般会调用这个函数告诉zpool 可以提供服务,code如上所示,可见zpool 将所有注册的driver都添加到drivers_head 中.
第二类是给服务使用者的API,当前使用zpool的是zswap
39 bool zpool_has_pool(char *type);
40
41 struct zpool *zpool_create_pool(const char *type, const char *name,
42 gfp_t gfp, const struct zpool_ops *ops);
43
44 const char *zpool_get_type(struct zpool *pool);
45
46 void zpool_destroy_pool(struct zpool *pool);
47
48 int zpool_malloc(struct zpool *pool, size_t size, gfp_t gfp,
49 unsigned long *handle);
50
51 void zpool_free(struct zpool *pool, unsigned long handle);
52
53 int zpool_shrink(struct zpool *pool, unsigned int pages,
54 unsigned int *reclaimed);
55
56 void *zpool_map_handle(struct zpool *pool, unsigned long handle,
57 enum zpool_mapmode mm);
58
59 void zpool_unmap_handle(struct zpool *pool, unsigned long handle);
60
61 u64 zpool_get_total_size(struct zpool *pool);
zpool的源码如下:
source/mm/zpool.c
zpool的使用者一般都通过zpool直接调用注册driver的函数,zpool只是提供一个中间层,不做任何的转化。如下所示调用zpool_malloc 来申请memory的话,最后还是调用driver提供的malloc方法.
254 int zpool_malloc(struct zpool *zpool, size_t size, gfp_t gfp,
255 unsigned long *handle)
256 {
257 return zpool->driver->malloc(zpool->pool, size, gfp, handle);
258 }
include/linux/zpool.h
这是提供给服务提供这个的API,当前系统中使用zpool的服务的有两个,zbud.c 这 zsmalloc.c
106 void zpool_register_driver(struct zpool_driver *driver);
108 int zpool_unregister_driver(struct zpool_driver *driver);
38 void zpool_register_driver(struct zpool_driver *driver)
39 {
40 spin_lock(&drivers_lock);
41 atomic_set(&driver->refcount, 0);
42 list_add(&driver->list, &drivers_head);
43 spin_unlock(&drivers_lock);
44 }
45 EXPORT_SYMBOL(zpool_register_driver);
一般会调用这个函数告诉zpool 可以提供服务,code如上所示,可见zpool 将所有注册的driver都添加到drivers_head 中.
第二类是给服务使用者的API,当前使用zpool的是zswap
39 bool zpool_has_pool(char *type);
40
41 struct zpool *zpool_create_pool(const char *type, const char *name,
42 gfp_t gfp, const struct zpool_ops *ops);
43
44 const char *zpool_get_type(struct zpool *pool);
45
46 void zpool_destroy_pool(struct zpool *pool);
47
48 int zpool_malloc(struct zpool *pool, size_t size, gfp_t gfp,
49 unsigned long *handle);
50
51 void zpool_free(struct zpool *pool, unsigned long handle);
52
53 int zpool_shrink(struct zpool *pool, unsigned int pages,
54 unsigned int *reclaimed);
55
56 void *zpool_map_handle(struct zpool *pool, unsigned long handle,
57 enum zpool_mapmode mm);
58
59 void zpool_unmap_handle(struct zpool *pool, unsigned long handle);
60
61 u64 zpool_get_total_size(struct zpool *pool);
zpool的源码如下:
source/mm/zpool.c
zpool的使用者一般都通过zpool直接调用注册driver的函数,zpool只是提供一个中间层,不做任何的转化。如下所示调用zpool_malloc 来申请memory的话,最后还是调用driver提供的malloc方法.
254 int zpool_malloc(struct zpool *zpool, size_t size, gfp_t gfp,
255 unsigned long *handle)
256 {
257 return zpool->driver->malloc(zpool->pool, size, gfp, handle);
258 }
更多推荐
已为社区贡献3条内容
所有评论(0)