lists.openwall.net | lists / announce owl-users owl-dev john-users john-dev passwdqc-users yescrypt popa3d-users / oss-security kernel-hardening musl sabotage tlsify passwords / crypt-dev xvendor / Bugtraq Full-Disclosure linux-kernel linux-netdev linux-ext4 linux-hardening linux-cve-announce PHC | |
Open Source and information security mailing list archives
| ||
|
Date: Tue, 4 Feb 2014 14:28:59 +0100 From: Michal Hocko <mhocko@...e.cz> To: Johannes Weiner <hannes@...xchg.org> Cc: Andrew Morton <akpm@...ux-foundation.org>, KAMEZAWA Hiroyuki <kamezawa.hiroyu@...fujitsu.com>, KOSAKI Motohiro <kosaki.motohiro@...fujitsu.com>, LKML <linux-kernel@...r.kernel.org>, <linux-mm@...ck.org> Subject: [PATCH -v2 5/6] memcg, kmem: clean up memcg parameter handling memcg_kmem_newpage_charge doesn't always set the given memcg parameter. Some early escape paths skip setting *memcg while __memcg_kmem_newpage_charge down the call chain sets *memcg even if no memcg is charged due to other escape paths. The current code is correct because the memcg is initialized to NULL at the highest level in __alloc_pages_nodemask but this all is very confusing and error prone. Let's make the semantic clear and move the memcg parameter initialization to the highest level of kmem accounting (memcg_kmem_newpage_charge). Signed-off-by: Michal Hocko <mhocko@...e.cz> --- include/linux/memcontrol.h | 4 +++- mm/memcontrol.c | 2 -- mm/page_alloc.c | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/include/linux/memcontrol.h b/include/linux/memcontrol.h index abd0113b6620..7bcb39668917 100644 --- a/include/linux/memcontrol.h +++ b/include/linux/memcontrol.h @@ -522,11 +522,13 @@ void kmem_cache_destroy_memcg_children(struct kmem_cache *s); * allocation. * * We return true automatically if this allocation is not to be accounted to - * any memcg. + * any memcg when *memcg is set to NULL. */ static inline bool memcg_kmem_newpage_charge(gfp_t gfp, struct mem_cgroup **memcg, int order) { + *memcg = NULL; + if (!memcg_kmem_enabled()) return true; diff --git a/mm/memcontrol.c b/mm/memcontrol.c index d06743a9a765..46b9f461cedf 100644 --- a/mm/memcontrol.c +++ b/mm/memcontrol.c @@ -3637,8 +3637,6 @@ __memcg_kmem_newpage_charge(gfp_t gfp, struct mem_cgroup **_memcg, int order) struct mem_cgroup *memcg; int ret; - *_memcg = NULL; - /* * Disabling accounting is only relevant for some specific memcg * internal allocations. Therefore we would initially not have such diff --git a/mm/page_alloc.c b/mm/page_alloc.c index e3758a09a009..6f6099d38772 100644 --- a/mm/page_alloc.c +++ b/mm/page_alloc.c @@ -2692,7 +2692,7 @@ __alloc_pages_nodemask(gfp_t gfp_mask, unsigned int order, int migratetype = allocflags_to_migratetype(gfp_mask); unsigned int cpuset_mems_cookie; int alloc_flags = ALLOC_WMARK_LOW|ALLOC_CPUSET; - struct mem_cgroup *memcg = NULL; + struct mem_cgroup *memcg; gfp_mask &= gfp_allowed_mask; -- 1.9.rc1 -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@...r.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
Powered by blists - more mailing lists