Re: [PATCH v7 1/2] Always free struct memcg through schedule_work()

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On 05/25/2012 01:50 PM, Michal Hocko wrote:
On Fri 25-05-12 13:32:07, Glauber Costa wrote:
Right now we free struct memcg with kfree right after a
rcu grace period, but defer it if we need to use vfree() to get
rid of that memory area. We do that by need, because we need vfree
to be called in a process context.

This patch unifies this behavior, by ensuring that even kfree will
happen in a separate thread. The goal is to have a stable place to
call the upcoming jump label destruction function outside the realm
of the complicated and quite far-reaching cgroup lock (that can't be
held when calling neither the cpu_hotplug.lock nor the jump_label_mutex)

Signed-off-by: Glauber Costa<glommer@xxxxxxxxxxxxx>
Acked-by: Kamezawa Hiroyuki<kamezawa.hiroyu@xxxxxxxxxxxxxx>

Acked-by: Michal Hocko<mhocko@xxxxxxx>

Just one comment below

CC: Tejun Heo<tj@xxxxxxxxxx>
CC: Li Zefan<lizefan@xxxxxxxxxx>
CC: Johannes Weiner<hannes@xxxxxxxxxxx>
CC: Michal Hocko<mhocko@xxxxxxx>
CC: Andrew Morton<akpm@xxxxxxxxxxxxxxxxxxxx>
---
  mm/memcontrol.c |   24 +++++++++++++-----------
  1 files changed, 13 insertions(+), 11 deletions(-)

diff --git a/mm/memcontrol.c b/mm/memcontrol.c
index 932a734..0b4b4c8 100644
--- a/mm/memcontrol.c
+++ b/mm/memcontrol.c
[...]
@@ -4826,23 +4826,28 @@ out_free:
  }

  /*
- * Helpers for freeing a vzalloc()ed mem_cgroup by RCU,
+ * Helpers for freeing a kmalloc()ed/vzalloc()ed mem_cgroup by RCU,
   * but in process context.  The work_freeing structure is overlaid
   * on the rcu_freeing structure, which itself is overlaid on memsw.
   */
-static void vfree_work(struct work_struct *work)
+static void free_work(struct work_struct *work)
  {
  	struct mem_cgroup *memcg;
+	int size = sizeof(struct mem_cgroup);

  	memcg = container_of(work, struct mem_cgroup, work_freeing);
-	vfree(memcg);
+	if (size<  PAGE_SIZE)

What about
	if (is_vmalloc_addr(memcg))
+		kfree(memcg);
+	else
+		vfree(memcg);
  }

Could be, but I believe this one is already in Andrew's tree from last submission (might be wrong)

--
To unsubscribe, send a message with 'unsubscribe linux-mm' in
the body to majordomo@xxxxxxxxx.  For more info on Linux MM,
see: http://www.linux-mm.org/ .
Fight unfair telecom internet charges in Canada: sign http://stopthemeter.ca/
Don't email: <a href=mailto:"dont@xxxxxxxxx";> email@xxxxxxxxx </a>


[Index of Archives]     [Linux ARM Kernel]     [Linux ARM]     [Linux Omap]     [Fedora ARM]     [IETF Annouce]     [Bugtraq]     [Linux]     [Linux OMAP]     [Linux MIPS]     [ECOS]     [Asterisk Internet PBX]     [Linux API]