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 03/10] cgroups: Add previous cgroup in can_attach_task/attach_task callbacks
Date: Tue, 4 Oct 2011 03:22:56 +0300 [thread overview]
Message-ID: <20111004002256.GC6727@shutemov.name> (raw)
In-Reply-To: <1317668832-10784-4-git-send-email-fweisbec@gmail.com>
On Mon, Oct 03, 2011 at 09:07:05PM +0200, Frederic Weisbecker wrote:
> This is to prepare the integration of a new max number of proc
> cgroup subsystem. We'll need to release some resources from the
> previous cgroup.
>
> 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 | 6 ++++--
> block/blk-cgroup.c | 12 ++++++++----
> include/linux/cgroup.h | 6 ++++--
> kernel/cgroup.c | 11 +++++++----
> kernel/cgroup_freezer.c | 3 ++-
> kernel/cpuset.c | 6 ++++--
> kernel/events/core.c | 5 +++--
> kernel/sched.c | 6 ++++--
> 8 files changed, 36 insertions(+), 19 deletions(-)
>
> diff --git a/Documentation/cgroups/cgroups.txt b/Documentation/cgroups/cgroups.txt
> index cd67e90..0621e93 100644
> --- a/Documentation/cgroups/cgroups.txt
> +++ b/Documentation/cgroups/cgroups.txt
> @@ -605,7 +605,8 @@ called on a fork. If this method returns 0 (success) then this should
> remain valid while the caller holds cgroup_mutex and it is ensured that either
> attach() or cancel_attach() will be called in future.
>
> -int can_attach_task(struct cgroup *cgrp, struct task_struct *tsk);
> +int can_attach_task(struct cgroup *cgrp, struct cgroup *old_cgrp,
> + struct task_struct *tsk);
> (cgroup_mutex held by caller)
>
> As can_attach, but for operations that must be run once per task to be
> @@ -635,7 +636,8 @@ void attach(struct cgroup_subsys *ss, struct cgroup *cgrp,
> Called after the task has been attached to the cgroup, to allow any
> post-attachment activity that requires memory allocations or blocking.
>
> -void attach_task(struct cgroup *cgrp, struct task_struct *tsk);
> +void attach_task(struct cgroup *cgrp, struct cgroup *old_cgrp,
> + struct task_struct *tsk);
> (cgroup_mutex held by caller)
>
> As attach, but for operations that must be run once per task to be attached,
> diff --git a/block/blk-cgroup.c b/block/blk-cgroup.c
> index bcaf16e..6eddc5f 100644
> --- a/block/blk-cgroup.c
> +++ b/block/blk-cgroup.c
> @@ -30,8 +30,10 @@ EXPORT_SYMBOL_GPL(blkio_root_cgroup);
>
> static struct cgroup_subsys_state *blkiocg_create(struct cgroup_subsys *,
> struct cgroup *);
> -static int blkiocg_can_attach_task(struct cgroup *, struct task_struct *);
> -static void blkiocg_attach_task(struct cgroup *, struct task_struct *);
> +static int blkiocg_can_attach_task(struct cgroup *, struct cgroup *,
> + struct task_struct *);
> +static void blkiocg_attach_task(struct cgroup *, struct cgroup *,
> + struct task_struct *);
> static void blkiocg_destroy(struct cgroup_subsys *, struct cgroup *);
> static int blkiocg_populate(struct cgroup_subsys *, struct cgroup *);
>
> @@ -1614,7 +1616,8 @@ done:
> * of the main cic data structures. For now we allow a task to change
> * its cgroup only if it's the only owner of its ioc.
> */
> -static int blkiocg_can_attach_task(struct cgroup *cgrp, struct task_struct *tsk)
> +static int blkiocg_can_attach_task(struct cgroup *cgrp, struct cgroup *old_cgrp,
> + struct task_struct *tsk)
> {
> struct io_context *ioc;
> int ret = 0;
> @@ -1629,7 +1632,8 @@ static int blkiocg_can_attach_task(struct cgroup *cgrp, struct task_struct *tsk)
> return ret;
> }
>
> -static void blkiocg_attach_task(struct cgroup *cgrp, struct task_struct *tsk)
> +static void blkiocg_attach_task(struct cgroup *cgrp, struct cgroup *old_cgrp,
> + struct task_struct *tsk)
> {
> struct io_context *ioc;
>
> diff --git a/include/linux/cgroup.h b/include/linux/cgroup.h
> index da7e4bc..ed34eb8 100644
> --- a/include/linux/cgroup.h
> +++ b/include/linux/cgroup.h
> @@ -468,11 +468,13 @@ struct cgroup_subsys {
> void (*destroy)(struct cgroup_subsys *ss, struct cgroup *cgrp);
> int (*can_attach)(struct cgroup_subsys *ss, struct cgroup *cgrp,
> struct task_struct *tsk);
> - int (*can_attach_task)(struct cgroup *cgrp, struct task_struct *tsk);
> + int (*can_attach_task)(struct cgroup *cgrp, struct cgroup *old_cgrp,
> + struct task_struct *tsk);
> void (*cancel_attach)(struct cgroup_subsys *ss, struct cgroup *cgrp,
> struct task_struct *tsk);
> void (*pre_attach)(struct cgroup *cgrp);
> - void (*attach_task)(struct cgroup *cgrp, struct task_struct *tsk);
> + void (*attach_task)(struct cgroup *cgrp, struct cgroup *old_cgrp,
> + struct task_struct *tsk);
> void (*attach)(struct cgroup_subsys *ss, struct cgroup *cgrp,
> struct cgroup *old_cgrp, struct task_struct *tsk);
> void (*fork)(struct cgroup_subsys *ss, struct task_struct *task);
> diff --git a/kernel/cgroup.c b/kernel/cgroup.c
> index 84bdace..fafebdb 100644
> --- a/kernel/cgroup.c
> +++ b/kernel/cgroup.c
> @@ -1844,7 +1844,7 @@ int cgroup_attach_task(struct cgroup *cgrp, struct task_struct *tsk)
> }
> }
> if (ss->can_attach_task) {
> - retval = ss->can_attach_task(cgrp, tsk);
> + retval = ss->can_attach_task(cgrp, oldcgrp, tsk);
> if (retval) {
> failed_ss = ss;
> goto out;
> @@ -1860,7 +1860,7 @@ int cgroup_attach_task(struct cgroup *cgrp, struct task_struct *tsk)
> if (ss->pre_attach)
> ss->pre_attach(cgrp);
> if (ss->attach_task)
> - ss->attach_task(cgrp, tsk);
> + ss->attach_task(cgrp, oldcgrp, tsk);
> if (ss->attach)
> ss->attach(ss, cgrp, oldcgrp, tsk);
> }
> @@ -2075,7 +2075,10 @@ int cgroup_attach_proc(struct cgroup *cgrp, struct task_struct *leader)
> /* run on each task in the threadgroup. */
> for (i = 0; i < group_size; i++) {
> tsk = flex_array_get_ptr(group, i);
> - retval = ss->can_attach_task(cgrp, tsk);
> + oldcgrp = task_cgroup_from_root(tsk, root);
> +
> + retval = ss->can_attach_task(cgrp,
> + oldcgrp, tsk);
> if (retval) {
> failed_ss = ss;
> cancel_failed_ss = true;
> @@ -2141,7 +2144,7 @@ int cgroup_attach_proc(struct cgroup *cgrp, struct task_struct *leader)
> /* attach each task to each subsystem */
> for_each_subsys(root, ss) {
> if (ss->attach_task)
> - ss->attach_task(cgrp, tsk);
> + ss->attach_task(cgrp, oldcgrp, tsk);
> }
> } else {
> BUG_ON(retval != -ESRCH);
> diff --git a/kernel/cgroup_freezer.c b/kernel/cgroup_freezer.c
> index e691818..c1421a1 100644
> --- a/kernel/cgroup_freezer.c
> +++ b/kernel/cgroup_freezer.c
> @@ -175,7 +175,8 @@ static int freezer_can_attach(struct cgroup_subsys *ss,
> return 0;
> }
>
> -static int freezer_can_attach_task(struct cgroup *cgrp, struct task_struct *tsk)
> +static int freezer_can_attach_task(struct cgroup *cgrp, struct cgroup *old_cgrp,
> + struct task_struct *tsk)
> {
> rcu_read_lock();
> if (__cgroup_freezing_or_frozen(tsk)) {
> diff --git a/kernel/cpuset.c b/kernel/cpuset.c
> index 10131fd..427be38 100644
> --- a/kernel/cpuset.c
> +++ b/kernel/cpuset.c
> @@ -1390,7 +1390,8 @@ static int cpuset_can_attach(struct cgroup_subsys *ss, struct cgroup *cont,
> return 0;
> }
>
> -static int cpuset_can_attach_task(struct cgroup *cgrp, struct task_struct *task)
> +static int cpuset_can_attach_task(struct cgroup *cgrp, struct cgroup *old_cgrp,
> + struct task_struct *task)
> {
> return security_task_setscheduler(task);
> }
> @@ -1418,7 +1419,8 @@ static void cpuset_pre_attach(struct cgroup *cont)
> }
>
> /* Per-thread attachment work. */
> -static void cpuset_attach_task(struct cgroup *cont, struct task_struct *tsk)
> +static void cpuset_attach_task(struct cgroup *cont, struct cgroup *old,
> + struct task_struct *tsk)
> {
> int err;
> struct cpuset *cs = cgroup_cs(cont);
> diff --git a/kernel/events/core.c b/kernel/events/core.c
> index b8785e2..509464e 100644
> --- a/kernel/events/core.c
> +++ b/kernel/events/core.c
> @@ -7001,7 +7001,8 @@ static int __perf_cgroup_move(void *info)
> }
>
> static void
> -perf_cgroup_attach_task(struct cgroup *cgrp, struct task_struct *task)
> +perf_cgroup_attach_task(struct cgroup *cgrp, struct cgroup *old_cgrp,
> + struct task_struct *task)
> {
> task_function_call(task, __perf_cgroup_move, task);
> }
> @@ -7017,7 +7018,7 @@ static void perf_cgroup_exit(struct cgroup_subsys *ss, struct cgroup *cgrp,
> if (!(task->flags & PF_EXITING))
> return;
>
> - perf_cgroup_attach_task(cgrp, task);
> + perf_cgroup_attach_task(cgrp, old_cgrp, task);
> }
>
> struct cgroup_subsys perf_subsys = {
> diff --git a/kernel/sched.c b/kernel/sched.c
> index ccacdbd..72ce1b1 100644
> --- a/kernel/sched.c
> +++ b/kernel/sched.c
> @@ -8967,7 +8967,8 @@ cpu_cgroup_destroy(struct cgroup_subsys *ss, struct cgroup *cgrp)
> }
>
> static int
> -cpu_cgroup_can_attach_task(struct cgroup *cgrp, struct task_struct *tsk)
> +cpu_cgroup_can_attach_task(struct cgroup *cgrp, struct cgroup *old_cgrp,
> + struct task_struct *tsk)
> {
> #ifdef CONFIG_RT_GROUP_SCHED
> if (!sched_rt_can_attach(cgroup_tg(cgrp), tsk))
> @@ -8981,7 +8982,8 @@ cpu_cgroup_can_attach_task(struct cgroup *cgrp, struct task_struct *tsk)
> }
>
> static void
> -cpu_cgroup_attach_task(struct cgroup *cgrp, struct task_struct *tsk)
> +cpu_cgroup_attach_task(struct cgroup *cgrp, struct cgroup *old_cgrp,
> + struct task_struct *tsk)
> {
> sched_move_task(tsk);
> }
> --
> 1.7.5.4
>
--
Kirill A. Shutemov
next prev parent reply other threads:[~2011-10-04 0:22 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 [this message]
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
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
2011-11-04 12:37 ` Frederic Weisbecker
[not found] ` <4EB3549D.5090404-BthXqXjhjHXQFUHtdCDX3A@public.gmane.org>
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=20111004002256.GC6727@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.