All of lore.kernel.org
 help / color / mirror / Atom feed
From: Balbir Singh <balbir@linux.vnet.ibm.com>
To: KAMEZAWA Hiroyuki <kamezawa.hiroyu@jp.fujitsu.com>
Cc: "linux-mm@kvack.org" <linux-mm@kvack.org>,
	"nishimura@mxp.nes.nec.co.jp" <nishimura@mxp.nes.nec.co.jp>,
	"xemul@openvz.org" <xemul@openvz.org>,
	Andrew Morton <akpm@linux-foundation.org>,
	LKML <linux-kernel@vger.kernel.org>,
	Dave Hansen <haveblue@us.ibm.com>,
	ryov@valinux.co.jp
Subject: Re: [PATCH 7/12] memcg add function to move account
Date: Sat, 27 Sep 2008 13:26:17 +0530	[thread overview]
Message-ID: <48DDE721.9060309@linux.vnet.ibm.com> (raw)
In-Reply-To: <20080925152722.7a678ea1.kamezawa.hiroyu@jp.fujitsu.com>

KAMEZAWA Hiroyuki wrote:
> This patch provides a function to move account information of a page between
> mem_cgroups.
> 

What is the interface for moving the accounting? Is it an explicit call like
force_empty? The other concern I have is about merging two LRU lists, when we
move LRU pages from one mem_cgroup to another, where do we add them? To the head
or tail? I think we need to think about it and document it well.

The other thing is that once we have mult-hierarchy support (which we really
need), we need to move the accounting to the parent instead of root.

> This moving of page_cgroup is done under
>  - lru_lock of source/destination mem_cgroup is held.

I suppose you mean and instead of either for the lru_lock

>  - lock_page_cgroup() is held.
> 
> Then, a routine which touches pc->mem_cgroup without lock_page_cgroup() should
> confirm pc->mem_cgroup is still valid or not. Typlical code can be following.
> 
> (while page is not under lock_page())
> 	mem = pc->mem_cgroup;
> 	mz = page_cgroup_zoneinfo(pc)
> 	spin_lock_irqsave(&mz->lru_lock);
> 	if (pc->mem_cgroup == mem)
> 		...../* some list handling */
> 	spin_unlock_irq(&mz->lru_lock);
> 
> Or better way is
> 	lock_page_cgroup(pc);
> 	....
> 	unlock_page_cgroup(pc);
> 
> But you should confirm the nest of lock and avoid deadlock.
> (trylock is better if it's ok.)
> 
> If you find page_cgroup from mem_cgroup's LRU under mz->lru_lock,
> you don't have to worry about what pc->mem_cgroup points to.
> 
> Changelog: (v4) -> (v5)
>   - check for lock_page() is removed.
>   - rewrote description.
> 
> Changelog: (v2) -> (v4)
>   - added lock_page_cgroup().
>   - splitted out from new-force-empty patch.
>   - added how-to-use text.
>   - fixed race in __mem_cgroup_uncharge_common().
> 
> Signed-off-by: KAMEZAWA Hiroyuki <kamezawa.hiroyu@jp.fujitsu.com>
> 
>  mm/memcontrol.c |   84 ++++++++++++++++++++++++++++++++++++++++++++++++++++++--
>  1 file changed, 81 insertions(+), 3 deletions(-)
> 
> Index: mmotm-2.6.27-rc7+/mm/memcontrol.c
> ===================================================================
> --- mmotm-2.6.27-rc7+.orig/mm/memcontrol.c
> +++ mmotm-2.6.27-rc7+/mm/memcontrol.c
> @@ -426,6 +426,7 @@ int task_in_mem_cgroup(struct task_struc
>  void mem_cgroup_move_lists(struct page *page, enum lru_list lru)
>  {
>  	struct page_cgroup *pc;
> +	struct mem_cgroup *mem;
>  	struct mem_cgroup_per_zone *mz;
>  	unsigned long flags;
> 
> @@ -444,9 +445,14 @@ void mem_cgroup_move_lists(struct page *
> 
>  	pc = page_get_page_cgroup(page);
>  	if (pc) {
> +		mem = pc->mem_cgroup;
>  		mz = page_cgroup_zoneinfo(pc);
>  		spin_lock_irqsave(&mz->lru_lock, flags);
> -		__mem_cgroup_move_lists(pc, lru);
> +		/*
> +		 * check against the race with move_account.
> +		 */
> +		if (likely(mem == pc->mem_cgroup))
> +			__mem_cgroup_move_lists(pc, lru);
>  		spin_unlock_irqrestore(&mz->lru_lock, flags);
>  	}
>  	unlock_page_cgroup(page);
> @@ -567,6 +573,70 @@ unsigned long mem_cgroup_isolate_pages(u
>  	return nr_taken;
>  }
> 
> +/**
> + * mem_cgroup_move_account - move account of the page
> + * @page ... the target page of being moved.
> + * @pc   ... page_cgroup of the page.
> + * @from ... mem_cgroup which the page is moved from.
> + * @to   ... mem_cgroup which the page is moved to.
> + *
> + * The caller must confirm following.
> + * 1. disable irq.
> + * 2. lru_lock of old mem_cgroup should be held.
> + * 3. pc is guaranteed to be valid and on mem_cgroup's LRU.
> + *
> + * Because we cannot call try_to_free_page() here, the caller must guarantee
> + * this moving of charge never fails. (if charge fails, this call fails.)
> + * Currently this is called only against root cgroup.
> + * which has no limitation of resource.
> + * Returns 0 at success, returns 1 at failure.
> + */
> +int mem_cgroup_move_account(struct page *page, struct page_cgroup *pc,
> +	struct mem_cgroup *from, struct mem_cgroup *to)
> +{
> +	struct mem_cgroup_per_zone *from_mz, *to_mz;
> +	int nid, zid;
> +	int ret = 1;
> +
> +	VM_BUG_ON(!irqs_disabled());
> +
> +	nid = page_to_nid(page);
> +	zid = page_zonenum(page);
> +	from_mz =  mem_cgroup_zoneinfo(from, nid, zid);
> +	to_mz =  mem_cgroup_zoneinfo(to, nid, zid);
> +
> +	if (res_counter_charge(&to->res, PAGE_SIZE)) {
> +		/* Now, we assume no_limit...no failure here. */
> +		return ret;
> +	}

Please BUG_ON() if the charging fails, we can be sure we catch assumptions that
are broken.

> +	if (!try_lock_page_cgroup(page)) {
> +		res_counter_uncharge(&to->res, PAGE_SIZE);
> +		return ret;
> +	}
> +
> +	if (page_get_page_cgroup(page) != pc) {
> +		res_counter_uncharge(&to->res, PAGE_SIZE);
> +		goto out;
> +	}
> +
> +	if (spin_trylock(&to_mz->lru_lock)) {

The spin_trylock is to avoid deadlocks, right?

> +		__mem_cgroup_remove_list(from_mz, pc);
> +		css_put(&from->css);
> +		res_counter_uncharge(&from->res, PAGE_SIZE);
> +		pc->mem_cgroup = to;
> +		css_get(&to->css);
> +		__mem_cgroup_add_list(to_mz, pc);
> +		ret = 0;
> +		spin_unlock(&to_mz->lru_lock);
> +	} else {
> +		res_counter_uncharge(&to->res, PAGE_SIZE);
> +	}
> +out:
> +	unlock_page_cgroup(page);
> +
> +	return ret;
> +}
> +
>  /*
>   * Charge the memory controller for page usage.
>   * Return
> @@ -754,16 +824,24 @@ __mem_cgroup_uncharge_common(struct page
>  	if ((ctype == MEM_CGROUP_CHARGE_TYPE_MAPPED)
>  	    && ((PageCgroupCache(pc) || page_mapped(page))))
>  		goto unlock;
> -
> +retry:
> +	mem = pc->mem_cgroup;
>  	mz = page_cgroup_zoneinfo(pc);
>  	spin_lock_irqsave(&mz->lru_lock, flags);
> +	if (ctype == MEM_CGROUP_CHARGE_TYPE_MAPPED &&
> +	    unlikely(mem != pc->mem_cgroup)) {
> +		/* MAPPED account can be done without lock_page().
> +		   Check race with mem_cgroup_move_account() */

Coding style above is broken. Can this race really occur? Why do we get mem
before acquiring the mz->lru_lock? We don't seem to be using it.

> +		spin_unlock_irqrestore(&mz->lru_lock, flags);
> +		goto retry;
> +	}
>  	__mem_cgroup_remove_list(mz, pc);
>  	spin_unlock_irqrestore(&mz->lru_lock, flags);
> 
>  	page_assign_page_cgroup(page, NULL);
>  	unlock_page_cgroup(page);
> 
> -	mem = pc->mem_cgroup;
> +
>  	res_counter_uncharge(&mem->res, PAGE_SIZE);
>  	css_put(&mem->css);
> 
> 


-- 
	Balbir

WARNING: multiple messages have this Message-ID (diff)
From: Balbir Singh <balbir@linux.vnet.ibm.com>
To: KAMEZAWA Hiroyuki <kamezawa.hiroyu@jp.fujitsu.com>
Cc: "linux-mm@kvack.org" <linux-mm@kvack.org>,
	"nishimura@mxp.nes.nec.co.jp" <nishimura@mxp.nes.nec.co.jp>,
	"xemul@openvz.org" <xemul@openvz.org>,
	Andrew Morton <akpm@linux-foundation.org>,
	LKML <linux-kernel@vger.kernel.org>,
	Dave Hansen <haveblue@us.ibm.com>,
	ryov@valinux.co.jp
Subject: Re: [PATCH 7/12] memcg add function to move account
Date: Sat, 27 Sep 2008 13:26:17 +0530	[thread overview]
Message-ID: <48DDE721.9060309@linux.vnet.ibm.com> (raw)
In-Reply-To: <20080925152722.7a678ea1.kamezawa.hiroyu@jp.fujitsu.com>

KAMEZAWA Hiroyuki wrote:
> This patch provides a function to move account information of a page between
> mem_cgroups.
> 

What is the interface for moving the accounting? Is it an explicit call like
force_empty? The other concern I have is about merging two LRU lists, when we
move LRU pages from one mem_cgroup to another, where do we add them? To the head
or tail? I think we need to think about it and document it well.

The other thing is that once we have mult-hierarchy support (which we really
need), we need to move the accounting to the parent instead of root.

> This moving of page_cgroup is done under
>  - lru_lock of source/destination mem_cgroup is held.

I suppose you mean and instead of either for the lru_lock

>  - lock_page_cgroup() is held.
> 
> Then, a routine which touches pc->mem_cgroup without lock_page_cgroup() should
> confirm pc->mem_cgroup is still valid or not. Typlical code can be following.
> 
> (while page is not under lock_page())
> 	mem = pc->mem_cgroup;
> 	mz = page_cgroup_zoneinfo(pc)
> 	spin_lock_irqsave(&mz->lru_lock);
> 	if (pc->mem_cgroup == mem)
> 		...../* some list handling */
> 	spin_unlock_irq(&mz->lru_lock);
> 
> Or better way is
> 	lock_page_cgroup(pc);
> 	....
> 	unlock_page_cgroup(pc);
> 
> But you should confirm the nest of lock and avoid deadlock.
> (trylock is better if it's ok.)
> 
> If you find page_cgroup from mem_cgroup's LRU under mz->lru_lock,
> you don't have to worry about what pc->mem_cgroup points to.
> 
> Changelog: (v4) -> (v5)
>   - check for lock_page() is removed.
>   - rewrote description.
> 
> Changelog: (v2) -> (v4)
>   - added lock_page_cgroup().
>   - splitted out from new-force-empty patch.
>   - added how-to-use text.
>   - fixed race in __mem_cgroup_uncharge_common().
> 
> Signed-off-by: KAMEZAWA Hiroyuki <kamezawa.hiroyu@jp.fujitsu.com>
> 
>  mm/memcontrol.c |   84 ++++++++++++++++++++++++++++++++++++++++++++++++++++++--
>  1 file changed, 81 insertions(+), 3 deletions(-)
> 
> Index: mmotm-2.6.27-rc7+/mm/memcontrol.c
> ===================================================================
> --- mmotm-2.6.27-rc7+.orig/mm/memcontrol.c
> +++ mmotm-2.6.27-rc7+/mm/memcontrol.c
> @@ -426,6 +426,7 @@ int task_in_mem_cgroup(struct task_struc
>  void mem_cgroup_move_lists(struct page *page, enum lru_list lru)
>  {
>  	struct page_cgroup *pc;
> +	struct mem_cgroup *mem;
>  	struct mem_cgroup_per_zone *mz;
>  	unsigned long flags;
> 
> @@ -444,9 +445,14 @@ void mem_cgroup_move_lists(struct page *
> 
>  	pc = page_get_page_cgroup(page);
>  	if (pc) {
> +		mem = pc->mem_cgroup;
>  		mz = page_cgroup_zoneinfo(pc);
>  		spin_lock_irqsave(&mz->lru_lock, flags);
> -		__mem_cgroup_move_lists(pc, lru);
> +		/*
> +		 * check against the race with move_account.
> +		 */
> +		if (likely(mem == pc->mem_cgroup))
> +			__mem_cgroup_move_lists(pc, lru);
>  		spin_unlock_irqrestore(&mz->lru_lock, flags);
>  	}
>  	unlock_page_cgroup(page);
> @@ -567,6 +573,70 @@ unsigned long mem_cgroup_isolate_pages(u
>  	return nr_taken;
>  }
> 
> +/**
> + * mem_cgroup_move_account - move account of the page
> + * @page ... the target page of being moved.
> + * @pc   ... page_cgroup of the page.
> + * @from ... mem_cgroup which the page is moved from.
> + * @to   ... mem_cgroup which the page is moved to.
> + *
> + * The caller must confirm following.
> + * 1. disable irq.
> + * 2. lru_lock of old mem_cgroup should be held.
> + * 3. pc is guaranteed to be valid and on mem_cgroup's LRU.
> + *
> + * Because we cannot call try_to_free_page() here, the caller must guarantee
> + * this moving of charge never fails. (if charge fails, this call fails.)
> + * Currently this is called only against root cgroup.
> + * which has no limitation of resource.
> + * Returns 0 at success, returns 1 at failure.
> + */
> +int mem_cgroup_move_account(struct page *page, struct page_cgroup *pc,
> +	struct mem_cgroup *from, struct mem_cgroup *to)
> +{
> +	struct mem_cgroup_per_zone *from_mz, *to_mz;
> +	int nid, zid;
> +	int ret = 1;
> +
> +	VM_BUG_ON(!irqs_disabled());
> +
> +	nid = page_to_nid(page);
> +	zid = page_zonenum(page);
> +	from_mz =  mem_cgroup_zoneinfo(from, nid, zid);
> +	to_mz =  mem_cgroup_zoneinfo(to, nid, zid);
> +
> +	if (res_counter_charge(&to->res, PAGE_SIZE)) {
> +		/* Now, we assume no_limit...no failure here. */
> +		return ret;
> +	}

Please BUG_ON() if the charging fails, we can be sure we catch assumptions that
are broken.

> +	if (!try_lock_page_cgroup(page)) {
> +		res_counter_uncharge(&to->res, PAGE_SIZE);
> +		return ret;
> +	}
> +
> +	if (page_get_page_cgroup(page) != pc) {
> +		res_counter_uncharge(&to->res, PAGE_SIZE);
> +		goto out;
> +	}
> +
> +	if (spin_trylock(&to_mz->lru_lock)) {

The spin_trylock is to avoid deadlocks, right?

> +		__mem_cgroup_remove_list(from_mz, pc);
> +		css_put(&from->css);
> +		res_counter_uncharge(&from->res, PAGE_SIZE);
> +		pc->mem_cgroup = to;
> +		css_get(&to->css);
> +		__mem_cgroup_add_list(to_mz, pc);
> +		ret = 0;
> +		spin_unlock(&to_mz->lru_lock);
> +	} else {
> +		res_counter_uncharge(&to->res, PAGE_SIZE);
> +	}
> +out:
> +	unlock_page_cgroup(page);
> +
> +	return ret;
> +}
> +
>  /*
>   * Charge the memory controller for page usage.
>   * Return
> @@ -754,16 +824,24 @@ __mem_cgroup_uncharge_common(struct page
>  	if ((ctype == MEM_CGROUP_CHARGE_TYPE_MAPPED)
>  	    && ((PageCgroupCache(pc) || page_mapped(page))))
>  		goto unlock;
> -
> +retry:
> +	mem = pc->mem_cgroup;
>  	mz = page_cgroup_zoneinfo(pc);
>  	spin_lock_irqsave(&mz->lru_lock, flags);
> +	if (ctype == MEM_CGROUP_CHARGE_TYPE_MAPPED &&
> +	    unlikely(mem != pc->mem_cgroup)) {
> +		/* MAPPED account can be done without lock_page().
> +		   Check race with mem_cgroup_move_account() */

Coding style above is broken. Can this race really occur? Why do we get mem
before acquiring the mz->lru_lock? We don't seem to be using it.

> +		spin_unlock_irqrestore(&mz->lru_lock, flags);
> +		goto retry;
> +	}
>  	__mem_cgroup_remove_list(mz, pc);
>  	spin_unlock_irqrestore(&mz->lru_lock, flags);
> 
>  	page_assign_page_cgroup(page, NULL);
>  	unlock_page_cgroup(page);
> 
> -	mem = pc->mem_cgroup;
> +
>  	res_counter_uncharge(&mem->res, PAGE_SIZE);
>  	css_put(&mem->css);
> 
> 


-- 
	Balbir

--
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:[~2008-09-27  7:56 UTC|newest]

Thread overview: 125+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2008-09-25  6:11 [PATCH 0/12] memcg updates v5 KAMEZAWA Hiroyuki
2008-09-25  6:13 ` [PATCH 1/12] memcg avoid accounting special mappings not on LRU KAMEZAWA Hiroyuki
2008-09-26  8:25   ` Balbir Singh
2008-09-26  8:25     ` Balbir Singh
2008-09-26  9:17     ` KAMEZAWA Hiroyuki
2008-09-26  9:17       ` KAMEZAWA Hiroyuki
2008-09-26  9:32       ` Balbir Singh
2008-09-26  9:32         ` Balbir Singh
2008-09-26  9:55         ` KAMEZAWA Hiroyuki
2008-09-26  9:55           ` KAMEZAWA Hiroyuki
2008-09-25  6:14 ` [PATCH 2/12] memcg move charege() call to swapped-in page under lock_page() KAMEZAWA Hiroyuki
2008-09-26  8:36   ` Balbir Singh
2008-09-26  8:36     ` Balbir Singh
2008-09-26  9:18     ` KAMEZAWA Hiroyuki
2008-09-26  9:18       ` KAMEZAWA Hiroyuki
2008-09-25  6:15 ` [PATCH 3/12] memcg make root cgroup unlimited KAMEZAWA Hiroyuki
2008-09-26  8:41   ` Balbir Singh
2008-09-26  8:41     ` Balbir Singh
2008-09-26  9:21     ` KAMEZAWA Hiroyuki
2008-09-26  9:21       ` KAMEZAWA Hiroyuki
2008-09-26  9:29       ` Balbir Singh
2008-09-26  9:29         ` Balbir Singh
2008-09-26  9:59         ` KAMEZAWA Hiroyuki
2008-09-26  9:59           ` KAMEZAWA Hiroyuki
2008-09-25  6:16 ` [PATCH 4/12] memcg make page->mapping NULL before calling uncharge KAMEZAWA Hiroyuki
2008-09-26  9:47   ` Balbir Singh
2008-09-26  9:47     ` Balbir Singh
2008-09-26 10:07     ` KAMEZAWA Hiroyuki
2008-09-26 10:07       ` KAMEZAWA Hiroyuki
2008-09-25  6:17 ` [PATCH 5/12] memcg make page_cgroup->flags atomic KAMEZAWA Hiroyuki
2008-09-27  6:58   ` Balbir Singh
2008-09-27  6:58     ` Balbir Singh
2008-09-25  6:18 ` [PATCH 6/12] memcg optimize percpu stat KAMEZAWA Hiroyuki
2008-09-26  9:53   ` Balbir Singh
2008-09-26  9:53     ` Balbir Singh
2008-09-25  6:27 ` [PATCH 7/12] memcg add function to move account KAMEZAWA Hiroyuki
2008-09-26  7:30   ` Daisuke Nishimura
2008-09-26  7:30     ` Daisuke Nishimura
2008-09-26  9:24     ` KAMEZAWA Hiroyuki
2008-09-26  9:24       ` KAMEZAWA Hiroyuki
2008-09-27  7:56   ` Balbir Singh [this message]
2008-09-27  7:56     ` Balbir Singh
2008-09-27  8:35     ` kamezawa.hiroyu
2008-09-27  8:35       ` kamezawa.hiroyu
2008-09-25  6:29 ` [PATCH 8/12] memcg rewrite force empty to move account to root KAMEZAWA Hiroyuki
2008-09-25  6:32 ` [PATCH 9/12] memcg allocate all page_cgroup at boot KAMEZAWA Hiroyuki
2008-09-25 18:40   ` Dave Hansen
2008-09-25 18:40     ` Dave Hansen
2008-09-26  1:17     ` KAMEZAWA Hiroyuki
2008-09-26  1:17       ` KAMEZAWA Hiroyuki
2008-09-26  1:22       ` KAMEZAWA Hiroyuki
2008-09-26  1:22         ` KAMEZAWA Hiroyuki
2008-09-26  1:00   ` Daisuke Nishimura
2008-09-26  1:00     ` Daisuke Nishimura
2008-09-26  1:43     ` KAMEZAWA Hiroyuki
2008-09-26  1:43       ` KAMEZAWA Hiroyuki
2008-09-26  2:05       ` KAMEZAWA Hiroyuki
2008-09-26  2:05         ` KAMEZAWA Hiroyuki
2008-09-26  5:54         ` Daisuke Nishimura
2008-09-26  5:54           ` Daisuke Nishimura
2008-09-26  6:54           ` KAMEZAWA Hiroyuki
2008-09-26  6:54             ` KAMEZAWA Hiroyuki
2008-09-27  3:47           ` KAMEZAWA Hiroyuki
2008-09-27  3:47             ` KAMEZAWA Hiroyuki
2008-09-27  3:25       ` KAMEZAWA Hiroyuki
2008-09-27  3:25         ` KAMEZAWA Hiroyuki
2008-09-26  2:21   ` [PATCH(fixed) " KAMEZAWA Hiroyuki
2008-09-26  2:21     ` KAMEZAWA Hiroyuki
2008-09-26  2:25     ` [PATCH(fixed) 10/12] free page cgroup from LRU in lazy KAMEZAWA Hiroyuki
2008-09-26  2:25       ` KAMEZAWA Hiroyuki
2008-09-26  2:28       ` [PATCH(fixed) 11/12] free page cgroup from LRU in add KAMEZAWA Hiroyuki
2008-09-26  2:28         ` KAMEZAWA Hiroyuki
2008-10-01  4:03   ` [PATCH 9/12] memcg allocate all page_cgroup at boot Balbir Singh
2008-10-01  4:03     ` Balbir Singh
2008-10-01  5:07     ` KAMEZAWA Hiroyuki
2008-10-01  5:07       ` KAMEZAWA Hiroyuki
2008-10-01  5:30       ` Balbir Singh
2008-10-01  5:30         ` Balbir Singh
2008-10-01  5:41         ` KAMEZAWA Hiroyuki
2008-10-01  5:41           ` KAMEZAWA Hiroyuki
2008-10-01  6:12           ` KAMEZAWA Hiroyuki
2008-10-01  6:12             ` KAMEZAWA Hiroyuki
2008-10-01  6:26             ` Balbir Singh
2008-10-01  6:26               ` Balbir Singh
2008-10-01  5:32       ` KAMEZAWA Hiroyuki
2008-10-01  5:32         ` KAMEZAWA Hiroyuki
2008-10-01  5:59         ` Balbir Singh
2008-10-01  5:59           ` Balbir Singh
2008-10-01  6:17           ` KAMEZAWA Hiroyuki
2008-10-01  6:17             ` KAMEZAWA Hiroyuki
2008-09-25  6:33 ` [PATCH 10/12] memcg free page_cgroup from LRU in lazy KAMEZAWA Hiroyuki
2008-09-25  6:35 ` [PATCH 11/12] memcg add to " KAMEZAWA Hiroyuki
2008-09-25  6:36 ` [PATCH 12/12] memcg: fix race at charging swap-in KAMEZAWA Hiroyuki
2008-09-26  2:32 ` [PATCH 0/12] memcg updates v5 Daisuke Nishimura
2008-09-26  2:32   ` Daisuke Nishimura
2008-09-26  2:58   ` KAMEZAWA Hiroyuki
2008-09-26  2:58     ` KAMEZAWA Hiroyuki
2008-09-26  3:04     ` KAMEZAWA Hiroyuki
2008-09-26  3:04       ` KAMEZAWA Hiroyuki
2008-09-26  3:00       ` Daisuke Nishimura
2008-09-26  3:00         ` Daisuke Nishimura
2008-09-26  4:05         ` KAMEZAWA Hiroyuki
2008-09-26  4:05           ` KAMEZAWA Hiroyuki
2008-09-26  5:24           ` Daisuke Nishimura
2008-09-26  5:24             ` Daisuke Nishimura
2008-09-26  9:28             ` KAMEZAWA Hiroyuki
2008-09-26  9:28               ` KAMEZAWA Hiroyuki
2008-09-26 10:43             ` KAMEZAWA Hiroyuki
2008-09-26 10:43               ` KAMEZAWA Hiroyuki
2008-09-27  2:53               ` KAMEZAWA Hiroyuki
2008-09-27  2:53                 ` KAMEZAWA Hiroyuki
2008-09-26  8:18 ` Balbir Singh
2008-09-26  8:18   ` Balbir Singh
2008-09-26  9:22   ` KAMEZAWA Hiroyuki
2008-09-26  9:22     ` KAMEZAWA Hiroyuki
2008-09-26  9:31     ` Balbir Singh
2008-09-26  9:31       ` Balbir Singh
2008-09-26 10:36       ` KAMEZAWA Hiroyuki
2008-09-26 10:36         ` KAMEZAWA Hiroyuki
2008-09-27  3:19         ` KAMEZAWA Hiroyuki
2008-09-27  3:19           ` KAMEZAWA Hiroyuki
2008-09-29  3:02           ` Balbir Singh
2008-09-29  3:02             ` Balbir Singh
2008-09-29  3:27             ` KAMEZAWA Hiroyuki
2008-09-29  3:27               ` KAMEZAWA Hiroyuki

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=48DDE721.9060309@linux.vnet.ibm.com \
    --to=balbir@linux.vnet.ibm.com \
    --cc=akpm@linux-foundation.org \
    --cc=haveblue@us.ibm.com \
    --cc=kamezawa.hiroyu@jp.fujitsu.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-mm@kvack.org \
    --cc=nishimura@mxp.nes.nec.co.jp \
    --cc=ryov@valinux.co.jp \
    --cc=xemul@openvz.org \
    /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.