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

diff --git a/a/1.txt b/N1/1.txt
index 32d78aa..d843eed 100644
--- a/a/1.txt
+++ b/N1/1.txt
@@ -3,90 +3,3 @@ But, how about starting with this simeple one for your 1st purpose ?
 doesn't work ? dirty ?
 
 == this patch is untested. ==
- 
-From 95e405451f56933c4777e64bb02326ec0462f7a7 Mon Sep 17 00:00:00 2001
-From: KAMEZAWA Hiroyuki <kamezawa.hiroyu-+CUm20s59erQFUHtdCDX3A@public.gmane.org>
-Date: Tue, 14 May 2013 09:40:55 +0900
-Subject: [PATCH] Allow nesting lock of memcg's page stat accouting.
-
-Sha Zhengju and Michal Hocko pointed out that
-mem_cgroup_begin/end_update_page_stat() should be nested lock.
-https://lkml.org/lkml/2013/1/2/48
-
-page_remove_rmap
-  mem_cgroup_begin_update_page_stat		<<< 1
-    set_page_dirty
-      __set_page_dirty_buffers
-        __set_page_dirty
-          mem_cgroup_begin_update_page_stat	<<< 2
-            move_lock_mem_cgroup
-              spin_lock_irqsave(&memcg->move_lock, *flags);
-
-This patch add a nesting functionality with per-thread counter.
-
-Signed-off-by: KAMEZAWA Hiroyuki <kamezawa.hiroyu-+CUm20s59erQFUHtdCDX3A@public.gmane.org>
----
- include/linux/sched.h |    1 +
- mm/memcontrol.c       |   22 +++++++++++++++++++++-
- 2 files changed, 22 insertions(+), 1 deletions(-)
-
-diff --git a/include/linux/sched.h b/include/linux/sched.h
-index 84ceef5..cca3229 100644
---- a/include/linux/sched.h
-+++ b/include/linux/sched.h
-@@ -1402,6 +1402,7 @@ struct task_struct {
- 		unsigned long memsw_nr_pages; /* uncharged mem+swap usage */
- 	} memcg_batch;
- 	unsigned int memcg_kmem_skip_account;
-+	unsigned int memcg_page_stat_accounting;
- #endif
- #ifdef CONFIG_HAVE_HW_BREAKPOINT
- 	atomic_t ptrace_bp_refcnt;
-diff --git a/mm/memcontrol.c b/mm/memcontrol.c
-index 357371a..152f8df 100644
---- a/mm/memcontrol.c
-+++ b/mm/memcontrol.c
-@@ -2352,12 +2352,30 @@ again:
- 	 */
- 	if (!mem_cgroup_stolen(memcg))
- 		return;
-+	/*
-+	 * In some case, we need nested lock of this.
-+	 * page_remove_rmap
-+	 *   mem_cgroup_begin_update_page_stat		<<< 1
-+	 *     set_page_dirty
-+	 *       __set_page_dirty_buffers
-+	 *         __set_page_dirty
-+	 *           mem_cgroup_begin_update_page_stat	<<< 2
-+	 *             move_lock_mem_cgroup
-+	 *               spin_lock_irqsave(&memcg->move_lock, *flags);
-+	 *
-+	 * We avoid this deadlock by having per thread counter.
-+	 */
-+	if (current->memcg_page_stat_accounting > 0) {
-+		current->memcg_page_stat_accounting++;
-+		return;
-+	}
- 
- 	move_lock_mem_cgroup(memcg, flags);
- 	if (memcg != pc->mem_cgroup || !PageCgroupUsed(pc)) {
- 		move_unlock_mem_cgroup(memcg, flags);
- 		goto again;
- 	}
-+	current->memcg_page_stat_accounting = 1;
- 	*locked = true;
- }
- 
-@@ -2370,7 +2388,9 @@ void __mem_cgroup_end_update_page_stat(struct page *page, unsigned long *flags)
- 	 * lock is held because a routine modifies pc->mem_cgroup
- 	 * should take move_lock_mem_cgroup().
- 	 */
--	move_unlock_mem_cgroup(pc->mem_cgroup, flags);
-+	current->memcg_page_stat_accounting--;
-+	if (!current->memcg_page_stat_accounting)
-+		move_unlock_mem_cgroup(pc->mem_cgroup, flags);
- }
- 
- void mem_cgroup_update_page_stat(struct page *page,
--- 
-1.7.4.1
diff --git a/a/content_digest b/N1/content_digest
index 9b9176b..fae807f 100644
--- a/a/content_digest
+++ b/N1/content_digest
@@ -1,109 +1,21 @@
  "ref\01368421410-4795-1-git-send-email-handai.szj@taobao.com\0"
- "ref\01368421410-4795-1-git-send-email-handai.szj-3b8fjiQLQpfQT0dZR+AlfA@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 V2 0/3] memcg: simply lock of page stat accounting\0"
  "Date\0Tue, 14 May 2013 09:41:42 +0900\0"
- "To\0Sha Zhengju <handai.szj-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>\0"
- "Cc\0cgroups-u79uwXL29TY76Z2rM5mHXA@public.gmane.org"
-  linux-mm-Bw31MaZKKs3YtjvyW6yDsg@public.gmane.org
-  mhocko-AlSwsSmVLrQ@public.gmane.org
-  akpm-de/tnXTf+JLsfHDXvbKv3WD2FQJk+8+b@public.gmane.org
-  hughd-hpIqsD4AKlfQT0dZR+AlfA@public.gmane.org
-  gthelen-hpIqsD4AKlfQT0dZR+AlfA@public.gmane.org
- " Sha Zhengju <handai.szj-3b8fjiQLQpfQT0dZR+AlfA@public.gmane.org>\0"
+ "To\0Sha Zhengju <handai.szj@gmail.com>\0"
+ "Cc\0cgroups@vger.kernel.org"
+  linux-mm@kvack.org
+  mhocko@suse.cz
+  akpm@linux-foundation.org
+  hughd@google.com
+  gthelen@google.com
+ " Sha Zhengju <handai.szj@taobao.com>\0"
  "\00:1\0"
  "b\0"
  "If you want to rewrite all things and make memcg cleaner, I don't stop it.\n"
  "But, how about starting with this simeple one for your 1st purpose ? \n"
  "doesn't work ? dirty ?\n"
  "\n"
- "== this patch is untested. ==\n"
- " \n"
- "From 95e405451f56933c4777e64bb02326ec0462f7a7 Mon Sep 17 00:00:00 2001\n"
- "From: KAMEZAWA Hiroyuki <kamezawa.hiroyu-+CUm20s59erQFUHtdCDX3A@public.gmane.org>\n"
- "Date: Tue, 14 May 2013 09:40:55 +0900\n"
- "Subject: [PATCH] Allow nesting lock of memcg's page stat accouting.\n"
- "\n"
- "Sha Zhengju and Michal Hocko pointed out that\n"
- "mem_cgroup_begin/end_update_page_stat() should be nested lock.\n"
- "https://lkml.org/lkml/2013/1/2/48\n"
- "\n"
- "page_remove_rmap\n"
- "  mem_cgroup_begin_update_page_stat\t\t<<< 1\n"
- "    set_page_dirty\n"
- "      __set_page_dirty_buffers\n"
- "        __set_page_dirty\n"
- "          mem_cgroup_begin_update_page_stat\t<<< 2\n"
- "            move_lock_mem_cgroup\n"
- "              spin_lock_irqsave(&memcg->move_lock, *flags);\n"
- "\n"
- "This patch add a nesting functionality with per-thread counter.\n"
- "\n"
- "Signed-off-by: KAMEZAWA Hiroyuki <kamezawa.hiroyu-+CUm20s59erQFUHtdCDX3A@public.gmane.org>\n"
- "---\n"
- " include/linux/sched.h |    1 +\n"
- " mm/memcontrol.c       |   22 +++++++++++++++++++++-\n"
- " 2 files changed, 22 insertions(+), 1 deletions(-)\n"
- "\n"
- "diff --git a/include/linux/sched.h b/include/linux/sched.h\n"
- "index 84ceef5..cca3229 100644\n"
- "--- a/include/linux/sched.h\n"
- "+++ b/include/linux/sched.h\n"
- "@@ -1402,6 +1402,7 @@ struct task_struct {\n"
- " \t\tunsigned long memsw_nr_pages; /* uncharged mem+swap usage */\n"
- " \t} memcg_batch;\n"
- " \tunsigned int memcg_kmem_skip_account;\n"
- "+\tunsigned int memcg_page_stat_accounting;\n"
- " #endif\n"
- " #ifdef CONFIG_HAVE_HW_BREAKPOINT\n"
- " \tatomic_t ptrace_bp_refcnt;\n"
- "diff --git a/mm/memcontrol.c b/mm/memcontrol.c\n"
- "index 357371a..152f8df 100644\n"
- "--- a/mm/memcontrol.c\n"
- "+++ b/mm/memcontrol.c\n"
- "@@ -2352,12 +2352,30 @@ again:\n"
- " \t */\n"
- " \tif (!mem_cgroup_stolen(memcg))\n"
- " \t\treturn;\n"
- "+\t/*\n"
- "+\t * In some case, we need nested lock of this.\n"
- "+\t * page_remove_rmap\n"
- "+\t *   mem_cgroup_begin_update_page_stat\t\t<<< 1\n"
- "+\t *     set_page_dirty\n"
- "+\t *       __set_page_dirty_buffers\n"
- "+\t *         __set_page_dirty\n"
- "+\t *           mem_cgroup_begin_update_page_stat\t<<< 2\n"
- "+\t *             move_lock_mem_cgroup\n"
- "+\t *               spin_lock_irqsave(&memcg->move_lock, *flags);\n"
- "+\t *\n"
- "+\t * We avoid this deadlock by having per thread counter.\n"
- "+\t */\n"
- "+\tif (current->memcg_page_stat_accounting > 0) {\n"
- "+\t\tcurrent->memcg_page_stat_accounting++;\n"
- "+\t\treturn;\n"
- "+\t}\n"
- " \n"
- " \tmove_lock_mem_cgroup(memcg, flags);\n"
- " \tif (memcg != pc->mem_cgroup || !PageCgroupUsed(pc)) {\n"
- " \t\tmove_unlock_mem_cgroup(memcg, flags);\n"
- " \t\tgoto again;\n"
- " \t}\n"
- "+\tcurrent->memcg_page_stat_accounting = 1;\n"
- " \t*locked = true;\n"
- " }\n"
- " \n"
- "@@ -2370,7 +2388,9 @@ void __mem_cgroup_end_update_page_stat(struct page *page, unsigned long *flags)\n"
- " \t * lock is held because a routine modifies pc->mem_cgroup\n"
- " \t * should take move_lock_mem_cgroup().\n"
- " \t */\n"
- "-\tmove_unlock_mem_cgroup(pc->mem_cgroup, flags);\n"
- "+\tcurrent->memcg_page_stat_accounting--;\n"
- "+\tif (!current->memcg_page_stat_accounting)\n"
- "+\t\tmove_unlock_mem_cgroup(pc->mem_cgroup, flags);\n"
- " }\n"
- " \n"
- " void mem_cgroup_update_page_stat(struct page *page,\n"
- "-- \n"
- 1.7.4.1
+ == this patch is untested. ==
 
-f482815781fc12096c9184ff9c5e5663d8adfbc2400d37635b89fecb8cbfd8ef
+31f53ac70be3ce0f3f291e2a19d15e3957dba457daf796d10ac06eb78c35b7ef

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.