mm: zpool: return pool size in pages
authorJohannes Weiner <hannes@cmpxchg.org>
Tue, 12 Mar 2024 15:34:12 +0000 (11:34 -0400)
committerAndrew Morton <akpm@linux-foundation.org>
Fri, 26 Apr 2024 03:55:48 +0000 (20:55 -0700)
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>
include/linux/zpool.h
mm/z3fold.c
mm/zbud.c
mm/zpool.c
mm/zsmalloc.c
mm/zswap.c

index 3296438eec06207832f709fdbd1853fdb1d4c4ec..a67d62b796980a6bae9d695bd93ef23f533ba164 100644 (file)
@@ -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);
index 7ab05621052dc5a4b5f3add96a92ca54e76b10c2..2ebfed32871bf39005ceea6f10ee0f77dc5f0658 100644 (file)
@@ -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");
index 2190cc1f37b3dc93dad8c3f8df3165a59a94b38f..e9836fff9438112f9dd2fe25bc30925f49df0665 100644 (file)
--- a/mm/zbud.c
+++ b/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
  *
  * 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");
index 846410479c2f413c24f0722a827e8f6f4a89f696..b9fda1fa857da7eb5a91445fabda6946e810dcfa 100644 (file)
@@ -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);
 }
 
 /**
index 7d7cb3eaabe029beaaf522c8521e8589cd0fafdd..b42d3545ca856f19645c73c938864065631b261d 100644 (file)
@@ -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");
index a56b76852664c7494ac39f2303d8347434606bb0..8721980a22740a698878d0ecea9a2b3febe4e4fd 100644 (file)
@@ -513,18 +513,18 @@ static unsigned long zswap_accept_thr_pages(void)
 unsigned long zswap_total_pages(void)
 {
        struct zswap_pool *pool;
-       u64 total = 0;
+       unsigned long total = 0;
 
        rcu_read_lock();
        list_for_each_entry_rcu(pool, &zswap_pools, list) {
                int 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();
 
-       return total >> PAGE_SHIFT;
+       return total;
 }
 
 /*********************************