zpool

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 }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值