Commit 4196b48d authored by Johannes Weiner's avatar Johannes Weiner Committed by Andrew Morton
Browse files

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: default avatarJohannes Weiner <hannes@cmpxchg.org>
Acked-by: default avatarYosry Ahmed <yosryahmed@google.com>
Reviewed-by: default avatarChengming Zhou <chengming.zhou@linux.dev>
Reviewed-by: default avatarNhat Pham <nphamcs@gmail.com>
Cc: Yosry Ahmed <yosryahmed@google.com>
Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
parent 91cdcd8d
Loading
Loading
Loading
Loading
+2 −2
Original line number Diff line number Diff line
@@ -53,7 +53,7 @@ void *zpool_map_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);
	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);
+5 −5
Original line number Diff line number Diff line
@@ -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
 *
 * 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);
}
@@ -1402,9 +1402,9 @@ static void z3fold_zpool_unmap(void *pool, unsigned long 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 = {
@@ -1417,7 +1417,7 @@ static struct zpool_driver z3fold_zpool_driver = {
	.free =		z3fold_zpool_free,
	.map =		z3fold_zpool_map,
	.unmap =	z3fold_zpool_unmap,
	.total_size =	z3fold_zpool_total_size,
	.total_pages =	z3fold_zpool_total_pages,
};

MODULE_ALIAS("zpool-z3fold");
+5 −5
Original line number Diff line number Diff line
@@ -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
 *
 * Returns: size in pages of the given pool.  The pool lock need not be
 * 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;
}
@@ -410,9 +410,9 @@ static void zbud_zpool_unmap(void *pool, unsigned long 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 = {
@@ -425,7 +425,7 @@ static struct zpool_driver zbud_zpool_driver = {
	.free =		zbud_zpool_free,
	.map =		zbud_zpool_map,
	.unmap =	zbud_zpool_unmap,
	.total_size =	zbud_zpool_total_size,
	.total_pages =	zbud_zpool_total_pages,
};

MODULE_ALIAS("zpool-zbud");
+5 −5
Original line number Diff line number Diff line
@@ -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
 *
 * 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);
}

/**
+3 −3
Original line number Diff line number Diff line
@@ -399,9 +399,9 @@ static void zs_zpool_unmap(void *pool, unsigned long 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 = {
@@ -414,7 +414,7 @@ static struct zpool_driver zs_zpool_driver = {
	.free =			  zs_zpool_free,
	.map =			  zs_zpool_map,
	.unmap =		  zs_zpool_unmap,
	.total_size =		  zs_zpool_total_size,
	.total_pages =		  zs_zpool_total_pages,
};

MODULE_ALIAS("zpool-zsmalloc");
Loading