Skip to content

Commit

Permalink
mm: kmem: switch to nr_pages in (__)memcg_kmem_charge_memcg()
Browse files Browse the repository at this point in the history
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>
  • Loading branch information
Roman Gushchin authored and Linus Torvalds committed Apr 2, 2020
1 parent f4b00ea commit 92d0510
Show file tree
Hide file tree
Showing 3 changed files with 11 additions and 10 deletions.
11 changes: 6 additions & 5 deletions include/linux/memcontrol.h
Original file line number Diff line number Diff line change
Expand Up @@ -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);

Expand Down Expand Up @@ -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);
}

/*
Expand Down
8 changes: 4 additions & 4 deletions mm/memcontrol.c
Original file line number Diff line number Diff line change
Expand Up @@ -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;

Expand Down Expand Up @@ -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);
Expand Down
2 changes: 1 addition & 1 deletion mm/slab.h
Original file line number Diff line number Diff line change
Expand Up @@ -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;

Expand Down

0 comments on commit 92d0510

Please sign in to comment.