All of lore.kernel.org
 help / color / mirror / Atom feed
diff for duplicates of <4F6C3BB2.6090108@jp.fujitsu.com>

diff --git a/a/1.txt b/N1/1.txt
index 6303260..771cbf8 100644
--- a/a/1.txt
+++ b/N1/1.txt
@@ -28,223 +28,3 @@ Thank you for your good eyes.. I feel I can't trust my eyes ;(
 
 
 ==
-From d7ed385bad22d352bb28aeb9380591b72ec5bec5 Mon Sep 17 00:00:00 2001
-From: KAMEZAWA Hiroyuki <kamezawa.hiroyu-+CUm20s59erQFUHtdCDX3A@public.gmane.org>
-Date: Wed, 21 Mar 2012 19:03:40 +0900
-Subject: [PATCH] memcg: fix/change behavior of shared anon at moving task.
-
-This patch changes memcg's behavior at task_move().
-
-At task_move(), the kernel scans a task's page table and move
-the changes for mapped pages from source cgroup to target cgroup.
-There has been a bug at handling shared anonymous pages for a long time.
-
-Before patch:
-  - The spec says 'shared anonymous pages are not moved.'
-  - The implementation was 'shared anonymoys pages may be moved'.
-    If page_mapcount <=2, shared anonymous pages's charge were moved.
-
-After patch:
-  - The spec says 'all anonymous pages are moved'.
-  - The implementation is 'all anonymous pages are moved'.
-
-Considering usage of memcg, this will not affect user's experience.
-'shared anonymous' pages only exists between a tree of processes
-which don't do exec(). Moving one of process without exec() seems
-not sane. For example, libcgroup will not be affected by this change.
-(Anyway, no one noticed the implementation for a long time...)
-
-Below is a discussion log:
-
- - current spec/implementation are complex
- - Now, shared file caches are moved
- - It adds unclear check as page_mapcount(). To do correct check,
-   we should check swap users, etc.
- - No one notice this implementation behavior. So, no one get benefit
-   from the design.
- - In general, once task is moved to a cgroup for running, it will not
-   be moved....
- - Finally, we have control knob as memory.move_charge_at_immigrate.
-
-Here is a patch to allow moving shared pages, completely. This makes
-memcg simpler and fix current broken code.
-
-Changelog:
-  - fixed CONFFIG_SWAP...
-Changelog:
-  - fixed comment around find_get_page()
-  - changed CONFIG_SWAP handling
-  - updated patch description
-
-Suggested-by: Hugh Dickins <hughd-hpIqsD4AKlfQT0dZR+AlfA@public.gmane.org>
-Signed-off-by: KAMEZAWA Hiroyuki <kamezawa.hiroyu-+CUm20s59erQFUHtdCDX3A@public.gmane.org>
----
- Documentation/cgroups/memory.txt |    9 ++++-----
- include/linux/swap.h             |    9 ---------
- mm/memcontrol.c                  |   22 ++++++++++++++--------
- mm/swapfile.c                    |   31 -------------------------------
- 4 files changed, 18 insertions(+), 53 deletions(-)
-
-diff --git a/Documentation/cgroups/memory.txt b/Documentation/cgroups/memory.txt
-index 4c95c00..84d4f00 100644
---- a/Documentation/cgroups/memory.txt
-+++ b/Documentation/cgroups/memory.txt
-@@ -185,12 +185,14 @@ behind this approach is that a cgroup that aggressively uses a shared
- page will eventually get charged for it (once it is uncharged from
- the cgroup that brought it in -- this will happen on memory pressure).
- 
-+But see section 8.2: when moving a task to another cgroup, its pages may
-+be recharged to the new cgroup, if move_charge_at_immigrate has been chosen.
-+
- Exception: If CONFIG_CGROUP_CGROUP_MEM_RES_CTLR_SWAP is not used.
- When you do swapoff and make swapped-out pages of shmem(tmpfs) to
- be backed into memory in force, charges for pages are accounted against the
- caller of swapoff rather than the users of shmem.
- 
--
- 2.4 Swap Extension (CONFIG_CGROUP_MEM_RES_CTLR_SWAP)
- 
- Swap Extension allows you to record charge for swap. A swapped-in page is
-@@ -623,8 +625,7 @@ memory cgroup.
-   bit | what type of charges would be moved ?
-  -----+------------------------------------------------------------------------
-    0  | A charge of an anonymous page(or swap of it) used by the target task.
--      | Those pages and swaps must be used only by the target task. You must
--      | enable Swap Extension(see 2.4) to enable move of swap charges.
-+      | You must enable Swap Extension(see 2.4) to enable move of swap charges.
-  -----+------------------------------------------------------------------------
-    1  | A charge of file pages(normal file, tmpfs file(e.g. ipc shared memory)
-       | and swaps of tmpfs file) mmapped by the target task. Unlike the case of
-@@ -637,8 +638,6 @@ memory cgroup.
- 
- 8.3 TODO
- 
--- Implement madvise(2) to let users decide the vma to be moved or not to be
--  moved.
- - All of moving charge operations are done under cgroup_mutex. It's not good
-   behavior to hold the mutex too long, so we may need some trick.
- 
-diff --git a/include/linux/swap.h b/include/linux/swap.h
-index 6e66c03..70d2c74 100644
---- a/include/linux/swap.h
-+++ b/include/linux/swap.h
-@@ -387,7 +387,6 @@ static inline void deactivate_swap_token(struct mm_struct *mm, bool swap_token)
- #ifdef CONFIG_CGROUP_MEM_RES_CTLR
- extern void
- mem_cgroup_uncharge_swapcache(struct page *page, swp_entry_t ent, bool swapout);
--extern int mem_cgroup_count_swap_user(swp_entry_t ent, struct page **pagep);
- #else
- static inline void
- mem_cgroup_uncharge_swapcache(struct page *page, swp_entry_t ent, bool swapout)
-@@ -532,14 +531,6 @@ mem_cgroup_uncharge_swapcache(struct page *page, swp_entry_t ent)
- {
- }
- 
--#ifdef CONFIG_CGROUP_MEM_RES_CTLR
--static inline int
--mem_cgroup_count_swap_user(swp_entry_t ent, struct page **pagep)
--{
--	return 0;
--}
--#endif
--
- #endif /* CONFIG_SWAP */
- #endif /* __KERNEL__*/
- #endif /* _LINUX_SWAP_H */
-diff --git a/mm/memcontrol.c b/mm/memcontrol.c
-index b2ee6df..962b97a 100644
---- a/mm/memcontrol.c
-+++ b/mm/memcontrol.c
-@@ -5147,7 +5147,7 @@ static struct page *mc_handle_present_pte(struct vm_area_struct *vma,
- 		return NULL;
- 	if (PageAnon(page)) {
- 		/* we don't move shared anon */
--		if (!move_anon() || page_mapcount(page) > 2)
-+		if (!move_anon())
- 			return NULL;
- 	} else if (!move_file())
- 		/* we ignore mapcount for file pages */
-@@ -5158,26 +5158,32 @@ static struct page *mc_handle_present_pte(struct vm_area_struct *vma,
- 	return page;
- }
- 
-+#ifdef CONFIG_SWAP
- static struct page *mc_handle_swap_pte(struct vm_area_struct *vma,
- 			unsigned long addr, pte_t ptent, swp_entry_t *entry)
- {
--	int usage_count;
- 	struct page *page = NULL;
- 	swp_entry_t ent = pte_to_swp_entry(ptent);
- 
- 	if (!move_anon() || non_swap_entry(ent))
- 		return NULL;
--	usage_count = mem_cgroup_count_swap_user(ent, &page);
--	if (usage_count > 1) { /* we don't move shared anon */
--		if (page)
--			put_page(page);
--		return NULL;
--	}
-+	/*
-+	 * Because lookup_swap_cache() updates some statistics counter,
-+	 * we call find_get_page() with swapper_space directly.
-+	 */
-+	page = find_get_page(&swapper_space, ent.val);
- 	if (do_swap_account)
- 		entry->val = ent.val;
- 
- 	return page;
- }
-+#else
-+static struct page *mc_handle_swap_pte(struct vm_area_struct *vma,
-+			unsigned long addr, pte_t ptent, swp_entry_t *entry)
-+{
-+	return NULL;
-+}
-+#endif
- 
- static struct page *mc_handle_file_pte(struct vm_area_struct *vma,
- 			unsigned long addr, pte_t ptent, swp_entry_t *entry)
-diff --git a/mm/swapfile.c b/mm/swapfile.c
-index dae42f3..fedeb6b 100644
---- a/mm/swapfile.c
-+++ b/mm/swapfile.c
-@@ -717,37 +717,6 @@ int free_swap_and_cache(swp_entry_t entry)
- 	return p != NULL;
- }
- 
--#ifdef CONFIG_CGROUP_MEM_RES_CTLR
--/**
-- * mem_cgroup_count_swap_user - count the user of a swap entry
-- * @ent: the swap entry to be checked
-- * @pagep: the pointer for the swap cache page of the entry to be stored
-- *
-- * Returns the number of the user of the swap entry. The number is valid only
-- * for swaps of anonymous pages.
-- * If the entry is found on swap cache, the page is stored to pagep with
-- * refcount of it being incremented.
-- */
--int mem_cgroup_count_swap_user(swp_entry_t ent, struct page **pagep)
--{
--	struct page *page;
--	struct swap_info_struct *p;
--	int count = 0;
--
--	page = find_get_page(&swapper_space, ent.val);
--	if (page)
--		count += page_mapcount(page);
--	p = swap_info_get(ent);
--	if (p) {
--		count += swap_count(p->swap_map[swp_offset(ent)]);
--		spin_unlock(&swap_lock);
--	}
--
--	*pagep = page;
--	return count;
--}
--#endif
--
- #ifdef CONFIG_HIBERNATION
- /*
-  * Find the swap type that corresponds to given device (if any).
--- 
-1.7.4.1
diff --git a/a/content_digest b/N1/content_digest
index 4f1676e..582a1de 100644
--- a/a/content_digest
+++ b/N1/content_digest
@@ -4,19 +4,18 @@
  "ref\020120322173000.f078a43f.akpm@linux-foundation.org\0"
  "ref\04F6BC94C.80301@jp.fujitsu.com\0"
  "ref\020120323085301.GA1739@cmpxchg.org\0"
- "ref\020120323085301.GA1739-druUgvl0LCNAfugRpC6u6w@public.gmane.org\0"
- "From\0KAMEZAWA Hiroyuki <kamezawa.hiroyu-+CUm20s59erQFUHtdCDX3A@public.gmane.org>\0"
+ "From\0KAMEZAWA Hiroyuki <kamezawa.hiroyu@jp.fujitsu.com>\0"
  "Subject\0Re: [PATCH] memcg: change behavior of moving charges at task move\0"
  "Date\0Fri, 23 Mar 2012 18:00:34 +0900\0"
- "To\0Johannes Weiner <hannes-druUgvl0LCNAfugRpC6u6w@public.gmane.org>\0"
- "Cc\0Andrew Morton <akpm-de/tnXTf+JLsfHDXvbKv3WD2FQJk+8+b@public.gmane.org>"
-  linux-mm-Bw31MaZKKs3YtjvyW6yDsg@public.gmane.org <linux-mm-Bw31MaZKKs3YtjvyW6yDsg@public.gmane.org>
-  Linux Kernel <linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org>
-  cgroups-u79uwXL29TY76Z2rM5mHXA@public.gmane.org <cgroups-u79uwXL29TY76Z2rM5mHXA@public.gmane.org>
-  Hugh Dickins <hughd-hpIqsD4AKlfQT0dZR+AlfA@public.gmane.org>
-  n-horiguchi-PaJj6Psr51x8UrSeD/g0lQ@public.gmane.org <n-horiguchi-PaJj6Psr51x8UrSeD/g0lQ@public.gmane.org>
-  Michal Hocko <mhocko-AlSwsSmVLrQ@public.gmane.org>
- " Glauber Costa <glommer-bzQdu9zFT3WakBO8gow8eQ@public.gmane.org>\0"
+ "To\0Johannes Weiner <hannes@cmpxchg.org>\0"
+ "Cc\0Andrew Morton <akpm@linux-foundation.org>"
+  linux-mm@kvack.org <linux-mm@kvack.org>
+  Linux Kernel <linux-kernel@vger.kernel.org>
+  cgroups@vger.kernel.org <cgroups@vger.kernel.org>
+  Hugh Dickins <hughd@google.com>
+  n-horiguchi@ah.jp.nec.com <n-horiguchi@ah.jp.nec.com>
+  Michal Hocko <mhocko@suse.cz>
+ " Glauber Costa <glommer@parallels.com>\0"
  "\00:1\0"
  "b\0"
  "(2012/03/23 17:53), Johannes Weiner wrote:\n"
@@ -48,226 +47,6 @@
  "Thank you for your good eyes.. I feel I can't trust my eyes ;(\n"
  "\n"
  "\n"
- "==\n"
- "From d7ed385bad22d352bb28aeb9380591b72ec5bec5 Mon Sep 17 00:00:00 2001\n"
- "From: KAMEZAWA Hiroyuki <kamezawa.hiroyu-+CUm20s59erQFUHtdCDX3A@public.gmane.org>\n"
- "Date: Wed, 21 Mar 2012 19:03:40 +0900\n"
- "Subject: [PATCH] memcg: fix/change behavior of shared anon at moving task.\n"
- "\n"
- "This patch changes memcg's behavior at task_move().\n"
- "\n"
- "At task_move(), the kernel scans a task's page table and move\n"
- "the changes for mapped pages from source cgroup to target cgroup.\n"
- "There has been a bug at handling shared anonymous pages for a long time.\n"
- "\n"
- "Before patch:\n"
- "  - The spec says 'shared anonymous pages are not moved.'\n"
- "  - The implementation was 'shared anonymoys pages may be moved'.\n"
- "    If page_mapcount <=2, shared anonymous pages's charge were moved.\n"
- "\n"
- "After patch:\n"
- "  - The spec says 'all anonymous pages are moved'.\n"
- "  - The implementation is 'all anonymous pages are moved'.\n"
- "\n"
- "Considering usage of memcg, this will not affect user's experience.\n"
- "'shared anonymous' pages only exists between a tree of processes\n"
- "which don't do exec(). Moving one of process without exec() seems\n"
- "not sane. For example, libcgroup will not be affected by this change.\n"
- "(Anyway, no one noticed the implementation for a long time...)\n"
- "\n"
- "Below is a discussion log:\n"
- "\n"
- " - current spec/implementation are complex\n"
- " - Now, shared file caches are moved\n"
- " - It adds unclear check as page_mapcount(). To do correct check,\n"
- "   we should check swap users, etc.\n"
- " - No one notice this implementation behavior. So, no one get benefit\n"
- "   from the design.\n"
- " - In general, once task is moved to a cgroup for running, it will not\n"
- "   be moved....\n"
- " - Finally, we have control knob as memory.move_charge_at_immigrate.\n"
- "\n"
- "Here is a patch to allow moving shared pages, completely. This makes\n"
- "memcg simpler and fix current broken code.\n"
- "\n"
- "Changelog:\n"
- "  - fixed CONFFIG_SWAP...\n"
- "Changelog:\n"
- "  - fixed comment around find_get_page()\n"
- "  - changed CONFIG_SWAP handling\n"
- "  - updated patch description\n"
- "\n"
- "Suggested-by: Hugh Dickins <hughd-hpIqsD4AKlfQT0dZR+AlfA@public.gmane.org>\n"
- "Signed-off-by: KAMEZAWA Hiroyuki <kamezawa.hiroyu-+CUm20s59erQFUHtdCDX3A@public.gmane.org>\n"
- "---\n"
- " Documentation/cgroups/memory.txt |    9 ++++-----\n"
- " include/linux/swap.h             |    9 ---------\n"
- " mm/memcontrol.c                  |   22 ++++++++++++++--------\n"
- " mm/swapfile.c                    |   31 -------------------------------\n"
- " 4 files changed, 18 insertions(+), 53 deletions(-)\n"
- "\n"
- "diff --git a/Documentation/cgroups/memory.txt b/Documentation/cgroups/memory.txt\n"
- "index 4c95c00..84d4f00 100644\n"
- "--- a/Documentation/cgroups/memory.txt\n"
- "+++ b/Documentation/cgroups/memory.txt\n"
- "@@ -185,12 +185,14 @@ behind this approach is that a cgroup that aggressively uses a shared\n"
- " page will eventually get charged for it (once it is uncharged from\n"
- " the cgroup that brought it in -- this will happen on memory pressure).\n"
- " \n"
- "+But see section 8.2: when moving a task to another cgroup, its pages may\n"
- "+be recharged to the new cgroup, if move_charge_at_immigrate has been chosen.\n"
- "+\n"
- " Exception: If CONFIG_CGROUP_CGROUP_MEM_RES_CTLR_SWAP is not used.\n"
- " When you do swapoff and make swapped-out pages of shmem(tmpfs) to\n"
- " be backed into memory in force, charges for pages are accounted against the\n"
- " caller of swapoff rather than the users of shmem.\n"
- " \n"
- "-\n"
- " 2.4 Swap Extension (CONFIG_CGROUP_MEM_RES_CTLR_SWAP)\n"
- " \n"
- " Swap Extension allows you to record charge for swap. A swapped-in page is\n"
- "@@ -623,8 +625,7 @@ memory cgroup.\n"
- "   bit | what type of charges would be moved ?\n"
- "  -----+------------------------------------------------------------------------\n"
- "    0  | A charge of an anonymous page(or swap of it) used by the target task.\n"
- "-      | Those pages and swaps must be used only by the target task. You must\n"
- "-      | enable Swap Extension(see 2.4) to enable move of swap charges.\n"
- "+      | You must enable Swap Extension(see 2.4) to enable move of swap charges.\n"
- "  -----+------------------------------------------------------------------------\n"
- "    1  | A charge of file pages(normal file, tmpfs file(e.g. ipc shared memory)\n"
- "       | and swaps of tmpfs file) mmapped by the target task. Unlike the case of\n"
- "@@ -637,8 +638,6 @@ memory cgroup.\n"
- " \n"
- " 8.3 TODO\n"
- " \n"
- "-- Implement madvise(2) to let users decide the vma to be moved or not to be\n"
- "-  moved.\n"
- " - All of moving charge operations are done under cgroup_mutex. It's not good\n"
- "   behavior to hold the mutex too long, so we may need some trick.\n"
- " \n"
- "diff --git a/include/linux/swap.h b/include/linux/swap.h\n"
- "index 6e66c03..70d2c74 100644\n"
- "--- a/include/linux/swap.h\n"
- "+++ b/include/linux/swap.h\n"
- "@@ -387,7 +387,6 @@ static inline void deactivate_swap_token(struct mm_struct *mm, bool swap_token)\n"
- " #ifdef CONFIG_CGROUP_MEM_RES_CTLR\n"
- " extern void\n"
- " mem_cgroup_uncharge_swapcache(struct page *page, swp_entry_t ent, bool swapout);\n"
- "-extern int mem_cgroup_count_swap_user(swp_entry_t ent, struct page **pagep);\n"
- " #else\n"
- " static inline void\n"
- " mem_cgroup_uncharge_swapcache(struct page *page, swp_entry_t ent, bool swapout)\n"
- "@@ -532,14 +531,6 @@ mem_cgroup_uncharge_swapcache(struct page *page, swp_entry_t ent)\n"
- " {\n"
- " }\n"
- " \n"
- "-#ifdef CONFIG_CGROUP_MEM_RES_CTLR\n"
- "-static inline int\n"
- "-mem_cgroup_count_swap_user(swp_entry_t ent, struct page **pagep)\n"
- "-{\n"
- "-\treturn 0;\n"
- "-}\n"
- "-#endif\n"
- "-\n"
- " #endif /* CONFIG_SWAP */\n"
- " #endif /* __KERNEL__*/\n"
- " #endif /* _LINUX_SWAP_H */\n"
- "diff --git a/mm/memcontrol.c b/mm/memcontrol.c\n"
- "index b2ee6df..962b97a 100644\n"
- "--- a/mm/memcontrol.c\n"
- "+++ b/mm/memcontrol.c\n"
- "@@ -5147,7 +5147,7 @@ static struct page *mc_handle_present_pte(struct vm_area_struct *vma,\n"
- " \t\treturn NULL;\n"
- " \tif (PageAnon(page)) {\n"
- " \t\t/* we don't move shared anon */\n"
- "-\t\tif (!move_anon() || page_mapcount(page) > 2)\n"
- "+\t\tif (!move_anon())\n"
- " \t\t\treturn NULL;\n"
- " \t} else if (!move_file())\n"
- " \t\t/* we ignore mapcount for file pages */\n"
- "@@ -5158,26 +5158,32 @@ static struct page *mc_handle_present_pte(struct vm_area_struct *vma,\n"
- " \treturn page;\n"
- " }\n"
- " \n"
- "+#ifdef CONFIG_SWAP\n"
- " static struct page *mc_handle_swap_pte(struct vm_area_struct *vma,\n"
- " \t\t\tunsigned long addr, pte_t ptent, swp_entry_t *entry)\n"
- " {\n"
- "-\tint usage_count;\n"
- " \tstruct page *page = NULL;\n"
- " \tswp_entry_t ent = pte_to_swp_entry(ptent);\n"
- " \n"
- " \tif (!move_anon() || non_swap_entry(ent))\n"
- " \t\treturn NULL;\n"
- "-\tusage_count = mem_cgroup_count_swap_user(ent, &page);\n"
- "-\tif (usage_count > 1) { /* we don't move shared anon */\n"
- "-\t\tif (page)\n"
- "-\t\t\tput_page(page);\n"
- "-\t\treturn NULL;\n"
- "-\t}\n"
- "+\t/*\n"
- "+\t * Because lookup_swap_cache() updates some statistics counter,\n"
- "+\t * we call find_get_page() with swapper_space directly.\n"
- "+\t */\n"
- "+\tpage = find_get_page(&swapper_space, ent.val);\n"
- " \tif (do_swap_account)\n"
- " \t\tentry->val = ent.val;\n"
- " \n"
- " \treturn page;\n"
- " }\n"
- "+#else\n"
- "+static struct page *mc_handle_swap_pte(struct vm_area_struct *vma,\n"
- "+\t\t\tunsigned long addr, pte_t ptent, swp_entry_t *entry)\n"
- "+{\n"
- "+\treturn NULL;\n"
- "+}\n"
- "+#endif\n"
- " \n"
- " static struct page *mc_handle_file_pte(struct vm_area_struct *vma,\n"
- " \t\t\tunsigned long addr, pte_t ptent, swp_entry_t *entry)\n"
- "diff --git a/mm/swapfile.c b/mm/swapfile.c\n"
- "index dae42f3..fedeb6b 100644\n"
- "--- a/mm/swapfile.c\n"
- "+++ b/mm/swapfile.c\n"
- "@@ -717,37 +717,6 @@ int free_swap_and_cache(swp_entry_t entry)\n"
- " \treturn p != NULL;\n"
- " }\n"
- " \n"
- "-#ifdef CONFIG_CGROUP_MEM_RES_CTLR\n"
- "-/**\n"
- "- * mem_cgroup_count_swap_user - count the user of a swap entry\n"
- "- * @ent: the swap entry to be checked\n"
- "- * @pagep: the pointer for the swap cache page of the entry to be stored\n"
- "- *\n"
- "- * Returns the number of the user of the swap entry. The number is valid only\n"
- "- * for swaps of anonymous pages.\n"
- "- * If the entry is found on swap cache, the page is stored to pagep with\n"
- "- * refcount of it being incremented.\n"
- "- */\n"
- "-int mem_cgroup_count_swap_user(swp_entry_t ent, struct page **pagep)\n"
- "-{\n"
- "-\tstruct page *page;\n"
- "-\tstruct swap_info_struct *p;\n"
- "-\tint count = 0;\n"
- "-\n"
- "-\tpage = find_get_page(&swapper_space, ent.val);\n"
- "-\tif (page)\n"
- "-\t\tcount += page_mapcount(page);\n"
- "-\tp = swap_info_get(ent);\n"
- "-\tif (p) {\n"
- "-\t\tcount += swap_count(p->swap_map[swp_offset(ent)]);\n"
- "-\t\tspin_unlock(&swap_lock);\n"
- "-\t}\n"
- "-\n"
- "-\t*pagep = page;\n"
- "-\treturn count;\n"
- "-}\n"
- "-#endif\n"
- "-\n"
- " #ifdef CONFIG_HIBERNATION\n"
- " /*\n"
- "  * Find the swap type that corresponds to given device (if any).\n"
- "-- \n"
- 1.7.4.1
+ ==
 
-64f2ec14ad2e1d296de14a2ff94e39d40a6e5b3968f41944f26b7fb5d8812f28
+7d76cc8fc2cd55f2e1ced24d14ae705ac2b31a8f4d64d0ef27be32f62e90473c

diff --git a/a/1.txt b/N2/1.txt
index 6303260..4c28470 100644
--- a/a/1.txt
+++ b/N2/1.txt
@@ -28,8 +28,8 @@ Thank you for your good eyes.. I feel I can't trust my eyes ;(
 
 
 ==
-From d7ed385bad22d352bb28aeb9380591b72ec5bec5 Mon Sep 17 00:00:00 2001
-From: KAMEZAWA Hiroyuki <kamezawa.hiroyu-+CUm20s59erQFUHtdCDX3A@public.gmane.org>
+>From d7ed385bad22d352bb28aeb9380591b72ec5bec5 Mon Sep 17 00:00:00 2001
+From: KAMEZAWA Hiroyuki <kamezawa.hiroyu@jp.fujitsu.com>
 Date: Wed, 21 Mar 2012 19:03:40 +0900
 Subject: [PATCH] memcg: fix/change behavior of shared anon at moving task.
 
@@ -76,8 +76,8 @@ Changelog:
   - changed CONFIG_SWAP handling
   - updated patch description
 
-Suggested-by: Hugh Dickins <hughd-hpIqsD4AKlfQT0dZR+AlfA@public.gmane.org>
-Signed-off-by: KAMEZAWA Hiroyuki <kamezawa.hiroyu-+CUm20s59erQFUHtdCDX3A@public.gmane.org>
+Suggested-by: Hugh Dickins <hughd@google.com>
+Signed-off-by: KAMEZAWA Hiroyuki <kamezawa.hiroyu@jp.fujitsu.com>
 ---
  Documentation/cgroups/memory.txt |    9 ++++-----
  include/linux/swap.h             |    9 ---------
diff --git a/a/content_digest b/N2/content_digest
index 4f1676e..5e9be8d 100644
--- a/a/content_digest
+++ b/N2/content_digest
@@ -4,19 +4,18 @@
  "ref\020120322173000.f078a43f.akpm@linux-foundation.org\0"
  "ref\04F6BC94C.80301@jp.fujitsu.com\0"
  "ref\020120323085301.GA1739@cmpxchg.org\0"
- "ref\020120323085301.GA1739-druUgvl0LCNAfugRpC6u6w@public.gmane.org\0"
- "From\0KAMEZAWA Hiroyuki <kamezawa.hiroyu-+CUm20s59erQFUHtdCDX3A@public.gmane.org>\0"
+ "From\0KAMEZAWA Hiroyuki <kamezawa.hiroyu@jp.fujitsu.com>\0"
  "Subject\0Re: [PATCH] memcg: change behavior of moving charges at task move\0"
  "Date\0Fri, 23 Mar 2012 18:00:34 +0900\0"
- "To\0Johannes Weiner <hannes-druUgvl0LCNAfugRpC6u6w@public.gmane.org>\0"
- "Cc\0Andrew Morton <akpm-de/tnXTf+JLsfHDXvbKv3WD2FQJk+8+b@public.gmane.org>"
-  linux-mm-Bw31MaZKKs3YtjvyW6yDsg@public.gmane.org <linux-mm-Bw31MaZKKs3YtjvyW6yDsg@public.gmane.org>
-  Linux Kernel <linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org>
-  cgroups-u79uwXL29TY76Z2rM5mHXA@public.gmane.org <cgroups-u79uwXL29TY76Z2rM5mHXA@public.gmane.org>
-  Hugh Dickins <hughd-hpIqsD4AKlfQT0dZR+AlfA@public.gmane.org>
-  n-horiguchi-PaJj6Psr51x8UrSeD/g0lQ@public.gmane.org <n-horiguchi-PaJj6Psr51x8UrSeD/g0lQ@public.gmane.org>
-  Michal Hocko <mhocko-AlSwsSmVLrQ@public.gmane.org>
- " Glauber Costa <glommer-bzQdu9zFT3WakBO8gow8eQ@public.gmane.org>\0"
+ "To\0Johannes Weiner <hannes@cmpxchg.org>\0"
+ "Cc\0Andrew Morton <akpm@linux-foundation.org>"
+  linux-mm@kvack.org <linux-mm@kvack.org>
+  Linux Kernel <linux-kernel@vger.kernel.org>
+  cgroups@vger.kernel.org <cgroups@vger.kernel.org>
+  Hugh Dickins <hughd@google.com>
+  n-horiguchi@ah.jp.nec.com <n-horiguchi@ah.jp.nec.com>
+  Michal Hocko <mhocko@suse.cz>
+ " Glauber Costa <glommer@parallels.com>\0"
  "\00:1\0"
  "b\0"
  "(2012/03/23 17:53), Johannes Weiner wrote:\n"
@@ -49,8 +48,8 @@
  "\n"
  "\n"
  "==\n"
- "From d7ed385bad22d352bb28aeb9380591b72ec5bec5 Mon Sep 17 00:00:00 2001\n"
- "From: KAMEZAWA Hiroyuki <kamezawa.hiroyu-+CUm20s59erQFUHtdCDX3A@public.gmane.org>\n"
+ ">From d7ed385bad22d352bb28aeb9380591b72ec5bec5 Mon Sep 17 00:00:00 2001\n"
+ "From: KAMEZAWA Hiroyuki <kamezawa.hiroyu@jp.fujitsu.com>\n"
  "Date: Wed, 21 Mar 2012 19:03:40 +0900\n"
  "Subject: [PATCH] memcg: fix/change behavior of shared anon at moving task.\n"
  "\n"
@@ -97,8 +96,8 @@
  "  - changed CONFIG_SWAP handling\n"
  "  - updated patch description\n"
  "\n"
- "Suggested-by: Hugh Dickins <hughd-hpIqsD4AKlfQT0dZR+AlfA@public.gmane.org>\n"
- "Signed-off-by: KAMEZAWA Hiroyuki <kamezawa.hiroyu-+CUm20s59erQFUHtdCDX3A@public.gmane.org>\n"
+ "Suggested-by: Hugh Dickins <hughd@google.com>\n"
+ "Signed-off-by: KAMEZAWA Hiroyuki <kamezawa.hiroyu@jp.fujitsu.com>\n"
  "---\n"
  " Documentation/cgroups/memory.txt |    9 ++++-----\n"
  " include/linux/swap.h             |    9 ---------\n"
@@ -270,4 +269,4 @@
  "-- \n"
  1.7.4.1
 
-64f2ec14ad2e1d296de14a2ff94e39d40a6e5b3968f41944f26b7fb5d8812f28
+43536566c82ab7a817f6f9a284a1e60296411f0869024ef6eb7d1cb75fc87bc8

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.