From: "Kirill A. Shutemov" <kirill@shutemov.name>
To: Frederic Weisbecker <fweisbec@gmail.com>
Cc: Andrew Morton <akpm@linux-foundation.org>,
LKML <linux-kernel@vger.kernel.org>,
Paul Menage <paul@paulmenage.org>, Li Zefan <lizf@cn.fujitsu.com>,
Johannes Weiner <hannes@cmpxchg.org>,
Aditya Kali <adityakali@google.com>,
Oleg Nesterov <oleg@redhat.com>,
Kay Sievers <kay.sievers@vrfy.org>,
Tim Hockin <thockin@hockin.org>, Tejun Heo <tj@kernel.org>,
Containers <containers@lists.linux-foundation.org>
Subject: Re: [PATCH 04/10] cgroups: New cancel_attach_task subsystem callback
Date: Tue, 4 Oct 2011 03:27:24 +0300 [thread overview]
Message-ID: <20111004002724.GD6727@shutemov.name> (raw)
In-Reply-To: <1317668832-10784-5-git-send-email-fweisbec@gmail.com>
On Mon, Oct 03, 2011 at 09:07:06PM +0200, Frederic Weisbecker wrote:
> To cancel a process attachment on a subsystem, we only call the
> cancel_attach() callback once on the leader but we have no
> way to cancel the attachment individually for each member of
> the process group.
>
> This is going to be needed for the max number of tasks susbystem
> that is coming.
>
> To prepare for this integration, call a new cancel_attach_task()
> callback on each task of the group until we reach the member that
> failed to attach.
>
> Signed-off-by: Frederic Weisbecker <fweisbec@gmail.com>
> Acked-by: Paul Menage <paul@paulmenage.org>
Acked-by: Kirill A. Shutemov <kirill@shutemov.name>
> Cc: Li Zefan <lizf@cn.fujitsu.com>
> Cc: Johannes Weiner <hannes@cmpxchg.org>
> Cc: Aditya Kali <adityakali@google.com>
> Cc: Oleg Nesterov <oleg@redhat.com>
> Cc: Andrew Morton <akpm@linux-foundation.org>
> Cc: Kay Sievers <kay.sievers@vrfy.org>
> Cc: Tim Hockin <thockin@hockin.org>
> Cc: Tejun Heo <tj@kernel.org>
> Cc: Kirill A. Shutemov <kirill@shutemov.name>
> Cc: Containers <containers@lists.linux-foundation.org>
> ---
> Documentation/cgroups/cgroups.txt | 7 +++++++
> include/linux/cgroup.h | 2 ++
> kernel/cgroup.c | 24 ++++++++++++++++++++----
> 3 files changed, 29 insertions(+), 4 deletions(-)
>
> diff --git a/Documentation/cgroups/cgroups.txt b/Documentation/cgroups/cgroups.txt
> index 0621e93..3bc1dc9 100644
> --- a/Documentation/cgroups/cgroups.txt
> +++ b/Documentation/cgroups/cgroups.txt
> @@ -623,6 +623,13 @@ function, so that the subsystem can implement a rollback. If not, not necessary.
> This will be called only about subsystems whose can_attach() operation have
> succeeded.
>
> +void cancel_attach_task(struct cgroup *cgrp, struct task_struct *tsk)
> +(cgroup_mutex held by caller)
> +
> +As cancel_attach, but for operations that must be cancelled once per
> +task that wanted to be attached. This typically revert the effect of
> +can_attach_task().
> +
> void pre_attach(struct cgroup *cgrp);
> (cgroup_mutex held by caller)
>
> diff --git a/include/linux/cgroup.h b/include/linux/cgroup.h
> index ed34eb8..b62cf5e 100644
> --- a/include/linux/cgroup.h
> +++ b/include/linux/cgroup.h
> @@ -472,6 +472,8 @@ struct cgroup_subsys {
> struct task_struct *tsk);
> void (*cancel_attach)(struct cgroup_subsys *ss, struct cgroup *cgrp,
> struct task_struct *tsk);
> + void (*cancel_attach_task)(struct cgroup *cgrp,
> + struct task_struct *tsk);
> void (*pre_attach)(struct cgroup *cgrp);
> void (*attach_task)(struct cgroup *cgrp, struct cgroup *old_cgrp,
> struct task_struct *tsk);
> diff --git a/kernel/cgroup.c b/kernel/cgroup.c
> index fafebdb..709baef 100644
> --- a/kernel/cgroup.c
> +++ b/kernel/cgroup.c
> @@ -1883,6 +1883,9 @@ out:
> * remaining subsystems.
> */
> break;
> +
> + if (ss->cancel_attach_task)
> + ss->cancel_attach_task(cgrp, tsk);
> if (ss->cancel_attach)
> ss->cancel_attach(ss, cgrp, tsk);
> }
> @@ -1992,7 +1995,7 @@ int cgroup_attach_proc(struct cgroup *cgrp, struct task_struct *leader)
> {
> int retval, i, group_size;
> struct cgroup_subsys *ss, *failed_ss = NULL;
> - bool cancel_failed_ss = false;
> + struct task_struct *failed_task = NULL;
> /* guaranteed to be initialized later, but the compiler needs this */
> struct cgroup *oldcgrp = NULL;
> struct css_set *oldcg;
> @@ -2081,7 +2084,7 @@ int cgroup_attach_proc(struct cgroup *cgrp, struct task_struct *leader)
> oldcgrp, tsk);
> if (retval) {
> failed_ss = ss;
> - cancel_failed_ss = true;
> + failed_task = tsk;
> goto out_cancel_attach;
> }
> }
> @@ -2146,8 +2149,11 @@ int cgroup_attach_proc(struct cgroup *cgrp, struct task_struct *leader)
> if (ss->attach_task)
> ss->attach_task(cgrp, oldcgrp, tsk);
> }
> + } else if (retval == -ESRCH) {
> + if (ss->cancel_attach_task)
> + ss->cancel_attach_task(cgrp, tsk);
> } else {
> - BUG_ON(retval != -ESRCH);
> + BUG_ON(1);
> }
> }
> /* nothing is sensitive to fork() after this point. */
> @@ -2179,8 +2185,18 @@ out_cancel_attach:
> /* same deal as in cgroup_attach_task */
> if (retval) {
> for_each_subsys(root, ss) {
> + if (ss->cancel_attach_task && (ss != failed_ss ||
> + failed_task)) {
> + for (i = 0; i < group_size; i++) {
> + tsk = flex_array_get_ptr(group, i);
> + if (tsk == failed_task)
> + break;
> + ss->cancel_attach_task(cgrp, tsk);
> + }
> + }
> +
> if (ss == failed_ss) {
> - if (cancel_failed_ss && ss->cancel_attach)
> + if (failed_task && ss->cancel_attach)
> ss->cancel_attach(ss, cgrp, leader);
> break;
> }
> --
> 1.7.5.4
>
--
Kirill A. Shutemov
next prev parent reply other threads:[~2011-10-04 0:27 UTC|newest]
Thread overview: 61+ messages / expand[flat|nested] mbox.gz Atom feed top
2011-10-03 19:07 [PATCH 00/10] cgroups: Task counter subsystem v6 Frederic Weisbecker
2011-10-03 19:07 ` [PATCH 01/10] cgroups: Add res_counter_write_u64() API Frederic Weisbecker
2011-10-04 0:17 ` Kirill A. Shutemov
2011-10-11 13:44 ` Frederic Weisbecker
2011-10-03 19:07 ` [PATCH 02/10] cgroups: New resource counter inheritance API Frederic Weisbecker
2011-10-04 0:20 ` Kirill A. Shutemov
2011-10-03 19:07 ` [PATCH 03/10] cgroups: Add previous cgroup in can_attach_task/attach_task callbacks Frederic Weisbecker
2011-10-04 0:22 ` Kirill A. Shutemov
2011-10-03 19:07 ` [PATCH 04/10] cgroups: New cancel_attach_task subsystem callback Frederic Weisbecker
2011-10-04 0:27 ` Kirill A. Shutemov [this message]
2011-10-03 19:07 ` [PATCH 05/10] cgroups: Ability to stop res charge propagation on bounded ancestor Frederic Weisbecker
2011-10-04 0:41 ` Kirill A. Shutemov
2011-10-03 19:07 ` [PATCH 06/10] cgroups: Add res counter common ancestor searching Frederic Weisbecker
2011-10-03 19:07 ` [PATCH 07/10] res_counter: Allow charge failure pointer to be null Frederic Weisbecker
2011-10-04 1:30 ` Kirill A. Shutemov
2011-10-03 19:07 ` [PATCH 08/10] cgroups: Pull up res counter charge failure interpretation to caller Frederic Weisbecker
2011-10-04 1:32 ` Kirill A. Shutemov
2011-10-03 19:07 ` [PATCH 09/10] cgroups: Allow subsystems to cancel a fork Frederic Weisbecker
2011-10-04 1:38 ` Kirill A. Shutemov
2011-10-03 19:07 ` [PATCH 10/10] cgroups: Add a task counter subsystem Frederic Weisbecker
2011-10-06 9:23 ` Kirill A. Shutemov
2011-10-11 13:41 ` Frederic Weisbecker
2011-10-04 22:01 ` [PATCH 00/10] cgroups: Task counter subsystem v6 Andrew Morton
2011-10-11 13:40 ` Frederic Weisbecker
2011-10-25 20:06 ` Tim Hockin
[not found] ` <CAAAKZwu67VMiZgdpp=i5p7zyGbOHGHXwF_iprufGPzTLkkUF2A-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2011-10-28 23:30 ` Andrew Morton
2011-10-28 23:30 ` Andrew Morton
[not found] ` <20111028163021.1ce61f8a.akpm-de/tnXTf+JLsfHDXvbKv3WD2FQJk+8+b@public.gmane.org>
2011-10-29 9:38 ` Glauber Costa
2011-10-29 9:38 ` Glauber Costa
[not found] ` <CAA6-i6o0SPfZJDx4SRR1hY-He0L6zHuv0saH6EaE7Mrc2HF6PA-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2011-11-03 16:49 ` Frederic Weisbecker
2011-11-03 16:49 ` Frederic Weisbecker
[not found] ` <20111103164917.GF8198-oHC15RC7JGTpAmv0O++HtFaTQe2KTcn/@public.gmane.org>
2011-11-03 16:58 ` Glauber Costa
2011-11-03 16:58 ` Glauber Costa
[not found] ` <4EB2C852.6020706-bzQdu9zFT3WakBO8gow8eQ@public.gmane.org>
2011-11-03 17:02 ` Paul Menage
2011-11-03 17:02 ` Paul Menage
[not found] ` <CALdu-PDY8zpXYM3V9KRk4f2NyGevfNnuaWVdoT-qzSHOK--K3A-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2011-11-03 17:06 ` Glauber Costa
2011-11-03 17:06 ` Glauber Costa
[not found] ` <4EB2CA03.7030601-bzQdu9zFT3WakBO8gow8eQ@public.gmane.org>
2011-11-03 17:28 ` Paul Menage
2011-11-03 17:28 ` Paul Menage
[not found] ` <CALdu-PA2CDoeUMoNd1y44p_QzphX8J4s6NDcSyVC-rP1HGYwkA-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2011-11-03 17:35 ` Glauber Costa
2011-11-03 17:35 ` Glauber Costa
[not found] ` <4EB2D0F2.40309-bzQdu9zFT3WakBO8gow8eQ@public.gmane.org>
2011-11-03 17:56 ` Paul Menage
2011-11-03 17:56 ` Paul Menage
2011-11-04 13:17 ` Glauber Costa
[not found] ` <CALdu-PDbJ69FayXSd-kjAMX8AKEroZytPapxsUn8GFsz-z1omQ-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2011-11-04 13:17 ` Glauber Costa
2011-11-03 17:00 ` Frederic Weisbecker
2011-11-03 17:00 ` Frederic Weisbecker
[not found] ` <20111103170038.GG8198-oHC15RC7JGTpAmv0O++HtFaTQe2KTcn/@public.gmane.org>
2011-11-04 2:57 ` Li Zefan
2011-11-04 2:57 ` Li Zefan
[not found] ` <4EB3549D.5090404-BthXqXjhjHXQFUHtdCDX3A@public.gmane.org>
2011-11-04 12:37 ` Frederic Weisbecker
2011-11-04 12:37 ` Frederic Weisbecker
2011-10-06 6:51 ` Li Zefan
2011-10-11 13:41 ` Frederic Weisbecker
[not found] ` <1317668832-10784-1-git-send-email-fweisbec-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
2011-12-13 15:58 ` Tejun Heo
2011-12-13 15:58 ` Tejun Heo
[not found] ` <20111213155848.GI25802-hpIqsD4AKlfQT0dZR+AlfA@public.gmane.org>
2011-12-13 19:06 ` Frederic Weisbecker
2011-12-13 19:06 ` Frederic Weisbecker
[not found] ` <20111213190642.GB2421-oHC15RC7JGTpAmv0O++HtFaTQe2KTcn/@public.gmane.org>
2011-12-13 20:49 ` Tejun Heo
2011-12-13 20:49 ` Tejun Heo
[not found] ` <20111213204918.GK25802-hpIqsD4AKlfQT0dZR+AlfA@public.gmane.org>
2011-12-14 15:07 ` Frederic Weisbecker
2011-12-14 15:07 ` Frederic Weisbecker
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=20111004002724.GD6727@shutemov.name \
--to=kirill@shutemov.name \
--cc=adityakali@google.com \
--cc=akpm@linux-foundation.org \
--cc=containers@lists.linux-foundation.org \
--cc=fweisbec@gmail.com \
--cc=hannes@cmpxchg.org \
--cc=kay.sievers@vrfy.org \
--cc=linux-kernel@vger.kernel.org \
--cc=lizf@cn.fujitsu.com \
--cc=oleg@redhat.com \
--cc=paul@paulmenage.org \
--cc=thockin@hockin.org \
--cc=tj@kernel.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.