From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751429Ab2GIP24 (ORCPT ); Mon, 9 Jul 2012 11:28:56 -0400 Received: from cantor2.suse.de ([195.135.220.15]:45180 "EHLO mx2.suse.de" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1750716Ab2GIP2y (ORCPT ); Mon, 9 Jul 2012 11:28:54 -0400 Date: Mon, 9 Jul 2012 17:28:51 +0200 From: Michal Hocko To: Johannes Weiner Cc: Andrew Morton , KAMEZAWA Hiroyuki , Hugh Dickins , David Rientjes , linux-mm@kvack.org, cgroups@vger.kernel.org, linux-kernel@vger.kernel.org Subject: Re: [patch 09/11] mm: memcg: split swapin charge function into private and public part Message-ID: <20120709152851.GL4627@tiehlicka.suse.cz> References: <1341449103-1986-1-git-send-email-hannes@cmpxchg.org> <1341449103-1986-10-git-send-email-hannes@cmpxchg.org> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <1341449103-1986-10-git-send-email-hannes@cmpxchg.org> User-Agent: Mutt/1.5.21 (2010-09-15) Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Thu 05-07-12 02:45:01, Johannes Weiner wrote: > When shmem is charged upon swapin, it does not need to check twice > whether the memory controller is enabled. > > Also, shmem pages do not have to be checked for everything that > regular anon pages have to be checked for, so let shmem use the > internal version directly and allow future patches to move around > checks that are only required when swapping in anon pages. > > Signed-off-by: Johannes Weiner Acked-by: Michal Hocko > --- > mm/memcontrol.c | 24 +++++++++++++++--------- > 1 files changed, 15 insertions(+), 9 deletions(-) > > diff --git a/mm/memcontrol.c b/mm/memcontrol.c > index 6fe4101..a8bf86a 100644 > --- a/mm/memcontrol.c > +++ b/mm/memcontrol.c > @@ -2734,18 +2734,14 @@ int mem_cgroup_newpage_charge(struct page *page, > * struct page_cgroup is acquired. This refcnt will be consumed by > * "commit()" or removed by "cancel()" > */ > -int mem_cgroup_try_charge_swapin(struct mm_struct *mm, > - struct page *page, > - gfp_t mask, struct mem_cgroup **memcgp) > +static int __mem_cgroup_try_charge_swapin(struct mm_struct *mm, > + struct page *page, > + gfp_t mask, > + struct mem_cgroup **memcgp) > { > struct mem_cgroup *memcg; > int ret; > > - *memcgp = NULL; > - > - if (mem_cgroup_disabled()) > - return 0; > - > if (!do_swap_account) > goto charge_cur_mm; > /* > @@ -2772,6 +2768,15 @@ int mem_cgroup_try_charge_swapin(struct mm_struct *mm, > return ret; > } > > +int mem_cgroup_try_charge_swapin(struct mm_struct *mm, struct page *page, > + gfp_t gfp_mask, struct mem_cgroup **memcgp) > +{ > + *memcgp = NULL; > + if (mem_cgroup_disabled()) > + return 0; > + return __mem_cgroup_try_charge_swapin(mm, page, gfp_mask, memcgp); > +} > + > void mem_cgroup_cancel_charge_swapin(struct mem_cgroup *memcg) > { > if (mem_cgroup_disabled()) > @@ -2833,7 +2838,8 @@ int mem_cgroup_cache_charge(struct page *page, struct mm_struct *mm, > if (!PageSwapCache(page)) > ret = mem_cgroup_charge_common(page, mm, gfp_mask, type); > else { /* page is swapcache/shmem */ > - ret = mem_cgroup_try_charge_swapin(mm, page, gfp_mask, &memcg); > + ret = __mem_cgroup_try_charge_swapin(mm, page, > + gfp_mask, &memcg); > if (!ret) > __mem_cgroup_commit_charge_swapin(page, memcg, type); > } > -- > 1.7.7.6 > -- Michal Hocko SUSE Labs SUSE LINUX s.r.o. Lihovarska 1060/12 190 00 Praha 9 Czech Republic From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from psmtp.com (na3sys010amx181.postini.com [74.125.245.181]) by kanga.kvack.org (Postfix) with SMTP id 5289C6B006E for ; Mon, 9 Jul 2012 11:28:54 -0400 (EDT) Date: Mon, 9 Jul 2012 17:28:51 +0200 From: Michal Hocko Subject: Re: [patch 09/11] mm: memcg: split swapin charge function into private and public part Message-ID: <20120709152851.GL4627@tiehlicka.suse.cz> References: <1341449103-1986-1-git-send-email-hannes@cmpxchg.org> <1341449103-1986-10-git-send-email-hannes@cmpxchg.org> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <1341449103-1986-10-git-send-email-hannes@cmpxchg.org> Sender: owner-linux-mm@kvack.org List-ID: To: Johannes Weiner Cc: Andrew Morton , KAMEZAWA Hiroyuki , Hugh Dickins , David Rientjes , linux-mm@kvack.org, cgroups@vger.kernel.org, linux-kernel@vger.kernel.org On Thu 05-07-12 02:45:01, Johannes Weiner wrote: > When shmem is charged upon swapin, it does not need to check twice > whether the memory controller is enabled. > > Also, shmem pages do not have to be checked for everything that > regular anon pages have to be checked for, so let shmem use the > internal version directly and allow future patches to move around > checks that are only required when swapping in anon pages. > > Signed-off-by: Johannes Weiner Acked-by: Michal Hocko > --- > mm/memcontrol.c | 24 +++++++++++++++--------- > 1 files changed, 15 insertions(+), 9 deletions(-) > > diff --git a/mm/memcontrol.c b/mm/memcontrol.c > index 6fe4101..a8bf86a 100644 > --- a/mm/memcontrol.c > +++ b/mm/memcontrol.c > @@ -2734,18 +2734,14 @@ int mem_cgroup_newpage_charge(struct page *page, > * struct page_cgroup is acquired. This refcnt will be consumed by > * "commit()" or removed by "cancel()" > */ > -int mem_cgroup_try_charge_swapin(struct mm_struct *mm, > - struct page *page, > - gfp_t mask, struct mem_cgroup **memcgp) > +static int __mem_cgroup_try_charge_swapin(struct mm_struct *mm, > + struct page *page, > + gfp_t mask, > + struct mem_cgroup **memcgp) > { > struct mem_cgroup *memcg; > int ret; > > - *memcgp = NULL; > - > - if (mem_cgroup_disabled()) > - return 0; > - > if (!do_swap_account) > goto charge_cur_mm; > /* > @@ -2772,6 +2768,15 @@ int mem_cgroup_try_charge_swapin(struct mm_struct *mm, > return ret; > } > > +int mem_cgroup_try_charge_swapin(struct mm_struct *mm, struct page *page, > + gfp_t gfp_mask, struct mem_cgroup **memcgp) > +{ > + *memcgp = NULL; > + if (mem_cgroup_disabled()) > + return 0; > + return __mem_cgroup_try_charge_swapin(mm, page, gfp_mask, memcgp); > +} > + > void mem_cgroup_cancel_charge_swapin(struct mem_cgroup *memcg) > { > if (mem_cgroup_disabled()) > @@ -2833,7 +2838,8 @@ int mem_cgroup_cache_charge(struct page *page, struct mm_struct *mm, > if (!PageSwapCache(page)) > ret = mem_cgroup_charge_common(page, mm, gfp_mask, type); > else { /* page is swapcache/shmem */ > - ret = mem_cgroup_try_charge_swapin(mm, page, gfp_mask, &memcg); > + ret = __mem_cgroup_try_charge_swapin(mm, page, > + gfp_mask, &memcg); > if (!ret) > __mem_cgroup_commit_charge_swapin(page, memcg, type); > } > -- > 1.7.7.6 > -- Michal Hocko SUSE Labs SUSE LINUX s.r.o. Lihovarska 1060/12 190 00 Praha 9 Czech Republic -- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to majordomo@kvack.org. For more info on Linux MM, see: http://www.linux-mm.org/ . Don't email: email@kvack.org From mboxrd@z Thu Jan 1 00:00:00 1970 From: Michal Hocko Subject: Re: [patch 09/11] mm: memcg: split swapin charge function into private and public part Date: Mon, 9 Jul 2012 17:28:51 +0200 Message-ID: <20120709152851.GL4627@tiehlicka.suse.cz> References: <1341449103-1986-1-git-send-email-hannes@cmpxchg.org> <1341449103-1986-10-git-send-email-hannes@cmpxchg.org> Mime-Version: 1.0 Return-path: Content-Disposition: inline In-Reply-To: <1341449103-1986-10-git-send-email-hannes-druUgvl0LCNAfugRpC6u6w@public.gmane.org> Sender: cgroups-owner-u79uwXL29TY76Z2rM5mHXA@public.gmane.org List-ID: Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit To: Johannes Weiner Cc: Andrew Morton , KAMEZAWA Hiroyuki , Hugh Dickins , David Rientjes , linux-mm-Bw31MaZKKs3YtjvyW6yDsg@public.gmane.org, cgroups-u79uwXL29TY76Z2rM5mHXA@public.gmane.org, linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org On Thu 05-07-12 02:45:01, Johannes Weiner wrote: > When shmem is charged upon swapin, it does not need to check twice > whether the memory controller is enabled. > > Also, shmem pages do not have to be checked for everything that > regular anon pages have to be checked for, so let shmem use the > internal version directly and allow future patches to move around > checks that are only required when swapping in anon pages. > > Signed-off-by: Johannes Weiner Acked-by: Michal Hocko > --- > mm/memcontrol.c | 24 +++++++++++++++--------- > 1 files changed, 15 insertions(+), 9 deletions(-) > > diff --git a/mm/memcontrol.c b/mm/memcontrol.c > index 6fe4101..a8bf86a 100644 > --- a/mm/memcontrol.c > +++ b/mm/memcontrol.c > @@ -2734,18 +2734,14 @@ int mem_cgroup_newpage_charge(struct page *page, > * struct page_cgroup is acquired. This refcnt will be consumed by > * "commit()" or removed by "cancel()" > */ > -int mem_cgroup_try_charge_swapin(struct mm_struct *mm, > - struct page *page, > - gfp_t mask, struct mem_cgroup **memcgp) > +static int __mem_cgroup_try_charge_swapin(struct mm_struct *mm, > + struct page *page, > + gfp_t mask, > + struct mem_cgroup **memcgp) > { > struct mem_cgroup *memcg; > int ret; > > - *memcgp = NULL; > - > - if (mem_cgroup_disabled()) > - return 0; > - > if (!do_swap_account) > goto charge_cur_mm; > /* > @@ -2772,6 +2768,15 @@ int mem_cgroup_try_charge_swapin(struct mm_struct *mm, > return ret; > } > > +int mem_cgroup_try_charge_swapin(struct mm_struct *mm, struct page *page, > + gfp_t gfp_mask, struct mem_cgroup **memcgp) > +{ > + *memcgp = NULL; > + if (mem_cgroup_disabled()) > + return 0; > + return __mem_cgroup_try_charge_swapin(mm, page, gfp_mask, memcgp); > +} > + > void mem_cgroup_cancel_charge_swapin(struct mem_cgroup *memcg) > { > if (mem_cgroup_disabled()) > @@ -2833,7 +2838,8 @@ int mem_cgroup_cache_charge(struct page *page, struct mm_struct *mm, > if (!PageSwapCache(page)) > ret = mem_cgroup_charge_common(page, mm, gfp_mask, type); > else { /* page is swapcache/shmem */ > - ret = mem_cgroup_try_charge_swapin(mm, page, gfp_mask, &memcg); > + ret = __mem_cgroup_try_charge_swapin(mm, page, > + gfp_mask, &memcg); > if (!ret) > __mem_cgroup_commit_charge_swapin(page, memcg, type); > } > -- > 1.7.7.6 > -- Michal Hocko SUSE Labs SUSE LINUX s.r.o. Lihovarska 1060/12 190 00 Praha 9 Czech Republic