[PATCH 0/2] memcg: cgroup fix rmdir hang

From: KAMEZAWA Hiroyuki
Date: Tue Jun 23 2009 - 03:09:20 EST

previous discussion was this => http://marc.info/?t=124478543600001&r=1&w=2

This patch tries to fix problem as
- rmdir can sleep very very long if swap entry is shared between multiple

Now, cgroup's rmdir path does following

check there are no tasks and children group.
call pre_destroy()
check css's refcnt
if (refcnt > 0) {
sleep until css's refcnt goes down to 0.
goto again

Unfortunately, memory cgroup does following at charge.

charge(memcg) (increase USAGE)
And this "memcg" is not necessary to include the caller, task.

pre_destroy() tries to reduce memory usage until USAGE goes down to 0.
Then, there is a race that
- css's refcnt > 0 (and memcg's usage > 0)
- rmdir() caller sleeps until css->refcnt goes down 0.
- But to make css->refcnt be 0, pre_destroy() should be called again.

This patch tries to fix this in asyhcnrounos way (i.e. without big lock.)
Any comments are welcome.


To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/