From: Tomasz Buchert <tomasz.buchert-MZpvjPyXg2s@public.gmane.org>
To: Michal Hocko <mhocko-AlSwsSmVLrQ@public.gmane.org>
Cc: Tejun Heo <htejun-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>,
containers-cunTk1MwBs9QetFLy7KEm3xJsTq8ys+cHZ5vskTnxNA@public.gmane.org,
linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org,
cgroups-u79uwXL29TY76Z2rM5mHXA@public.gmane.org,
Andrew Morton
<akpm-de/tnXTf+JLsfHDXvbKv3WD2FQJk+8+b@public.gmane.org>,
Paul Menage <paul-inf54ven1CmVyaH7bEyXVA@public.gmane.org>
Subject: Re: [PATCH] cgroup_freezer: fix freezing groups with stopped tasks
Date: Thu, 17 Nov 2011 11:14:53 +0100 [thread overview]
Message-ID: <4EC4DE9D.3040703@inria.fr> (raw)
In-Reply-To: <1321480234-29241-1-git-send-email-mhocko-AlSwsSmVLrQ@public.gmane.org>
Hi,
I'm trying to understand now why I did that change in
2d3cbf8bc (the bug itself was in the if-the-else clause in
update_if_frozen , anyway).
Well, when I look at this now I think that there is nothing wrong with
your patch.
You can try my testcases from 2d3cbf8bc and 0bdba580, but it should be ok.
One thing I am not sure completely of is the following situation. So the
group is frozen
with the STOPPED task inside. There are few questions:
* if you send SIGCONT to the task now, will it wake up?
* if yes - will it get *immediately* frozen?
I im going to check it myself, but maybe you can answer faster :).
Tomek
Le 16/11/2011 22:50, Michal Hocko a écrit :
> 2d3cbf8b (cgroup_freezer: update_freezer_state() does incorrect state
> transitions) removed is_task_frozen_enough and replaced it with a simple
> frozen call. This, however, breaks freezing for a group with stopped tasks
> because those cannot be frozen and so the group remains in CGROUP_FREEZING
> state (update_if_frozen doesn't count stopped tasks) and never reaches
> CGROUP_FROZEN.
>
> Let's add is_task_frozen_enough back and use it at the original locations
> (update_if_frozen and try_to_freeze_cgroup). Semantically we consider
> stopped tasks as frozen enough so we should consider both cases when
> testing frozen tasks.
>
> Testcase:
> mkdir /dev/freezer
> mount -t cgroup -o freezer none /dev/freezer
> mkdir /dev/freezer/foo
> sleep 1h&
> pid=$!
> kill -STOP $pid
> echo $pid> /dev/freezer/foo/tasks
> echo FROZEN> /dev/freezer/foo/freezer.state
> while true
> do
> cat /dev/freezer/foo/freezer.state
> [ "`cat /dev/freezer/foo/freezer.state`" = "FROZEN" ]&& break
> sleep 1
> done
> echo OK
>
> Signed-off-by: Michal Hocko<mhocko-AlSwsSmVLrQ@public.gmane.org>
> Cc: Tomasz Buchert<tomasz.buchert-MZpvjPyXg2s@public.gmane.org>
> Cc: Paul Menage<paul-inf54ven1CmVyaH7bEyXVA@public.gmane.org>
> Cc: Li Zefan<lizf-BthXqXjhjHXQFUHtdCDX3A@public.gmane.org>
> Cc: Andrew Morton<akpm-de/tnXTf+JLsfHDXvbKv3WD2FQJk+8+b@public.gmane.org>
> Cc: Tejun Heo<htejun-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
> ---
> kernel/cgroup_freezer.c | 11 +++++++++--
> 1 files changed, 9 insertions(+), 2 deletions(-)
>
> diff --git a/kernel/cgroup_freezer.c b/kernel/cgroup_freezer.c
> index 5e828a2..4d073dc 100644
> --- a/kernel/cgroup_freezer.c
> +++ b/kernel/cgroup_freezer.c
> @@ -153,6 +153,13 @@ static void freezer_destroy(struct cgroup_subsys *ss,
> kfree(cgroup_freezer(cgroup));
> }
>
> +/* Task is frozen or will freeze immediately when next it gets woken */
> +static bool is_task_frozen_enough(struct task_struct *task)
> +{
> + return frozen(task) ||
> + (task_is_stopped_or_traced(task)&& freezing(task));
> +}
> +
> /*
> * The call to cgroup_lock() in the freezer.state write method prevents
> * a write to that file racing against an attach, and hence the
> @@ -231,7 +238,7 @@ static void update_if_frozen(struct cgroup *cgroup,
> cgroup_iter_start(cgroup,&it);
> while ((task = cgroup_iter_next(cgroup,&it))) {
> ntotal++;
> - if (frozen(task))
> + if (is_task_frozen_enough(task))
> nfrozen++;
> }
>
> @@ -284,7 +291,7 @@ static int try_to_freeze_cgroup(struct cgroup *cgroup, struct freezer *freezer)
> while ((task = cgroup_iter_next(cgroup,&it))) {
> if (!freeze_task(task, true))
> continue;
> - if (frozen(task))
> + if (is_task_frozen_enough(task))
> continue;
> if (!freezing(task)&& !freezer_should_skip(task))
> num_cant_freeze_now++;
next prev parent reply other threads:[~2011-11-17 10:14 UTC|newest]
Thread overview: 42+ messages / expand[flat|nested] mbox.gz Atom feed top
2011-11-16 21:50 [PATCH] cgroup_freezer: fix freezing groups with stopped tasks Michal Hocko
2011-11-16 21:50 ` Michal Hocko
[not found] ` <1321480234-29241-1-git-send-email-mhocko-AlSwsSmVLrQ@public.gmane.org>
2011-11-17 10:14 ` Tomasz Buchert [this message]
[not found] ` <4EC4DE9D.3040703-MZpvjPyXg2s@public.gmane.org>
2011-11-17 16:13 ` Michal Hocko
2011-11-17 16:13 ` Michal Hocko
[not found] ` <20111117161318.GA1233-VqjxzfR4DlwKmadIfiO5sKVXKuFTiq87@public.gmane.org>
2011-11-17 17:03 ` Tomasz Buchert
2011-11-17 17:03 ` Tomasz Buchert
2011-11-17 17:03 ` Tomasz Buchert
2011-11-17 16:13 ` Michal Hocko
2011-11-21 13:40 ` Michal Hocko
2011-11-21 13:40 ` Michal Hocko
2011-11-21 13:40 ` Michal Hocko
2011-11-21 23:07 ` Tejun Heo
2011-11-21 23:07 ` Tejun Heo
[not found] ` <20111121230709.GR25776-hpIqsD4AKlfQT0dZR+AlfA@public.gmane.org>
2011-11-22 2:20 ` Li Zefan
2011-11-22 2:20 ` Li Zefan
[not found] ` <4ECB06D2.6060106-BthXqXjhjHXQFUHtdCDX3A@public.gmane.org>
2011-11-22 2:21 ` Tejun Heo
2011-11-22 2:21 ` Tejun Heo
[not found] ` <20111122022118.GT25776-hpIqsD4AKlfQT0dZR+AlfA@public.gmane.org>
2011-11-22 9:05 ` Michal Hocko
2011-11-22 9:05 ` Michal Hocko
[not found] ` <20111122090522.GA26768-VqjxzfR4DlwKmadIfiO5sKVXKuFTiq87@public.gmane.org>
2011-11-22 15:39 ` Tejun Heo
2011-11-22 15:39 ` Tejun Heo
[not found] ` <20111122153948.GE322-hpIqsD4AKlfQT0dZR+AlfA@public.gmane.org>
2011-11-22 15:48 ` Tejun Heo
2011-11-22 15:48 ` Tejun Heo
2011-11-22 15:48 ` Tejun Heo
[not found] ` <20111122154748.GF322-hpIqsD4AKlfQT0dZR+AlfA@public.gmane.org>
2011-11-23 2:00 ` Li Zefan
2011-11-23 2:00 ` Li Zefan
2011-11-24 10:04 ` Michal Hocko
2011-11-24 10:04 ` Michal Hocko
[not found] ` <20111124100454.GE26036-VqjxzfR4DlwKmadIfiO5sKVXKuFTiq87@public.gmane.org>
2011-11-24 20:00 ` Tejun Heo
2011-11-24 20:00 ` Tejun Heo
[not found] ` <20111124200009.GB6735-hpIqsD4AKlfQT0dZR+AlfA@public.gmane.org>
2011-11-24 21:52 ` Michal Hocko
2011-11-24 21:52 ` Michal Hocko
2011-11-24 21:52 ` Michal Hocko
2011-11-24 20:00 ` Tejun Heo
2011-11-24 10:04 ` Michal Hocko
2011-11-22 15:56 ` Michal Hocko
2011-11-22 15:56 ` Michal Hocko
2011-11-22 15:56 ` Michal Hocko
2011-11-22 15:39 ` Tejun Heo
2011-11-21 23:07 ` Tejun Heo
-- strict thread matches above, loose matches on Subject: below --
2011-11-16 21:50 Michal Hocko
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=4EC4DE9D.3040703@inria.fr \
--to=tomasz.buchert-mzpvjpyxg2s@public.gmane.org \
--cc=akpm-de/tnXTf+JLsfHDXvbKv3WD2FQJk+8+b@public.gmane.org \
--cc=cgroups-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
--cc=containers-cunTk1MwBs9QetFLy7KEm3xJsTq8ys+cHZ5vskTnxNA@public.gmane.org \
--cc=htejun-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org \
--cc=linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
--cc=mhocko-AlSwsSmVLrQ@public.gmane.org \
--cc=paul-inf54ven1CmVyaH7bEyXVA@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.