From: Kamezawa Hiroyuki <kamezawa.hiroyu-+CUm20s59erQFUHtdCDX3A@public.gmane.org>
To: Tejun Heo <tj-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org>
Cc: linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org,
mhocko-AlSwsSmVLrQ@public.gmane.org,
hannes-druUgvl0LCNAfugRpC6u6w@public.gmane.org,
cgroups-u79uwXL29TY76Z2rM5mHXA@public.gmane.org,
containers-cunTk1MwBs9QetFLy7KEm3xJsTq8ys+cHZ5vskTnxNA@public.gmane.org
Subject: Re: [PATCH 4/8] cgroup: deactivate CSS's and mark cgroup dead before invoking ->pre_destroy()
Date: Fri, 02 Nov 2012 19:05:04 +0900 [thread overview]
Message-ID: <50939AD0.4040507@jp.fujitsu.com> (raw)
In-Reply-To: <1351712650-23709-5-git-send-email-tj-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org>
(2012/11/01 4:44), Tejun Heo wrote:
> Because ->pre_destroy() could fail and can't be called under
> cgroup_mutex, cgroup destruction did something very ugly.
>
> 1. Grab cgroup_mutex and verify it can be destroyed; fail otherwise.
>
> 2. Release cgroup_mutex and call ->pre_destroy().
>
> 3. Re-grab cgroup_mutex and verify it can still be destroyed; fail
> otherwise.
>
> 4. Continue destroying.
>
> In addition to being ugly, it has been always broken in various ways.
> For example, memcg ->pre_destroy() expects the cgroup to be inactive
> after it's done but tasks can be attached and detached between #2 and
> #3 and the conditions that memcg verified in ->pre_destroy() might no
> longer hold by the time control reaches #3.
>
> Now that ->pre_destroy() is no longer allowed to fail. We can switch
> to the following.
>
> 1. Grab cgroup_mutex and verify it can be destroyed; fail otherwise.
>
> 2. Deactivate CSS's and mark the cgroup removed thus preventing any
> further operations which can invalidate the verification from #1.
>
> 3. Release cgroup_mutex and call ->pre_destroy().
>
> 4. Re-grab cgroup_mutex and continue destroying.
>
> After this change, controllers can safely assume that ->pre_destroy()
> will only be called only once for a given cgroup and, once
> ->pre_destroy() is called, the cgroup will stay dormant till it's
> destroyed.
>
> This removes the only reason ->pre_destroy() can fail - new task being
> attached or child cgroup being created inbetween. Error out path is
> removed and ->pre_destroy() invocation is open coded in
> cgroup_rmdir().
>
> v2: cgroup_call_pre_destroy() removal moved to this patch per Michal.
> Commit message updated per Glauber.
>
> Signed-off-by: Tejun Heo <tj-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org>
> Reviewed-by: Michal Hocko <mhocko-AlSwsSmVLrQ@public.gmane.org>
> Cc: Glauber Costa <glommer-bzQdu9zFT3WakBO8gow8eQ@public.gmane.org>
Reviewed-by: KAMEZAWA Hiroyuki <kamezawa.hiroyu-+CUm20s59erQFUHtdCDX3A@public.gmane.org>
WARNING: multiple messages have this Message-ID (diff)
From: Kamezawa Hiroyuki <kamezawa.hiroyu@jp.fujitsu.com>
To: Tejun Heo <tj@kernel.org>
Cc: lizefan@huawei.com, hannes@cmpxchg.org, mhocko@suse.cz,
bsingharora@gmail.com, containers@lists.linux-foundation.org,
cgroups@vger.kernel.org, linux-kernel@vger.kernel.org,
Glauber Costa <glommer@parallels.com>
Subject: Re: [PATCH 4/8] cgroup: deactivate CSS's and mark cgroup dead before invoking ->pre_destroy()
Date: Fri, 02 Nov 2012 19:05:04 +0900 [thread overview]
Message-ID: <50939AD0.4040507@jp.fujitsu.com> (raw)
In-Reply-To: <1351712650-23709-5-git-send-email-tj@kernel.org>
(2012/11/01 4:44), Tejun Heo wrote:
> Because ->pre_destroy() could fail and can't be called under
> cgroup_mutex, cgroup destruction did something very ugly.
>
> 1. Grab cgroup_mutex and verify it can be destroyed; fail otherwise.
>
> 2. Release cgroup_mutex and call ->pre_destroy().
>
> 3. Re-grab cgroup_mutex and verify it can still be destroyed; fail
> otherwise.
>
> 4. Continue destroying.
>
> In addition to being ugly, it has been always broken in various ways.
> For example, memcg ->pre_destroy() expects the cgroup to be inactive
> after it's done but tasks can be attached and detached between #2 and
> #3 and the conditions that memcg verified in ->pre_destroy() might no
> longer hold by the time control reaches #3.
>
> Now that ->pre_destroy() is no longer allowed to fail. We can switch
> to the following.
>
> 1. Grab cgroup_mutex and verify it can be destroyed; fail otherwise.
>
> 2. Deactivate CSS's and mark the cgroup removed thus preventing any
> further operations which can invalidate the verification from #1.
>
> 3. Release cgroup_mutex and call ->pre_destroy().
>
> 4. Re-grab cgroup_mutex and continue destroying.
>
> After this change, controllers can safely assume that ->pre_destroy()
> will only be called only once for a given cgroup and, once
> ->pre_destroy() is called, the cgroup will stay dormant till it's
> destroyed.
>
> This removes the only reason ->pre_destroy() can fail - new task being
> attached or child cgroup being created inbetween. Error out path is
> removed and ->pre_destroy() invocation is open coded in
> cgroup_rmdir().
>
> v2: cgroup_call_pre_destroy() removal moved to this patch per Michal.
> Commit message updated per Glauber.
>
> Signed-off-by: Tejun Heo <tj@kernel.org>
> Reviewed-by: Michal Hocko <mhocko@suse.cz>
> Cc: Glauber Costa <glommer@parallels.com>
Reviewed-by: KAMEZAWA Hiroyuki <kamezawa.hiroyu@jp.fujitsu.com>
next prev parent reply other threads:[~2012-11-02 10:05 UTC|newest]
Thread overview: 96+ messages / expand[flat|nested] mbox.gz Atom feed top
2012-10-31 19:44 [PATCHSET RESEND v2] cgroup: simplify cgroup removal path Tejun Heo
2012-10-31 19:44 ` Tejun Heo
[not found] ` <1351712650-23709-1-git-send-email-tj-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org>
2012-10-31 19:44 ` [PATCH 1/8] cgroup: kill cgroup_subsys->__DEPRECATED_clear_css_refs Tejun Heo
2012-10-31 19:44 ` Tejun Heo
[not found] ` <1351712650-23709-2-git-send-email-tj-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org>
2012-10-31 20:08 ` Michal Hocko
2012-10-31 20:08 ` Michal Hocko
[not found] ` <20121031200859.GE1271-2MMpYkNvuYDjFM9bn6wA6Q@public.gmane.org>
2012-10-31 20:11 ` Tejun Heo
2012-10-31 20:11 ` Tejun Heo
[not found] ` <CAOS58YPbYoMJ1+3uRfK_ZERyZoaby=FPW7uTpp8dVOSgYC8Mrw-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2012-10-31 20:14 ` Michal Hocko
2012-10-31 20:14 ` Michal Hocko
[not found] ` <20121031201415.GG1271-2MMpYkNvuYDjFM9bn6wA6Q@public.gmane.org>
2012-10-31 20:24 ` Tejun Heo
2012-10-31 20:24 ` Tejun Heo
[not found] ` <20121031202400.GT2945-Gd/HAXX7CRxy/B6EtB590w@public.gmane.org>
2012-10-31 20:49 ` Michal Hocko
2012-10-31 20:49 ` Michal Hocko
2012-10-31 20:49 ` Michal Hocko
2012-11-02 10:01 ` Kamezawa Hiroyuki
2012-11-02 10:01 ` Kamezawa Hiroyuki
2012-10-31 20:12 ` Michal Hocko
2012-10-31 20:12 ` Michal Hocko
[not found] ` <20121031201227.GF1271-2MMpYkNvuYDjFM9bn6wA6Q@public.gmane.org>
2012-10-31 20:14 ` Tejun Heo
2012-10-31 20:14 ` Tejun Heo
[not found] ` <CAOS58YOHjLyKFeah+h+qOrAWvfi1O5eL7m-AMbqAdcP=EOFb6g-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2012-10-31 21:23 ` Michal Hocko
2012-10-31 21:23 ` Michal Hocko
2012-10-31 20:14 ` Tejun Heo
2012-11-05 5:34 ` Li Zefan
2012-11-05 5:34 ` Li Zefan
2012-11-05 5:34 ` Li Zefan
2012-10-31 19:44 ` [PATCH 2/8] cgroup: kill CSS_REMOVED Tejun Heo
2012-10-31 19:44 ` Tejun Heo
2012-10-31 19:44 ` Tejun Heo
[not found] ` <1351712650-23709-3-git-send-email-tj-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org>
2012-11-02 10:02 ` Kamezawa Hiroyuki
2012-11-02 10:02 ` Kamezawa Hiroyuki
2012-11-02 10:02 ` Kamezawa Hiroyuki
2012-11-05 5:33 ` Li Zefan
2012-11-05 5:33 ` Li Zefan
2012-11-05 5:33 ` Li Zefan
2012-10-31 19:44 ` [PATCH 3/8] cgroup: use cgroup_lock_live_group(parent) in cgroup_create() Tejun Heo
2012-10-31 19:44 ` Tejun Heo
[not found] ` <1351712650-23709-4-git-send-email-tj-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org>
2012-11-02 10:03 ` Kamezawa Hiroyuki
2012-11-02 10:03 ` Kamezawa Hiroyuki
2012-11-05 5:36 ` Li Zefan
2012-11-05 5:36 ` Li Zefan
2012-11-05 5:36 ` Li Zefan
2012-10-31 19:44 ` [PATCH 4/8] cgroup: deactivate CSS's and mark cgroup dead before invoking ->pre_destroy() Tejun Heo
2012-10-31 19:44 ` [PATCH 5/8] cgroup: remove CGRP_WAIT_ON_RMDIR, cgroup_exclude_rmdir() and cgroup_release_and_wakeup_rmdir() Tejun Heo
2012-10-31 19:44 ` Tejun Heo
[not found] ` <1351712650-23709-6-git-send-email-tj-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org>
2012-11-02 10:20 ` Kamezawa Hiroyuki
2012-11-02 10:20 ` Kamezawa Hiroyuki
2012-11-02 10:20 ` Kamezawa Hiroyuki
2012-11-05 5:40 ` Li Zefan
2012-11-05 5:40 ` Li Zefan
2012-11-05 5:40 ` Li Zefan
2012-10-31 19:44 ` [PATCH 6/8] memcg: make mem_cgroup_reparent_charges non failing Tejun Heo
2012-10-31 19:44 ` Tejun Heo
[not found] ` <1351712650-23709-7-git-send-email-tj-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org>
2012-11-02 10:21 ` Kamezawa Hiroyuki
2012-11-02 10:21 ` Kamezawa Hiroyuki
2012-10-31 19:44 ` [PATCH 7/8] hugetlb: do not fail in hugetlb_cgroup_pre_destroy Tejun Heo
2012-10-31 19:44 ` Tejun Heo
[not found] ` <1351712650-23709-8-git-send-email-tj-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org>
2012-11-02 10:23 ` Kamezawa Hiroyuki
2012-11-02 10:23 ` Kamezawa Hiroyuki
2012-11-02 10:23 ` Kamezawa Hiroyuki
2012-10-31 19:44 ` [PATCH 8/8] cgroup: make ->pre_destroy() return void Tejun Heo
2012-11-05 17:30 ` [PATCHSET RESEND v2] cgroup: simplify cgroup removal path Tejun Heo
2012-11-05 17:30 ` Tejun Heo
2012-11-05 17:30 ` Tejun Heo
[not found] ` <20121105173024.GA19354-9pTldWuhBndy/B6EtB590w@public.gmane.org>
2012-11-05 18:39 ` Michal Hocko
2012-11-05 18:39 ` Michal Hocko
2012-10-31 19:44 ` [PATCH 4/8] cgroup: deactivate CSS's and mark cgroup dead before invoking ->pre_destroy() Tejun Heo
[not found] ` <1351712650-23709-5-git-send-email-tj-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org>
2012-10-31 21:23 ` Michal Hocko
2012-10-31 21:23 ` Michal Hocko
[not found] ` <20121031212359.GC5286-2MMpYkNvuYDjFM9bn6wA6Q@public.gmane.org>
2012-10-31 21:27 ` Tejun Heo
2012-10-31 21:27 ` Tejun Heo
[not found] ` <20121031212725.GA2945-Gd/HAXX7CRxy/B6EtB590w@public.gmane.org>
2012-11-01 8:58 ` Michal Hocko
2012-11-01 8:58 ` Michal Hocko
2012-11-02 10:05 ` Kamezawa Hiroyuki [this message]
2012-11-02 10:05 ` Kamezawa Hiroyuki
2012-11-05 5:37 ` Li Zefan
2012-11-05 5:37 ` Li Zefan
2012-10-31 19:44 ` [PATCH 8/8] cgroup: make ->pre_destroy() return void Tejun Heo
[not found] ` <1351712650-23709-9-git-send-email-tj-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org>
2012-10-31 21:23 ` Michal Hocko
2012-10-31 21:23 ` Michal Hocko
2012-11-02 10:24 ` Kamezawa Hiroyuki
2012-11-02 10:24 ` Kamezawa Hiroyuki
2012-11-02 10:24 ` Kamezawa Hiroyuki
2012-11-05 5:41 ` Li Zefan
2012-11-05 5:41 ` Li Zefan
-- strict thread matches above, loose matches on Subject: below --
2012-10-31 18:16 [PATCHSET v2] cgroup: simplify cgroup removal path Tejun Heo
[not found] ` <1351707391-22287-1-git-send-email-tj-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org>
2012-10-31 18:16 ` [PATCH 4/8] cgroup: deactivate CSS's and mark cgroup dead before invoking ->pre_destroy() Tejun Heo
2012-10-31 18:16 ` Tejun Heo
2012-10-31 4:22 [PATCHSET] cgroup: simplify cgroup removal path Tejun Heo
[not found] ` <1351657365-25055-1-git-send-email-tj-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org>
2012-10-31 4:22 ` [PATCH 4/8] cgroup: deactivate CSS's and mark cgroup dead before invoking ->pre_destroy() Tejun Heo
2012-10-31 4:22 ` Tejun Heo
[not found] ` <1351657365-25055-5-git-send-email-tj-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org>
2012-10-31 13:42 ` Glauber Costa
2012-10-31 13:42 ` Glauber Costa
2012-10-31 16:05 ` Michal Hocko
2012-10-31 16:05 ` Michal Hocko
2012-11-02 9:43 ` Kamezawa Hiroyuki
2012-11-02 9:43 ` 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=50939AD0.4040507@jp.fujitsu.com \
--to=kamezawa.hiroyu-+cum20s59erqfuhtdcdx3a@public.gmane.org \
--cc=cgroups-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
--cc=containers-cunTk1MwBs9QetFLy7KEm3xJsTq8ys+cHZ5vskTnxNA@public.gmane.org \
--cc=hannes-druUgvl0LCNAfugRpC6u6w@public.gmane.org \
--cc=linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
--cc=mhocko-AlSwsSmVLrQ@public.gmane.org \
--cc=tj-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.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.