All of lore.kernel.org
 help / color / mirror / Atom feed
From: Minchan Kim <minchan.kim@gmail.com>
To: Rik van Riel <riel@redhat.com>
Cc: akpm@linux-foundation.org, linux-kernel@vger.kernel.org,
	linux-mm@kvack.org, Mel Gorman <mel@csn.ul.ie>,
	Andrea Arcangeli <aarcange@redhat.com>,
	KAMEZAWA Hiroyuki <kamezawa.hiroyu@jp.fujitsu.com>,
	Lee Schermerhorn <Lee.Schermerhorn@hp.com>
Subject: Re: [PATCH 5/5] extend KSM refcounts to the anon_vma root
Date: Thu, 27 May 2010 23:02:12 +0900	[thread overview]
Message-ID: <20100527140212.GE2112@barrios-desktop> (raw)
In-Reply-To: <20100526154124.04607d04@annuminas.surriel.com>

On Wed, May 26, 2010 at 03:41:24PM -0400, Rik van Riel wrote:
> Subject: extend KSM refcounts to the anon_vma root
> 
> KSM reference counts can cause an anon_vma to exist after the processe
> it belongs to have already exited.  Because the anon_vma lock now lives
> in the root anon_vma, we need to ensure that the root anon_vma stays
> around until after all the "child" anon_vmas have been freed.
> 
> The obvious way to do this is to have a "child" anon_vma take a
> reference to the root in anon_vma_fork.  When the anon_vma is freed
> at munmap or process exit, we drop the refcount in anon_vma_unlink
> and possibly free the root anon_vma.
> 
> The KSM anon_vma reference count function also needs to be modified
> to deal with the possibility of freeing 2 levels of anon_vma.  The
> easiest way to do this is to break out the KSM magic and make it
> generic.
> 
> When compiling without CONFIG_KSM, this code is compiled out.
Hi, Rik. 

Hmm, I can understand this point. 
Now, rmap code always depeneds on root anon_vma's lock. 
I think it doesn't depends on KSM and MIGRATION.

If we don't use KSM and MIGRATION and it is compiled out, 
Can root's anon_vma disappear during rmap walking? 
who prevent it?

What am I missing?
> 
> Signed-off-by: Rik van Riel <riel@redhat.com>
> ---
> v2:
>  - merge with -mm and the compaction code
>  - improve the anon_vma refcount comment in anon_vma_fork with the
>    refcount lifetime
> 
>  include/linux/rmap.h |   15 +++++++++++++++
>  mm/ksm.c             |   17 ++++++-----------
>  mm/migrate.c         |   10 +++-------
>  mm/rmap.c            |   45 ++++++++++++++++++++++++++++++++++++++++++++-
>  4 files changed, 68 insertions(+), 19 deletions(-)
> 
> Index: linux-2.6.34/include/linux/rmap.h
> ===================================================================
> --- linux-2.6.34.orig/include/linux/rmap.h
> +++ linux-2.6.34/include/linux/rmap.h
> @@ -81,6 +81,13 @@ static inline int anonvma_external_refco
>  {
>  	return atomic_read(&anon_vma->external_refcount);
>  }
> +
> +static inline void get_anon_vma(struct anon_vma *anon_vma)
> +{
> +	atomic_inc(&anon_vma->external_refcount);
> +}
> +
> +void drop_anon_vma(struct anon_vma *);
>  #else
>  static inline void anonvma_external_refcount_init(struct anon_vma *anon_vma)
>  {
> @@ -90,6 +97,14 @@ static inline int anonvma_external_refco
>  {
>  	return 0;
>  }
> +
> +static inline void get_anon_vma(struct anon_vma *anon_vma)
> +{
> +}
> +
> +static inline void drop_anon_vma(struct anon_vma *anon_vma)
> +{
> +}
>  #endif /* CONFIG_KSM */
>  
>  static inline struct anon_vma *page_anon_vma(struct page *page)
> Index: linux-2.6.34/mm/ksm.c
> ===================================================================
> --- linux-2.6.34.orig/mm/ksm.c
> +++ linux-2.6.34/mm/ksm.c
> @@ -318,19 +318,14 @@ static void hold_anon_vma(struct rmap_it
>  			  struct anon_vma *anon_vma)
>  {
>  	rmap_item->anon_vma = anon_vma;
> -	atomic_inc(&anon_vma->external_refcount);
> +	get_anon_vma(anon_vma);
>  }
>  
> -static void drop_anon_vma(struct rmap_item *rmap_item)
> +static void ksm_drop_anon_vma(struct rmap_item *rmap_item)
>  {
>  	struct anon_vma *anon_vma = rmap_item->anon_vma;
>  
> -	if (atomic_dec_and_lock(&anon_vma->external_refcount, &anon_vma->root->lock)) {
> -		int empty = list_empty(&anon_vma->head);
> -		anon_vma_unlock(anon_vma);
> -		if (empty)
> -			anon_vma_free(anon_vma);
> -	}
> +	drop_anon_vma(anon_vma);
>  }
>  
>  /*
> @@ -415,7 +410,7 @@ static void break_cow(struct rmap_item *
>  	 * It is not an accident that whenever we want to break COW
>  	 * to undo, we also need to drop a reference to the anon_vma.
>  	 */
> -	drop_anon_vma(rmap_item);
> +	ksm_drop_anon_vma(rmap_item);
>  
>  	down_read(&mm->mmap_sem);
>  	if (ksm_test_exit(mm))
> @@ -470,7 +465,7 @@ static void remove_node_from_stable_tree
>  			ksm_pages_sharing--;
>  		else
>  			ksm_pages_shared--;
> -		drop_anon_vma(rmap_item);
> +		ksm_drop_anon_vma(rmap_item);
>  		rmap_item->address &= PAGE_MASK;
>  		cond_resched();
>  	}
> @@ -558,7 +553,7 @@ static void remove_rmap_item_from_tree(s
>  		else
>  			ksm_pages_shared--;
>  
> -		drop_anon_vma(rmap_item);
> +		ksm_drop_anon_vma(rmap_item);
>  		rmap_item->address &= PAGE_MASK;
>  
>  	} else if (rmap_item->address & UNSTABLE_FLAG) {
> Index: linux-2.6.34/mm/rmap.c
> ===================================================================
> --- linux-2.6.34.orig/mm/rmap.c
> +++ linux-2.6.34/mm/rmap.c
> @@ -235,6 +235,12 @@ int anon_vma_fork(struct vm_area_struct 
>  	 * lock any of the anon_vmas in this anon_vma tree.
>  	 */
>  	anon_vma->root = pvma->anon_vma->root;
> +	/*
> +	 * With KSM refcounts, an anon_vma can stay around longer than the
> +	 * process it belongs to.  The root anon_vma needs to be pinned
> +	 * until this anon_vma is freed, because the lock lives in the root.
> +	 */
> +	get_anon_vma(anon_vma->root);
>  	/* Mark this anon_vma as the one where our new (COWed) pages go. */
>  	vma->anon_vma = anon_vma;
>  	anon_vma_chain_link(vma, avc, anon_vma);
> @@ -264,8 +270,11 @@ static void anon_vma_unlink(struct anon_
>  	empty = list_empty(&anon_vma->head) && !anonvma_external_refcount(anon_vma);
>  	anon_vma_unlock(anon_vma);
>  
> -	if (empty)
> +	if (empty) {
> +		/* We no longer need the root anon_vma */
> +		drop_anon_vma(anon_vma->root);
>  		anon_vma_free(anon_vma);
> +	}
>  }
>  
>  void unlink_anon_vmas(struct vm_area_struct *vma)
> @@ -1389,6 +1398,40 @@ int try_to_munlock(struct page *page)
>  		return try_to_unmap_file(page, TTU_MUNLOCK);
>  }
>  
> +#if defined(CONFIG_KSM) || defined(CONFIG_MIGRATION)
> +/*
> + * Drop an anon_vma refcount, freeing the anon_vma and anon_vma->root
> + * if necessary.  Be careful to do all the tests under the lock.  Once
> + * we know we are the last user, nobody else can get a reference and we
> + * can do the freeing without the lock.
> + */
> +void drop_anon_vma(struct anon_vma *anon_vma)
> +{
> +	if (atomic_dec_and_lock(&anon_vma->external_refcount, &anon_vma->root->lock)) {
> +		struct anon_vma *root = anon_vma->root;
> +		int empty = list_empty(&anon_vma->head);
> +		int last_root_user = 0;
> +		int root_empty = 0;
> +
> +		/*
> +		 * The refcount on a non-root anon_vma got dropped.  Drop
> +		 * the refcount on the root and check if we need to free it.
> +		 */
> +		if (empty && anon_vma != root) {
> +			last_root_user = atomic_dec_and_test(&root->external_refcount);
> +			root_empty = list_empty(&root->head);
> +		}
> +		anon_vma_unlock(anon_vma);
> +
> +		if (empty) {
> +			anon_vma_free(anon_vma);
> +			if (root_empty && last_root_user)
> +				anon_vma_free(root);
> +		}
> +	}
> +}
> +#endif
> +
>  #ifdef CONFIG_MIGRATION
>  /*
>   * rmap_walk() and its helpers rmap_walk_anon() and rmap_walk_file():
> Index: linux-2.6.34/mm/migrate.c
> ===================================================================
> --- linux-2.6.34.orig/mm/migrate.c
> +++ linux-2.6.34/mm/migrate.c
> @@ -639,7 +639,7 @@ static int unmap_and_move(new_page_t get
>  			 * exist when the page is remapped later
>  			 */
>  			anon_vma = page_anon_vma(page);
> -			atomic_inc(&anon_vma->external_refcount);
> +			get_anon_vma(anon_vma);
>  		}
>  	}
>  
> @@ -682,12 +682,8 @@ skip_unmap:
>  rcu_unlock:
>  
>  	/* Drop an anon_vma reference if we took one */
> -	if (anon_vma && atomic_dec_and_lock(&anon_vma->external_refcount, &anon_vma->root->lock)) {
> -		int empty = list_empty(&anon_vma->head);
> -		anon_vma_unlock(anon_vma);
> -		if (empty)
> -			anon_vma_free(anon_vma);
> -	}
> +	if (anon_vma)
> +		drop_anon_vma(anon_vma);
>  
>  	if (rcu_locked)
>  		rcu_read_unlock();

-- 
Kind regards,
Minchan Kim

WARNING: multiple messages have this Message-ID (diff)
From: Minchan Kim <minchan.kim@gmail.com>
To: Rik van Riel <riel@redhat.com>
Cc: akpm@linux-foundation.org, linux-kernel@vger.kernel.org,
	linux-mm@kvack.org, Mel Gorman <mel@csn.ul.ie>,
	Andrea Arcangeli <aarcange@redhat.com>,
	KAMEZAWA Hiroyuki <kamezawa.hiroyu@jp.fujitsu.com>,
	Lee Schermerhorn <Lee.Schermerhorn@hp.com>
Subject: Re: [PATCH 5/5] extend KSM refcounts to the anon_vma root
Date: Thu, 27 May 2010 23:02:12 +0900	[thread overview]
Message-ID: <20100527140212.GE2112@barrios-desktop> (raw)
In-Reply-To: <20100526154124.04607d04@annuminas.surriel.com>

On Wed, May 26, 2010 at 03:41:24PM -0400, Rik van Riel wrote:
> Subject: extend KSM refcounts to the anon_vma root
> 
> KSM reference counts can cause an anon_vma to exist after the processe
> it belongs to have already exited.  Because the anon_vma lock now lives
> in the root anon_vma, we need to ensure that the root anon_vma stays
> around until after all the "child" anon_vmas have been freed.
> 
> The obvious way to do this is to have a "child" anon_vma take a
> reference to the root in anon_vma_fork.  When the anon_vma is freed
> at munmap or process exit, we drop the refcount in anon_vma_unlink
> and possibly free the root anon_vma.
> 
> The KSM anon_vma reference count function also needs to be modified
> to deal with the possibility of freeing 2 levels of anon_vma.  The
> easiest way to do this is to break out the KSM magic and make it
> generic.
> 
> When compiling without CONFIG_KSM, this code is compiled out.
Hi, Rik. 

Hmm, I can understand this point. 
Now, rmap code always depeneds on root anon_vma's lock. 
I think it doesn't depends on KSM and MIGRATION.

If we don't use KSM and MIGRATION and it is compiled out, 
Can root's anon_vma disappear during rmap walking? 
who prevent it?

What am I missing?
> 
> Signed-off-by: Rik van Riel <riel@redhat.com>
> ---
> v2:
>  - merge with -mm and the compaction code
>  - improve the anon_vma refcount comment in anon_vma_fork with the
>    refcount lifetime
> 
>  include/linux/rmap.h |   15 +++++++++++++++
>  mm/ksm.c             |   17 ++++++-----------
>  mm/migrate.c         |   10 +++-------
>  mm/rmap.c            |   45 ++++++++++++++++++++++++++++++++++++++++++++-
>  4 files changed, 68 insertions(+), 19 deletions(-)
> 
> Index: linux-2.6.34/include/linux/rmap.h
> ===================================================================
> --- linux-2.6.34.orig/include/linux/rmap.h
> +++ linux-2.6.34/include/linux/rmap.h
> @@ -81,6 +81,13 @@ static inline int anonvma_external_refco
>  {
>  	return atomic_read(&anon_vma->external_refcount);
>  }
> +
> +static inline void get_anon_vma(struct anon_vma *anon_vma)
> +{
> +	atomic_inc(&anon_vma->external_refcount);
> +}
> +
> +void drop_anon_vma(struct anon_vma *);
>  #else
>  static inline void anonvma_external_refcount_init(struct anon_vma *anon_vma)
>  {
> @@ -90,6 +97,14 @@ static inline int anonvma_external_refco
>  {
>  	return 0;
>  }
> +
> +static inline void get_anon_vma(struct anon_vma *anon_vma)
> +{
> +}
> +
> +static inline void drop_anon_vma(struct anon_vma *anon_vma)
> +{
> +}
>  #endif /* CONFIG_KSM */
>  
>  static inline struct anon_vma *page_anon_vma(struct page *page)
> Index: linux-2.6.34/mm/ksm.c
> ===================================================================
> --- linux-2.6.34.orig/mm/ksm.c
> +++ linux-2.6.34/mm/ksm.c
> @@ -318,19 +318,14 @@ static void hold_anon_vma(struct rmap_it
>  			  struct anon_vma *anon_vma)
>  {
>  	rmap_item->anon_vma = anon_vma;
> -	atomic_inc(&anon_vma->external_refcount);
> +	get_anon_vma(anon_vma);
>  }
>  
> -static void drop_anon_vma(struct rmap_item *rmap_item)
> +static void ksm_drop_anon_vma(struct rmap_item *rmap_item)
>  {
>  	struct anon_vma *anon_vma = rmap_item->anon_vma;
>  
> -	if (atomic_dec_and_lock(&anon_vma->external_refcount, &anon_vma->root->lock)) {
> -		int empty = list_empty(&anon_vma->head);
> -		anon_vma_unlock(anon_vma);
> -		if (empty)
> -			anon_vma_free(anon_vma);
> -	}
> +	drop_anon_vma(anon_vma);
>  }
>  
>  /*
> @@ -415,7 +410,7 @@ static void break_cow(struct rmap_item *
>  	 * It is not an accident that whenever we want to break COW
>  	 * to undo, we also need to drop a reference to the anon_vma.
>  	 */
> -	drop_anon_vma(rmap_item);
> +	ksm_drop_anon_vma(rmap_item);
>  
>  	down_read(&mm->mmap_sem);
>  	if (ksm_test_exit(mm))
> @@ -470,7 +465,7 @@ static void remove_node_from_stable_tree
>  			ksm_pages_sharing--;
>  		else
>  			ksm_pages_shared--;
> -		drop_anon_vma(rmap_item);
> +		ksm_drop_anon_vma(rmap_item);
>  		rmap_item->address &= PAGE_MASK;
>  		cond_resched();
>  	}
> @@ -558,7 +553,7 @@ static void remove_rmap_item_from_tree(s
>  		else
>  			ksm_pages_shared--;
>  
> -		drop_anon_vma(rmap_item);
> +		ksm_drop_anon_vma(rmap_item);
>  		rmap_item->address &= PAGE_MASK;
>  
>  	} else if (rmap_item->address & UNSTABLE_FLAG) {
> Index: linux-2.6.34/mm/rmap.c
> ===================================================================
> --- linux-2.6.34.orig/mm/rmap.c
> +++ linux-2.6.34/mm/rmap.c
> @@ -235,6 +235,12 @@ int anon_vma_fork(struct vm_area_struct 
>  	 * lock any of the anon_vmas in this anon_vma tree.
>  	 */
>  	anon_vma->root = pvma->anon_vma->root;
> +	/*
> +	 * With KSM refcounts, an anon_vma can stay around longer than the
> +	 * process it belongs to.  The root anon_vma needs to be pinned
> +	 * until this anon_vma is freed, because the lock lives in the root.
> +	 */
> +	get_anon_vma(anon_vma->root);
>  	/* Mark this anon_vma as the one where our new (COWed) pages go. */
>  	vma->anon_vma = anon_vma;
>  	anon_vma_chain_link(vma, avc, anon_vma);
> @@ -264,8 +270,11 @@ static void anon_vma_unlink(struct anon_
>  	empty = list_empty(&anon_vma->head) && !anonvma_external_refcount(anon_vma);
>  	anon_vma_unlock(anon_vma);
>  
> -	if (empty)
> +	if (empty) {
> +		/* We no longer need the root anon_vma */
> +		drop_anon_vma(anon_vma->root);
>  		anon_vma_free(anon_vma);
> +	}
>  }
>  
>  void unlink_anon_vmas(struct vm_area_struct *vma)
> @@ -1389,6 +1398,40 @@ int try_to_munlock(struct page *page)
>  		return try_to_unmap_file(page, TTU_MUNLOCK);
>  }
>  
> +#if defined(CONFIG_KSM) || defined(CONFIG_MIGRATION)
> +/*
> + * Drop an anon_vma refcount, freeing the anon_vma and anon_vma->root
> + * if necessary.  Be careful to do all the tests under the lock.  Once
> + * we know we are the last user, nobody else can get a reference and we
> + * can do the freeing without the lock.
> + */
> +void drop_anon_vma(struct anon_vma *anon_vma)
> +{
> +	if (atomic_dec_and_lock(&anon_vma->external_refcount, &anon_vma->root->lock)) {
> +		struct anon_vma *root = anon_vma->root;
> +		int empty = list_empty(&anon_vma->head);
> +		int last_root_user = 0;
> +		int root_empty = 0;
> +
> +		/*
> +		 * The refcount on a non-root anon_vma got dropped.  Drop
> +		 * the refcount on the root and check if we need to free it.
> +		 */
> +		if (empty && anon_vma != root) {
> +			last_root_user = atomic_dec_and_test(&root->external_refcount);
> +			root_empty = list_empty(&root->head);
> +		}
> +		anon_vma_unlock(anon_vma);
> +
> +		if (empty) {
> +			anon_vma_free(anon_vma);
> +			if (root_empty && last_root_user)
> +				anon_vma_free(root);
> +		}
> +	}
> +}
> +#endif
> +
>  #ifdef CONFIG_MIGRATION
>  /*
>   * rmap_walk() and its helpers rmap_walk_anon() and rmap_walk_file():
> Index: linux-2.6.34/mm/migrate.c
> ===================================================================
> --- linux-2.6.34.orig/mm/migrate.c
> +++ linux-2.6.34/mm/migrate.c
> @@ -639,7 +639,7 @@ static int unmap_and_move(new_page_t get
>  			 * exist when the page is remapped later
>  			 */
>  			anon_vma = page_anon_vma(page);
> -			atomic_inc(&anon_vma->external_refcount);
> +			get_anon_vma(anon_vma);
>  		}
>  	}
>  
> @@ -682,12 +682,8 @@ skip_unmap:
>  rcu_unlock:
>  
>  	/* Drop an anon_vma reference if we took one */
> -	if (anon_vma && atomic_dec_and_lock(&anon_vma->external_refcount, &anon_vma->root->lock)) {
> -		int empty = list_empty(&anon_vma->head);
> -		anon_vma_unlock(anon_vma);
> -		if (empty)
> -			anon_vma_free(anon_vma);
> -	}
> +	if (anon_vma)
> +		drop_anon_vma(anon_vma);
>  
>  	if (rcu_locked)
>  		rcu_read_unlock();

-- 
Kind regards,
Minchan Kim

--
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>

  parent reply	other threads:[~2010-05-27 14:02 UTC|newest]

Thread overview: 60+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2010-05-26 19:38 [PATCH -v3 0/5] always lock the root anon_vma Rik van Riel
2010-05-26 19:38 ` Rik van Riel
2010-05-26 19:38 ` [PATCH 1/5] rename anon_vma_lock to vma_lock_anon_vma Rik van Riel
2010-05-26 19:38   ` Rik van Riel
2010-05-26 20:33   ` Larry Woodman
2010-05-26 20:33     ` Larry Woodman
2010-05-27 13:44   ` Minchan Kim
2010-05-27 13:44     ` Minchan Kim
2010-05-26 19:39 ` [PATCH 2/5] change direct call of spin_lock(anon_vma->lock) to inline function Rik van Riel
2010-05-26 19:39   ` Rik van Riel
2010-05-26 20:33   ` Larry Woodman
2010-05-26 20:33     ` Larry Woodman
2010-05-27 13:46   ` Minchan Kim
2010-05-27 13:46     ` Minchan Kim
2010-06-01 22:04   ` Andrew Morton
2010-06-01 22:04     ` Andrew Morton
2010-06-02  8:27     ` Peter Zijlstra
2010-06-02  8:27       ` Peter Zijlstra
2010-05-26 19:40 ` [PATCH 3/5] track the root (oldest) anon_vma Rik van Riel
2010-05-26 19:40   ` Rik van Riel
2010-05-26 20:34   ` Larry Woodman
2010-05-26 20:34     ` Larry Woodman
2010-05-27 13:48   ` Minchan Kim
2010-05-27 13:48     ` Minchan Kim
2010-05-26 19:40 ` [PATCH 4/5] always lock " Rik van Riel
2010-05-26 19:40   ` Rik van Riel
2010-05-26 20:36   ` Larry Woodman
2010-05-26 20:36     ` Larry Woodman
2010-05-27  0:57   ` KAMEZAWA Hiroyuki
2010-05-27  0:57     ` KAMEZAWA Hiroyuki
2010-05-27 13:55   ` Minchan Kim
2010-05-27 13:55     ` Minchan Kim
2010-05-27 17:48   ` Mel Gorman
2010-05-27 17:48     ` Mel Gorman
2010-05-26 19:41 ` [PATCH 5/5] extend KSM refcounts to the anon_vma root Rik van Riel
2010-05-26 19:41   ` Rik van Riel
2010-05-26 20:47   ` Larry Woodman
2010-05-26 20:47     ` Larry Woodman
2010-05-27 14:02   ` Minchan Kim [this message]
2010-05-27 14:02     ` Minchan Kim
2010-05-27 14:09     ` Rik van Riel
2010-05-27 14:09       ` Rik van Riel
2010-05-27 14:31   ` Minchan Kim
2010-05-27 14:31     ` Minchan Kim
2010-05-27 17:50   ` Mel Gorman
2010-05-27 17:50     ` Mel Gorman
  -- strict thread matches above, loose matches on Subject: below --
2010-05-12 17:38 [PATCH 0/5] always lock the root anon_vma Rik van Riel
2010-05-12 17:40 ` [PATCH 4/5] always lock the root (oldest) anon_vma Rik van Riel
2010-05-12 21:02   ` Mel Gorman
2010-05-12 21:08     ` Rik van Riel
2010-05-13  9:54       ` Mel Gorman
2010-05-13 14:33         ` [PATCH -v2 " Rik van Riel
2010-05-13 21:09           ` Andrew Morton
2010-05-26  4:00             ` Rik van Riel
2010-05-26 15:24               ` [PATCH -v2 0/5] always lock the root anon_vma Rik van Riel
2010-05-26 15:27                 ` [PATCH 5/5] extend KSM refcounts to the anon_vma root Rik van Riel
2010-05-26 15:27                   ` Rik van Riel
2010-05-12 17:41 ` Rik van Riel
2010-05-12 17:41   ` Rik van Riel
2010-05-12 21:07   ` Mel Gorman
2010-05-12 21:07     ` Mel Gorman
2010-05-12 21:09     ` Rik van Riel
2010-05-12 21:09       ` Rik van Riel
2010-05-13 11:26       ` Mel Gorman
2010-05-13 11:26         ` Mel Gorman
2010-05-13 13:11         ` Rik van Riel
2010-05-13 13:11           ` Rik van Riel
2010-05-13 13:24           ` Mel Gorman
2010-05-13 13:24             ` Mel Gorman

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=20100527140212.GE2112@barrios-desktop \
    --to=minchan.kim@gmail.com \
    --cc=Lee.Schermerhorn@hp.com \
    --cc=aarcange@redhat.com \
    --cc=akpm@linux-foundation.org \
    --cc=kamezawa.hiroyu@jp.fujitsu.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-mm@kvack.org \
    --cc=mel@csn.ul.ie \
    --cc=riel@redhat.com \
    /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.