All of lore.kernel.org
 help / color / mirror / Atom feed
From: KAMEZAWA Hiroyuki <kamezawa.hiroyu@jp.fujitsu.com>
To: KAMEZAWA Hiroyuki <kamezawa.hiroyu@jp.fujitsu.com>
Cc: Daisuke Nishimura <nishimura@mxp.nes.nec.co.jp>,
	Daisuke Nishimura <d-nishimura@mtf.biglobe.ne.jp>,
	"linux-mm@kvack.org" <linux-mm@kvack.org>,
	"balbir@linux.vnet.ibm.com" <balbir@linux.vnet.ibm.com>,
	"akpm@linux-foundation.org" <akpm@linux-foundation.org>,
	mingo@elte.hu,
	"linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>
Subject: Re: [PATCH][BUGFIX] memcg: fix for deadlock between lock_page_cgroup and mapping tree_lock
Date: Wed, 13 May 2009 12:55:58 +0900	[thread overview]
Message-ID: <20090513125558.57be0db6.kamezawa.hiroyu@jp.fujitsu.com> (raw)
In-Reply-To: <20090513093250.7803d3d0.kamezawa.hiroyu@jp.fujitsu.com>

On Wed, 13 May 2009 09:32:50 +0900
KAMEZAWA Hiroyuki <kamezawa.hiroyu@jp.fujitsu.com> wrote:

> On Wed, 13 May 2009 09:28:28 +0900
> Daisuke Nishimura <nishimura@mxp.nes.nec.co.jp> wrote:
> 
> > On Wed, 13 May 2009 08:59:49 +0900, KAMEZAWA Hiroyuki <kamezawa.hiroyu@jp.fujitsu.com> wrote:
> > > On Tue, 12 May 2009 19:58:23 +0900
> > > Daisuke Nishimura <d-nishimura@mtf.biglobe.ne.jp> wrote:
> > > 
> > > > On Tue, 12 May 2009 17:13:56 +0900
> > > > KAMEZAWA Hiroyuki <kamezawa.hiroyu@jp.fujitsu.com> wrote:
> > > > 
> > > > > On Tue, 12 May 2009 17:00:07 +0900
> > > > > Daisuke Nishimura <nishimura@mxp.nes.nec.co.jp> wrote:
> > > > > > hmm, I see.
> > > > > > cache_charge is outside of tree_lock, so moving uncharge would make sense.
> > > > > > IMHO, we should make the period of spinlock as small as possible,
> > > > > > and charge/uncharge of pagecache/swapcache is protected by page lock, not tree_lock.
> > > > > > 
> > > > > How about this ?
> > > > Looks good conceptually, but it cannot be built :)
> > > > 
> > > > It needs a fix like this.
> > > > Passed build test with enabling/disabling both CONFIG_MEM_RES_CTLR
> > > > and CONFIG_SWAP.
> > > > 
> > > ok, will update. can I add you Signed-off-by on the patch ?
> > > 
> > Sure.
> > 
> > 	Signed-off-by: Daisuke Nishimura <nishimura@mxp.nes.nec.co.jp>
> > 
> > The patch(with my fix applied) seems to work fine, I need run it
> > for more long time though.
> > 
> Ok, I'll treat this as an independent issue, not as "4/4".
> 
Could you merge mine and yours and send it to Andrew ?
I think this is a fix for dead-lock and priority is very high.
I foumd my system broken and installing the whole system again, now.
So, I can't post patch today.


> Thanks,
> -Kame
> 
> 
> > > Thanks,
> > > -Kame
> > > > ===
> > > >  include/linux/swap.h |    5 +++++
> > > >  mm/memcontrol.c      |    4 +++-
> > > >  mm/swap_state.c      |    4 +---
> > > >  mm/vmscan.c          |    2 +-
> > > >  4 files changed, 10 insertions(+), 5 deletions(-)
> > > > 
> > > > diff --git a/include/linux/swap.h b/include/linux/swap.h
> > > > index caf0767..6ea541d 100644
> > > > --- a/include/linux/swap.h
> > > > +++ b/include/linux/swap.h
> > > > @@ -431,6 +431,11 @@ static inline swp_entry_t get_swap_page(void)
> > > >  #define has_swap_token(x) 0
> > > >  #define disable_swap_token() do { } while(0)
> > > >  
> > > > +static inline void
> > > > +mem_cgroup_uncharge_swapcache(struct page *page, swp_entry_t ent)
> > > > +{
> > > > +}
> > > > +
> > > >  #endif /* CONFIG_SWAP */
> > > >  #endif /* __KERNEL__*/
> > > >  #endif /* _LINUX_SWAP_H */
> > > > diff --git a/mm/memcontrol.c b/mm/memcontrol.c
> > > > index 0c9c1ad..89523cf 100644
> > > > --- a/mm/memcontrol.c
> > > > +++ b/mm/memcontrol.c
> > > > @@ -1488,8 +1488,9 @@ void mem_cgroup_uncharge_cache_page(struct page *page)
> > > >  	__mem_cgroup_uncharge_common(page, MEM_CGROUP_CHARGE_TYPE_CACHE);
> > > >  }
> > > >  
> > > > +#ifdef CONFIG_SWAP
> > > >  /*
> > > > - * called from __delete_from_swap_cache() and drop "page" account.
> > > > + * called after __delete_from_swap_cache() and drop "page" account.
> > > >   * memcg information is recorded to swap_cgroup of "ent"
> > > >   */
> > > >  void mem_cgroup_uncharge_swapcache(struct page *page, swp_entry_t ent)
> > > > @@ -1506,6 +1507,7 @@ void mem_cgroup_uncharge_swapcache(struct page *page, swp_entry_t ent)
> > > >  	if (memcg)
> > > >  		css_put(&memcg->css);
> > > >  }
> > > > +#endif
> > > >  
> > > >  #ifdef CONFIG_CGROUP_MEM_RES_CTLR_SWAP
> > > >  /*
> > > > diff --git a/mm/swap_state.c b/mm/swap_state.c
> > > > index 87f10d4..7624c89 100644
> > > > --- a/mm/swap_state.c
> > > > +++ b/mm/swap_state.c
> > > > @@ -109,8 +109,6 @@ int add_to_swap_cache(struct page *page, swp_entry_t entry, gfp_t gfp_mask)
> > > >   */
> > > >  void __delete_from_swap_cache(struct page *page)
> > > >  {
> > > > -	swp_entry_t ent = {.val = page_private(page)};
> > > > -
> > > >  	VM_BUG_ON(!PageLocked(page));
> > > >  	VM_BUG_ON(!PageSwapCache(page));
> > > >  	VM_BUG_ON(PageWriteback(page));
> > > > @@ -190,7 +188,7 @@ void delete_from_swap_cache(struct page *page)
> > > >  	__delete_from_swap_cache(page);
> > > >  	spin_unlock_irq(&swapper_space.tree_lock);
> > > >  
> > > > -	mem_cgroup_uncharge_swapcache(page, ent);
> > > > +	mem_cgroup_uncharge_swapcache(page, entry);
> > > >  	swap_free(entry);
> > > >  	page_cache_release(page);
> > > >  }
> > > > diff --git a/mm/vmscan.c b/mm/vmscan.c
> > > > index 6c5988d..a7d7a06 100644
> > > > --- a/mm/vmscan.c
> > > > +++ b/mm/vmscan.c
> > > > @@ -470,7 +470,7 @@ static int __remove_mapping(struct address_space *mapping, struct page *page)
> > > >  		swp_entry_t swap = { .val = page_private(page) };
> > > >  		__delete_from_swap_cache(page);
> > > >  		spin_unlock_irq(&mapping->tree_lock);
> > > > -		mem_cgroup_uncharge_swapcache(page);
> > > > +		mem_cgroup_uncharge_swapcache(page, swap);
> > > >  		swap_free(swap);
> > > >  	} else {
> > > >  		__remove_from_page_cache(page);
> > > > ===
> > > > --
> > > > To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
> > > > the body of a message to majordomo@vger.kernel.org
> > > > More majordomo info at  http://vger.kernel.org/majordomo-info.html
> > > > Please read the FAQ at  http://www.tux.org/lkml/
> > > > 
> > > 
> > 
> 
> --
> 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: <a href=mailto:"dont@kvack.org"> email@kvack.org </a>
> 


WARNING: multiple messages have this Message-ID (diff)
From: KAMEZAWA Hiroyuki <kamezawa.hiroyu@jp.fujitsu.com>
To: KAMEZAWA Hiroyuki <kamezawa.hiroyu@jp.fujitsu.com>
Cc: Daisuke Nishimura <nishimura@mxp.nes.nec.co.jp>,
	Daisuke Nishimura <d-nishimura@mtf.biglobe.ne.jp>,
	"linux-mm@kvack.org" <linux-mm@kvack.org>,
	"balbir@linux.vnet.ibm.com" <balbir@linux.vnet.ibm.com>,
	"akpm@linux-foundation.org" <akpm@linux-foundation.org>,
	mingo@elte.hu,
	"linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>
Subject: Re: [PATCH][BUGFIX] memcg: fix for deadlock between lock_page_cgroup and mapping tree_lock
Date: Wed, 13 May 2009 12:55:58 +0900	[thread overview]
Message-ID: <20090513125558.57be0db6.kamezawa.hiroyu@jp.fujitsu.com> (raw)
In-Reply-To: <20090513093250.7803d3d0.kamezawa.hiroyu@jp.fujitsu.com>

On Wed, 13 May 2009 09:32:50 +0900
KAMEZAWA Hiroyuki <kamezawa.hiroyu@jp.fujitsu.com> wrote:

> On Wed, 13 May 2009 09:28:28 +0900
> Daisuke Nishimura <nishimura@mxp.nes.nec.co.jp> wrote:
> 
> > On Wed, 13 May 2009 08:59:49 +0900, KAMEZAWA Hiroyuki <kamezawa.hiroyu@jp.fujitsu.com> wrote:
> > > On Tue, 12 May 2009 19:58:23 +0900
> > > Daisuke Nishimura <d-nishimura@mtf.biglobe.ne.jp> wrote:
> > > 
> > > > On Tue, 12 May 2009 17:13:56 +0900
> > > > KAMEZAWA Hiroyuki <kamezawa.hiroyu@jp.fujitsu.com> wrote:
> > > > 
> > > > > On Tue, 12 May 2009 17:00:07 +0900
> > > > > Daisuke Nishimura <nishimura@mxp.nes.nec.co.jp> wrote:
> > > > > > hmm, I see.
> > > > > > cache_charge is outside of tree_lock, so moving uncharge would make sense.
> > > > > > IMHO, we should make the period of spinlock as small as possible,
> > > > > > and charge/uncharge of pagecache/swapcache is protected by page lock, not tree_lock.
> > > > > > 
> > > > > How about this ?
> > > > Looks good conceptually, but it cannot be built :)
> > > > 
> > > > It needs a fix like this.
> > > > Passed build test with enabling/disabling both CONFIG_MEM_RES_CTLR
> > > > and CONFIG_SWAP.
> > > > 
> > > ok, will update. can I add you Signed-off-by on the patch ?
> > > 
> > Sure.
> > 
> > 	Signed-off-by: Daisuke Nishimura <nishimura@mxp.nes.nec.co.jp>
> > 
> > The patch(with my fix applied) seems to work fine, I need run it
> > for more long time though.
> > 
> Ok, I'll treat this as an independent issue, not as "4/4".
> 
Could you merge mine and yours and send it to Andrew ?
I think this is a fix for dead-lock and priority is very high.
I foumd my system broken and installing the whole system again, now.
So, I can't post patch today.


> Thanks,
> -Kame
> 
> 
> > > Thanks,
> > > -Kame
> > > > ===
> > > >  include/linux/swap.h |    5 +++++
> > > >  mm/memcontrol.c      |    4 +++-
> > > >  mm/swap_state.c      |    4 +---
> > > >  mm/vmscan.c          |    2 +-
> > > >  4 files changed, 10 insertions(+), 5 deletions(-)
> > > > 
> > > > diff --git a/include/linux/swap.h b/include/linux/swap.h
> > > > index caf0767..6ea541d 100644
> > > > --- a/include/linux/swap.h
> > > > +++ b/include/linux/swap.h
> > > > @@ -431,6 +431,11 @@ static inline swp_entry_t get_swap_page(void)
> > > >  #define has_swap_token(x) 0
> > > >  #define disable_swap_token() do { } while(0)
> > > >  
> > > > +static inline void
> > > > +mem_cgroup_uncharge_swapcache(struct page *page, swp_entry_t ent)
> > > > +{
> > > > +}
> > > > +
> > > >  #endif /* CONFIG_SWAP */
> > > >  #endif /* __KERNEL__*/
> > > >  #endif /* _LINUX_SWAP_H */
> > > > diff --git a/mm/memcontrol.c b/mm/memcontrol.c
> > > > index 0c9c1ad..89523cf 100644
> > > > --- a/mm/memcontrol.c
> > > > +++ b/mm/memcontrol.c
> > > > @@ -1488,8 +1488,9 @@ void mem_cgroup_uncharge_cache_page(struct page *page)
> > > >  	__mem_cgroup_uncharge_common(page, MEM_CGROUP_CHARGE_TYPE_CACHE);
> > > >  }
> > > >  
> > > > +#ifdef CONFIG_SWAP
> > > >  /*
> > > > - * called from __delete_from_swap_cache() and drop "page" account.
> > > > + * called after __delete_from_swap_cache() and drop "page" account.
> > > >   * memcg information is recorded to swap_cgroup of "ent"
> > > >   */
> > > >  void mem_cgroup_uncharge_swapcache(struct page *page, swp_entry_t ent)
> > > > @@ -1506,6 +1507,7 @@ void mem_cgroup_uncharge_swapcache(struct page *page, swp_entry_t ent)
> > > >  	if (memcg)
> > > >  		css_put(&memcg->css);
> > > >  }
> > > > +#endif
> > > >  
> > > >  #ifdef CONFIG_CGROUP_MEM_RES_CTLR_SWAP
> > > >  /*
> > > > diff --git a/mm/swap_state.c b/mm/swap_state.c
> > > > index 87f10d4..7624c89 100644
> > > > --- a/mm/swap_state.c
> > > > +++ b/mm/swap_state.c
> > > > @@ -109,8 +109,6 @@ int add_to_swap_cache(struct page *page, swp_entry_t entry, gfp_t gfp_mask)
> > > >   */
> > > >  void __delete_from_swap_cache(struct page *page)
> > > >  {
> > > > -	swp_entry_t ent = {.val = page_private(page)};
> > > > -
> > > >  	VM_BUG_ON(!PageLocked(page));
> > > >  	VM_BUG_ON(!PageSwapCache(page));
> > > >  	VM_BUG_ON(PageWriteback(page));
> > > > @@ -190,7 +188,7 @@ void delete_from_swap_cache(struct page *page)
> > > >  	__delete_from_swap_cache(page);
> > > >  	spin_unlock_irq(&swapper_space.tree_lock);
> > > >  
> > > > -	mem_cgroup_uncharge_swapcache(page, ent);
> > > > +	mem_cgroup_uncharge_swapcache(page, entry);
> > > >  	swap_free(entry);
> > > >  	page_cache_release(page);
> > > >  }
> > > > diff --git a/mm/vmscan.c b/mm/vmscan.c
> > > > index 6c5988d..a7d7a06 100644
> > > > --- a/mm/vmscan.c
> > > > +++ b/mm/vmscan.c
> > > > @@ -470,7 +470,7 @@ static int __remove_mapping(struct address_space *mapping, struct page *page)
> > > >  		swp_entry_t swap = { .val = page_private(page) };
> > > >  		__delete_from_swap_cache(page);
> > > >  		spin_unlock_irq(&mapping->tree_lock);
> > > > -		mem_cgroup_uncharge_swapcache(page);
> > > > +		mem_cgroup_uncharge_swapcache(page, swap);
> > > >  		swap_free(swap);
> > > >  	} else {
> > > >  		__remove_from_page_cache(page);
> > > > ===
> > > > --
> > > > To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
> > > > the body of a message to majordomo@vger.kernel.org
> > > > More majordomo info at  http://vger.kernel.org/majordomo-info.html
> > > > Please read the FAQ at  http://www.tux.org/lkml/
> > > > 
> > > 
> > 
> 
> --
> 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: <a href=mailto:"dont@kvack.org"> email@kvack.org </a>
> 

--
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: <a href=mailto:"dont@kvack.org"> email@kvack.org </a>

  reply	other threads:[~2009-05-13  3:57 UTC|newest]

Thread overview: 52+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2009-05-12  1:44 [PATCH 0/3] fix stale swap cache account leak in memcg v7 KAMEZAWA Hiroyuki
2009-05-12  1:44 ` KAMEZAWA Hiroyuki
2009-05-12  1:45 ` [PATCH 1/3] add check for mem cgroup is activated KAMEZAWA Hiroyuki
2009-05-12  1:45   ` KAMEZAWA Hiroyuki
2009-05-12  1:46 ` [PATCH 2/3] fix swap cache account leak at swapin-readahead KAMEZAWA Hiroyuki
2009-05-12  1:46   ` KAMEZAWA Hiroyuki
2009-05-12  4:32   ` Daisuke Nishimura
2009-05-12  4:32     ` Daisuke Nishimura
2009-05-12 11:24   ` Johannes Weiner
2009-05-12 11:24     ` Johannes Weiner
2009-05-12 23:58     ` KAMEZAWA Hiroyuki
2009-05-12 23:58       ` KAMEZAWA Hiroyuki
2009-05-13 11:18       ` Johannes Weiner
2009-05-13 11:18         ` Johannes Weiner
2009-05-13 18:03         ` Hugh Dickins
2009-05-13 18:03           ` Hugh Dickins
2009-05-14  0:05           ` KAMEZAWA Hiroyuki
2009-05-14  0:05             ` KAMEZAWA Hiroyuki
2009-05-12  1:47 ` [PATCH 3/3] fix stale swap cache at writeback KAMEZAWA Hiroyuki
2009-05-12  1:47   ` KAMEZAWA Hiroyuki
2009-05-12  5:06 ` [PATCH 4/3] memcg: call uncharge_swapcache outside of tree_lock (Re: [PATCH 0/3] fix stale swap cache account leak in memcg v7) Daisuke Nishimura
2009-05-12  5:06   ` Daisuke Nishimura
2009-05-12  7:09   ` KAMEZAWA Hiroyuki
2009-05-12  7:09     ` KAMEZAWA Hiroyuki
2009-05-12  8:00     ` Daisuke Nishimura
2009-05-12  8:00       ` Daisuke Nishimura
2009-05-12  8:13       ` [PATCH][BUGFIX] memcg: fix for deadlock between lock_page_cgroup and mapping tree_lock KAMEZAWA Hiroyuki
2009-05-12  8:13         ` KAMEZAWA Hiroyuki
2009-05-12 10:58         ` Daisuke Nishimura
2009-05-12 10:58           ` Daisuke Nishimura
2009-05-12 23:59           ` KAMEZAWA Hiroyuki
2009-05-12 23:59             ` KAMEZAWA Hiroyuki
2009-05-13  0:28             ` Daisuke Nishimura
2009-05-13  0:28               ` Daisuke Nishimura
2009-05-13  0:32               ` KAMEZAWA Hiroyuki
2009-05-13  0:32                 ` KAMEZAWA Hiroyuki
2009-05-13  3:55                 ` KAMEZAWA Hiroyuki [this message]
2009-05-13  3:55                   ` KAMEZAWA Hiroyuki
2009-05-13  4:11                   ` nishimura
2009-05-13  4:11                     ` nishimura
2009-05-12  9:51 ` [PATCH 0/3] fix stale swap cache account leak in memcg v7 Balbir Singh
2009-05-12  9:51   ` Balbir Singh
2009-05-13  0:31   ` KAMEZAWA Hiroyuki
2009-05-13  0:31     ` KAMEZAWA Hiroyuki
2009-05-14 23:47     ` KAMEZAWA Hiroyuki
2009-05-14 23:47       ` KAMEZAWA Hiroyuki
2009-05-15  0:38       ` Daisuke Nishimura
2009-05-15  0:38         ` Daisuke Nishimura
2009-05-15  0:54         ` KAMEZAWA Hiroyuki
2009-05-15  0:54           ` KAMEZAWA Hiroyuki
2009-05-15  1:12           ` Daisuke Nishimura
2009-05-15  1:12             ` Daisuke Nishimura

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20090513125558.57be0db6.kamezawa.hiroyu@jp.fujitsu.com \
    --to=kamezawa.hiroyu@jp.fujitsu.com \
    --cc=akpm@linux-foundation.org \
    --cc=balbir@linux.vnet.ibm.com \
    --cc=d-nishimura@mtf.biglobe.ne.jp \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-mm@kvack.org \
    --cc=mingo@elte.hu \
    --cc=nishimura@mxp.nes.nec.co.jp \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.