diff options
author | Vladimir Davydov <vdavydov@virtuozzo.com> | 2015-11-05 21:49:04 -0500 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2015-11-05 22:34:48 -0500 |
commit | df4065516b0dbfa35ac0e9b8124d441221c0a285 (patch) | |
tree | 4b96cb7cbe15db5bb219c107904d2ed495b63a87 /mm | |
parent | f3ccb2c42297757d2e9b820ad37960462df7b7c1 (diff) |
memcg: simplify and inline __mem_cgroup_from_kmem
Before the previous patch ("memcg: unify slab and other kmem pages
charging"), __mem_cgroup_from_kmem had to handle two types of kmem - slab
pages and pages allocated with alloc_kmem_pages - memcg in the page
struct. Now we can unify it. Since after it, this function becomes tiny
we can fold it into mem_cgroup_from_kmem.
[hughd@google.com: move mem_cgroup_from_kmem into list_lru.c]
Signed-off-by: Vladimir Davydov <vdavydov@virtuozzo.com>
Acked-by: Michal Hocko <mhocko@suse.com>
Cc: Johannes Weiner <hannes@cmpxchg.org>
Cc: Hugh Dickins <hughd@google.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Diffstat (limited to 'mm')
-rw-r--r-- | mm/list_lru.c | 10 | ||||
-rw-r--r-- | mm/memcontrol.c | 18 |
2 files changed, 10 insertions, 18 deletions
diff --git a/mm/list_lru.c b/mm/list_lru.c index 28237476b055..afc71ea9a381 100644 --- a/mm/list_lru.c +++ b/mm/list_lru.c | |||
@@ -63,6 +63,16 @@ list_lru_from_memcg_idx(struct list_lru_node *nlru, int idx) | |||
63 | return &nlru->lru; | 63 | return &nlru->lru; |
64 | } | 64 | } |
65 | 65 | ||
66 | static __always_inline struct mem_cgroup *mem_cgroup_from_kmem(void *ptr) | ||
67 | { | ||
68 | struct page *page; | ||
69 | |||
70 | if (!memcg_kmem_enabled()) | ||
71 | return NULL; | ||
72 | page = virt_to_head_page(ptr); | ||
73 | return page->mem_cgroup; | ||
74 | } | ||
75 | |||
66 | static inline struct list_lru_one * | 76 | static inline struct list_lru_one * |
67 | list_lru_from_kmem(struct list_lru_node *nlru, void *ptr) | 77 | list_lru_from_kmem(struct list_lru_node *nlru, void *ptr) |
68 | { | 78 | { |
diff --git a/mm/memcontrol.c b/mm/memcontrol.c index 9575cff544fa..c0111cb667b5 100644 --- a/mm/memcontrol.c +++ b/mm/memcontrol.c | |||
@@ -2430,24 +2430,6 @@ void __memcg_kmem_uncharge(struct page *page, int order) | |||
2430 | page->mem_cgroup = NULL; | 2430 | page->mem_cgroup = NULL; |
2431 | css_put_many(&memcg->css, nr_pages); | 2431 | css_put_many(&memcg->css, nr_pages); |
2432 | } | 2432 | } |
2433 | |||
2434 | struct mem_cgroup *__mem_cgroup_from_kmem(void *ptr) | ||
2435 | { | ||
2436 | struct mem_cgroup *memcg = NULL; | ||
2437 | struct kmem_cache *cachep; | ||
2438 | struct page *page; | ||
2439 | |||
2440 | page = virt_to_head_page(ptr); | ||
2441 | if (PageSlab(page)) { | ||
2442 | cachep = page->slab_cache; | ||
2443 | if (!is_root_cache(cachep)) | ||
2444 | memcg = cachep->memcg_params.memcg; | ||
2445 | } else | ||
2446 | /* page allocated by alloc_kmem_pages */ | ||
2447 | memcg = page->mem_cgroup; | ||
2448 | |||
2449 | return memcg; | ||
2450 | } | ||
2451 | #endif /* CONFIG_MEMCG_KMEM */ | 2433 | #endif /* CONFIG_MEMCG_KMEM */ |
2452 | 2434 | ||
2453 | #ifdef CONFIG_TRANSPARENT_HUGEPAGE | 2435 | #ifdef CONFIG_TRANSPARENT_HUGEPAGE |