mm: zpool: return pool size in pages
All zswap backends track their pool sizes in pages. Currently they multiply by PAGE_SIZE for zswap, only for zswap to divide again in order to do limit math. Report pages directly. Link: https://lkml.kernel.org/r/20240312153901.3441-2-hannes@cmpxchg.org Signed-off-by: Johannes Weiner <hannes@cmpxchg.org> Acked-by: Yosry Ahmed <yosryahmed@google.com> Reviewed-by: Chengming Zhou <chengming.zhou@linux.dev> Reviewed-by: Nhat Pham <nphamcs@gmail.com> Cc: Yosry Ahmed <yosryahmed@google.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
This commit is contained in:
parent
91cdcd8d62
commit
4196b48ddd
@ -53,7 +53,7 @@ void *zpool_map_handle(struct zpool *pool, unsigned long handle,
|
|||||||
|
|
||||||
void zpool_unmap_handle(struct zpool *pool, unsigned long handle);
|
void zpool_unmap_handle(struct zpool *pool, unsigned long handle);
|
||||||
|
|
||||||
u64 zpool_get_total_size(struct zpool *pool);
|
u64 zpool_get_total_pages(struct zpool *pool);
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -91,7 +91,7 @@ struct zpool_driver {
|
|||||||
enum zpool_mapmode mm);
|
enum zpool_mapmode mm);
|
||||||
void (*unmap)(void *pool, unsigned long handle);
|
void (*unmap)(void *pool, unsigned long handle);
|
||||||
|
|
||||||
u64 (*total_size)(void *pool);
|
u64 (*total_pages)(void *pool);
|
||||||
};
|
};
|
||||||
|
|
||||||
void zpool_register_driver(struct zpool_driver *driver);
|
void zpool_register_driver(struct zpool_driver *driver);
|
||||||
|
10
mm/z3fold.c
10
mm/z3fold.c
@ -1237,12 +1237,12 @@ static void z3fold_unmap(struct z3fold_pool *pool, unsigned long handle)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* z3fold_get_pool_size() - gets the z3fold pool size in pages
|
* z3fold_get_pool_pages() - gets the z3fold pool size in pages
|
||||||
* @pool: pool whose size is being queried
|
* @pool: pool whose size is being queried
|
||||||
*
|
*
|
||||||
* Returns: size in pages of the given pool.
|
* Returns: size in pages of the given pool.
|
||||||
*/
|
*/
|
||||||
static u64 z3fold_get_pool_size(struct z3fold_pool *pool)
|
static u64 z3fold_get_pool_pages(struct z3fold_pool *pool)
|
||||||
{
|
{
|
||||||
return atomic64_read(&pool->pages_nr);
|
return atomic64_read(&pool->pages_nr);
|
||||||
}
|
}
|
||||||
@ -1402,9 +1402,9 @@ static void z3fold_zpool_unmap(void *pool, unsigned long handle)
|
|||||||
z3fold_unmap(pool, handle);
|
z3fold_unmap(pool, handle);
|
||||||
}
|
}
|
||||||
|
|
||||||
static u64 z3fold_zpool_total_size(void *pool)
|
static u64 z3fold_zpool_total_pages(void *pool)
|
||||||
{
|
{
|
||||||
return z3fold_get_pool_size(pool) * PAGE_SIZE;
|
return z3fold_get_pool_pages(pool);
|
||||||
}
|
}
|
||||||
|
|
||||||
static struct zpool_driver z3fold_zpool_driver = {
|
static struct zpool_driver z3fold_zpool_driver = {
|
||||||
@ -1417,7 +1417,7 @@ static struct zpool_driver z3fold_zpool_driver = {
|
|||||||
.free = z3fold_zpool_free,
|
.free = z3fold_zpool_free,
|
||||||
.map = z3fold_zpool_map,
|
.map = z3fold_zpool_map,
|
||||||
.unmap = z3fold_zpool_unmap,
|
.unmap = z3fold_zpool_unmap,
|
||||||
.total_size = z3fold_zpool_total_size,
|
.total_pages = z3fold_zpool_total_pages,
|
||||||
};
|
};
|
||||||
|
|
||||||
MODULE_ALIAS("zpool-z3fold");
|
MODULE_ALIAS("zpool-z3fold");
|
||||||
|
10
mm/zbud.c
10
mm/zbud.c
@ -365,13 +365,13 @@ static void zbud_unmap(struct zbud_pool *pool, unsigned long handle)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* zbud_get_pool_size() - gets the zbud pool size in pages
|
* zbud_get_pool_pages() - gets the zbud pool size in pages
|
||||||
* @pool: pool whose size is being queried
|
* @pool: pool whose size is being queried
|
||||||
*
|
*
|
||||||
* Returns: size in pages of the given pool. The pool lock need not be
|
* Returns: size in pages of the given pool. The pool lock need not be
|
||||||
* taken to access pages_nr.
|
* taken to access pages_nr.
|
||||||
*/
|
*/
|
||||||
static u64 zbud_get_pool_size(struct zbud_pool *pool)
|
static u64 zbud_get_pool_pages(struct zbud_pool *pool)
|
||||||
{
|
{
|
||||||
return pool->pages_nr;
|
return pool->pages_nr;
|
||||||
}
|
}
|
||||||
@ -410,9 +410,9 @@ static void zbud_zpool_unmap(void *pool, unsigned long handle)
|
|||||||
zbud_unmap(pool, handle);
|
zbud_unmap(pool, handle);
|
||||||
}
|
}
|
||||||
|
|
||||||
static u64 zbud_zpool_total_size(void *pool)
|
static u64 zbud_zpool_total_pages(void *pool)
|
||||||
{
|
{
|
||||||
return zbud_get_pool_size(pool) * PAGE_SIZE;
|
return zbud_get_pool_pages(pool);
|
||||||
}
|
}
|
||||||
|
|
||||||
static struct zpool_driver zbud_zpool_driver = {
|
static struct zpool_driver zbud_zpool_driver = {
|
||||||
@ -425,7 +425,7 @@ static struct zpool_driver zbud_zpool_driver = {
|
|||||||
.free = zbud_zpool_free,
|
.free = zbud_zpool_free,
|
||||||
.map = zbud_zpool_map,
|
.map = zbud_zpool_map,
|
||||||
.unmap = zbud_zpool_unmap,
|
.unmap = zbud_zpool_unmap,
|
||||||
.total_size = zbud_zpool_total_size,
|
.total_pages = zbud_zpool_total_pages,
|
||||||
};
|
};
|
||||||
|
|
||||||
MODULE_ALIAS("zpool-zbud");
|
MODULE_ALIAS("zpool-zbud");
|
||||||
|
10
mm/zpool.c
10
mm/zpool.c
@ -321,16 +321,16 @@ void zpool_unmap_handle(struct zpool *zpool, unsigned long handle)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* zpool_get_total_size() - The total size of the pool
|
* zpool_get_total_pages() - The total size of the pool
|
||||||
* @zpool: The zpool to check
|
* @zpool: The zpool to check
|
||||||
*
|
*
|
||||||
* This returns the total size in bytes of the pool.
|
* This returns the total size in pages of the pool.
|
||||||
*
|
*
|
||||||
* Returns: Total size of the zpool in bytes.
|
* Returns: Total size of the zpool in pages.
|
||||||
*/
|
*/
|
||||||
u64 zpool_get_total_size(struct zpool *zpool)
|
u64 zpool_get_total_pages(struct zpool *zpool)
|
||||||
{
|
{
|
||||||
return zpool->driver->total_size(zpool->pool);
|
return zpool->driver->total_pages(zpool->pool);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -399,9 +399,9 @@ static void zs_zpool_unmap(void *pool, unsigned long handle)
|
|||||||
zs_unmap_object(pool, handle);
|
zs_unmap_object(pool, handle);
|
||||||
}
|
}
|
||||||
|
|
||||||
static u64 zs_zpool_total_size(void *pool)
|
static u64 zs_zpool_total_pages(void *pool)
|
||||||
{
|
{
|
||||||
return zs_get_total_pages(pool) << PAGE_SHIFT;
|
return zs_get_total_pages(pool);
|
||||||
}
|
}
|
||||||
|
|
||||||
static struct zpool_driver zs_zpool_driver = {
|
static struct zpool_driver zs_zpool_driver = {
|
||||||
@ -414,7 +414,7 @@ static struct zpool_driver zs_zpool_driver = {
|
|||||||
.free = zs_zpool_free,
|
.free = zs_zpool_free,
|
||||||
.map = zs_zpool_map,
|
.map = zs_zpool_map,
|
||||||
.unmap = zs_zpool_unmap,
|
.unmap = zs_zpool_unmap,
|
||||||
.total_size = zs_zpool_total_size,
|
.total_pages = zs_zpool_total_pages,
|
||||||
};
|
};
|
||||||
|
|
||||||
MODULE_ALIAS("zpool-zsmalloc");
|
MODULE_ALIAS("zpool-zsmalloc");
|
||||||
|
@ -513,18 +513,18 @@ static unsigned long zswap_accept_thr_pages(void)
|
|||||||
unsigned long zswap_total_pages(void)
|
unsigned long zswap_total_pages(void)
|
||||||
{
|
{
|
||||||
struct zswap_pool *pool;
|
struct zswap_pool *pool;
|
||||||
u64 total = 0;
|
unsigned long total = 0;
|
||||||
|
|
||||||
rcu_read_lock();
|
rcu_read_lock();
|
||||||
list_for_each_entry_rcu(pool, &zswap_pools, list) {
|
list_for_each_entry_rcu(pool, &zswap_pools, list) {
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
for (i = 0; i < ZSWAP_NR_ZPOOLS; i++)
|
for (i = 0; i < ZSWAP_NR_ZPOOLS; i++)
|
||||||
total += zpool_get_total_size(pool->zpools[i]);
|
total += zpool_get_total_pages(pool->zpools[i]);
|
||||||
}
|
}
|
||||||
rcu_read_unlock();
|
rcu_read_unlock();
|
||||||
|
|
||||||
return total >> PAGE_SHIFT;
|
return total;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*********************************
|
/*********************************
|
||||||
|
Loading…
Reference in New Issue
Block a user