mm: kmem: switch to nr_pages in (__)memcg_kmem_charge_memcg()
authorRoman Gushchin <guro@fb.com>
Thu, 2 Apr 2020 04:06:49 +0000 (21:06 -0700)
committerLinus Torvalds <torvalds@linux-foundation.org>
Thu, 2 Apr 2020 16:35:28 +0000 (09:35 -0700)
These functions are charging the given number of kernel pages to the given
memory cgroup.  The number doesn't have to be a power of two.  Let's make
them to take the unsigned int nr_pages as an argument instead of the page
order.

It makes them look consistent with the corresponding uncharge functions
and functions like: mem_cgroup_charge_skmem(memcg, nr_pages).

Signed-off-by: Roman Gushchin <guro@fb.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Reviewed-by: Shakeel Butt <shakeelb@google.com>
Acked-by: Johannes Weiner <hannes@cmpxchg.org>
Cc: Michal Hocko <mhocko@kernel.org>
Cc: Vladimir Davydov <vdavydov.dev@gmail.com>
Link: http://lkml.kernel.org/r/20200109202659.752357-5-guro@fb.com
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
include/linux/memcontrol.h
mm/memcontrol.c
mm/slab.h

index 4bc97ae50f3b0f55655bb359f3e22b427a1a9b2f..b819a64c2ceb20f2d6b18148e62d9a8ff0b80075 100644 (file)
@@ -1369,7 +1369,8 @@ void memcg_kmem_put_cache(struct kmem_cache *cachep);
 #ifdef CONFIG_MEMCG_KMEM
 int __memcg_kmem_charge_page(struct page *page, gfp_t gfp, int order);
 void __memcg_kmem_uncharge_page(struct page *page, int order);
-int __memcg_kmem_charge_memcg(struct mem_cgroup *memcg, gfp_t gfp, int order);
+int __memcg_kmem_charge_memcg(struct mem_cgroup *memcg, gfp_t gfp,
+                             unsigned int nr_pages);
 void __memcg_kmem_uncharge_memcg(struct mem_cgroup *memcg,
                                 unsigned int nr_pages);
 
@@ -1408,18 +1409,18 @@ static inline void memcg_kmem_uncharge_page(struct page *page, int order)
 }
 
 static inline int memcg_kmem_charge_memcg(struct mem_cgroup *memcg, gfp_t gfp,
-                                         int order)
+                                         unsigned int nr_pages)
 {
        if (memcg_kmem_enabled())
-               return __memcg_kmem_charge_memcg(memcg, gfp, order);
+               return __memcg_kmem_charge_memcg(memcg, gfp, nr_pages);
        return 0;
 }
 
 static inline void memcg_kmem_uncharge_memcg(struct mem_cgroup *memcg,
-                                            int order)
+                                            unsigned int nr_pages)
 {
        if (memcg_kmem_enabled())
-               __memcg_kmem_uncharge_memcg(memcg, 1 << order);
+               __memcg_kmem_uncharge_memcg(memcg, nr_pages);
 }
 
 /*
index 4dd3d2883382e800b7231760fb37ef55bb48697d..a00866981175b034588b864669532b07681a5d14 100644 (file)
@@ -2884,13 +2884,13 @@ void memcg_kmem_put_cache(struct kmem_cache *cachep)
  * __memcg_kmem_charge_memcg: charge a kmem page
  * @memcg: memory cgroup to charge
  * @gfp: reclaim mode
- * @order: allocation order
+ * @nr_pages: number of pages to charge
  *
  * Returns 0 on success, an error code on failure.
  */
-int __memcg_kmem_charge_memcg(struct mem_cgroup *memcg, gfp_t gfp, int order)
+int __memcg_kmem_charge_memcg(struct mem_cgroup *memcg, gfp_t gfp,
+                             unsigned int nr_pages)
 {
-       unsigned int nr_pages = 1 << order;
        struct page_counter *counter;
        int ret;
 
@@ -2934,7 +2934,7 @@ int __memcg_kmem_charge_page(struct page *page, gfp_t gfp, int order)
 
        memcg = get_mem_cgroup_from_current();
        if (!mem_cgroup_is_root(memcg)) {
-               ret = __memcg_kmem_charge_memcg(memcg, gfp, order);
+               ret = __memcg_kmem_charge_memcg(memcg, gfp, 1 << order);
                if (!ret) {
                        page->mem_cgroup = memcg;
                        __SetPageKmemcg(page);
index e7da63fb8211f6bc59ed8bfffc96af520d356075..d96c87a30a9b260f22bbf02af68e7aa6b766e800 100644 (file)
--- a/mm/slab.h
+++ b/mm/slab.h
@@ -365,7 +365,7 @@ static __always_inline int memcg_charge_slab(struct page *page,
                return 0;
        }
 
-       ret = memcg_kmem_charge_memcg(memcg, gfp, order);
+       ret = memcg_kmem_charge_memcg(memcg, gfp, 1 << order);
        if (ret)
                goto out;