From: Colin Cross <ccross@android.com>
To: Michael Leun <lkml20130126@newton.leun.net>
Cc: lkml <linux-kernel@vger.kernel.org>, Pavel Machek <pavel@ucw.cz>,
"Rafael J. Wysocki" <rjw@sisk.pl>,
Peter Zijlstra <peterz@infradead.org>,
Ingo Molnar <mingo@redhat.com>,
Andrew Morton <akpm@linux-foundation.org>,
Mandeep Singh Baines <msb@chromium.org>,
Oleg Nesterov <oleg@redhat.com>,
linux-nfs <linux-nfs@vger.kernel.org>,
Linux PM list <linux-pm@vger.kernel.org>,
netdev <netdev@vger.kernel.org>,
Linus Torvalds <torvalds@linux-foundation.org>,
Tejun Heo <tj@kernel.org>, Darren Hart <dvhart@linux.intel.com>,
Thomas Gleixner <tglx@linutronix.de>,
Randy Dunlap <rdunlap@infradead.org>,
Al Viro <viro@zeniv.linux.org.uk>
Subject: Re: 3.11-rc regression bisected: s2disk does not work (was Re: [PATCH v3 13/16] futex: use freezable blocking call)
Date: Mon, 22 Jul 2013 16:55:58 -0700 [thread overview]
Message-ID: <CAMbhsRQv+W897_5qGuNJD47jQ9ozN6KxeCa6UJAvZpqVuBpQ4w@mail.gmail.com> (raw)
In-Reply-To: <20130723010250.5a3465ec@xenia.leun.net>
[-- Attachment #1: Type: text/plain, Size: 1497 bytes --]
On Mon, Jul 22, 2013 at 4:02 PM, Michael Leun
<lkml20130126@newton.leun.net> wrote:
> On Mon, 6 May 2013 16:50:18 -0700
> Colin Cross <ccross@android.com> wrote:
>
>> Avoid waking up every thread sleeping in a futex_wait call during
> [...]
>
> With 3.11-rc s2disk from suspend-utils stopped working: Frozen at
> displaying 0% of saving image to disk.
>
> echo "1" >/sys/power/state still works.
>
> Bisecting yielded 88c8004fd3a5fdd2378069de86b90b21110d33a4, reverting
> that from 3.11-rc2 makes s2disk working again.
>
I think the expanded use of the freezable_* helpers is exposing an
existing bug in hibernation. The SNAPSHOT_FREEZE ioctl calls
freeze_processes(), which sets the global system_freezing_cnt and
pm_freezing. try_to_freeze_tasks then sends every process except
current a signal which causes them all to end up in the refrigerator.
The current task then returns back to userspace and continues its work
to suspend to disk. If that task ever hits a call to try_to_freeze()
in the kernel, it will see system_freezing_cnt and pm_freezing=true
and freeze, and suspend to disk will hang forever. It could hit
try_to_freeze() because of a signal delivered to the task, or from
calling any syscall that uses a freezable_* helper like the one I
added to sys_futex.
I think the right solution is to add a flag to the freezing task that
marks it unfreezable. I think PF_NOFREEZE would work, although it is
normally used on kernel threads, can you see if the attached patch
helps?
[-- Attachment #2: 0001-power-set-PF_NOFREEZE-flag-on-SNAPSHOT_FREEZE-task.patch --]
[-- Type: application/octet-stream, Size: 1217 bytes --]
From 0f22f2b357b06208fc7c0b82ce3f0929d00877ca Mon Sep 17 00:00:00 2001
From: Colin Cross <ccross@android.com>
Date: Mon, 22 Jul 2013 16:53:15 -0700
Subject: [PATCH] power: set PF_NOFREEZE flag on SNAPSHOT_FREEZE task
The task that calls the SNAPSHOT_FREEZE ioctl needs to return back
to userspace and continue preparing a suspend-to-disk image. Set
the PF_NOFREEZE flag on it so that it doesn't accidentally freeze
if it comes across a call to try_to_freeze().
Reported-by: Michael Leun <lkml20130126@newton.leun.net>
Signed-off-by: Colin Cross <ccross@android.com>
---
kernel/power/user.c | 2 ++
1 file changed, 2 insertions(+)
diff --git a/kernel/power/user.c b/kernel/power/user.c
index 4ed81e7..17f9c20 100644
--- a/kernel/power/user.c
+++ b/kernel/power/user.c
@@ -219,6 +219,7 @@ static long snapshot_ioctl(struct file *filp, unsigned int cmd,
sys_sync();
printk("done.\n");
+ current->flags |= PF_NOFREEZE;
error = freeze_processes();
if (!error)
data->frozen = 1;
@@ -229,6 +230,7 @@ static long snapshot_ioctl(struct file *filp, unsigned int cmd,
break;
pm_restore_gfp_mask();
thaw_processes();
+ current->flags &= ~PF_NOFREEZE;
data->frozen = 0;
break;
--
1.8.3
next prev parent reply other threads:[~2013-07-22 23:55 UTC|newest]
Thread overview: 42+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-05-06 23:50 [PATCH v2 00/10] optimize freezing tasks by reducing task wakeups Colin Cross
2013-05-06 23:50 ` [PATCH v3 01/16] freezer: add unsafe versions of freezable helpers for NFS Colin Cross
2013-05-06 23:50 ` [PATCH v3 02/16] freezer: add unsafe versions of freezable helpers for CIFS Colin Cross
2013-05-07 10:07 ` Jeff Layton
2013-05-07 17:47 ` Colin Cross
2013-05-07 17:52 ` [PATCH v4 " Colin Cross
2013-05-07 18:11 ` Jeff Layton
2013-05-07 12:28 ` [PATCH v3 " Pavel Machek
2013-05-06 23:50 ` [PATCH v3 03/16] lockdep: remove task argument from debug_check_no_locks_held Colin Cross
2013-05-07 12:28 ` Pavel Machek
2013-05-06 23:50 ` [PATCH v3 04/16] lockdep: check that no locks held at freeze time Colin Cross
2013-05-07 12:29 ` Pavel Machek
2013-05-06 23:50 ` [PATCH v3 05/16] freezer: shorten freezer sleep time using exponential backoff Colin Cross
2013-05-06 23:50 ` [PATCH v3 06/16] freezer: skip waking up tasks with PF_FREEZER_SKIP set Colin Cross
2013-05-06 23:50 ` [PATCH v3 07/16] freezer: convert freezable helpers to freezer_do_not_count() Colin Cross
2013-05-06 23:50 ` [PATCH v3 08/16] freezer: convert freezable helpers to static inline where possible Colin Cross
2013-05-06 23:50 ` [PATCH v3 09/16] freezer: add new freezable helpers using freezer_do_not_count() Colin Cross
2013-05-06 23:50 ` [PATCH v3 10/16] binder: use freezable blocking calls Colin Cross
2013-05-06 23:50 ` [PATCH v3 11/16] epoll: use freezable blocking call Colin Cross
2013-05-06 23:50 ` [PATCH v3 12/16] select: " Colin Cross
2013-05-06 23:50 ` [PATCH v3 13/16] futex: " Colin Cross
2013-07-22 23:02 ` 3.11-rc regression bisected: s2disk does not work (was Re: [PATCH v3 13/16] futex: use freezable blocking call) Michael Leun
2013-07-22 23:55 ` Colin Cross [this message]
2013-07-23 0:32 ` Linus Torvalds
2013-07-23 0:42 ` Colin Cross
2013-07-23 1:41 ` Rafael J. Wysocki
2013-07-23 6:28 ` Colin Cross
2013-07-23 20:31 ` Colin Cross
2013-07-23 21:58 ` Michael Leun
2013-07-23 18:08 ` Michael Leun
2013-07-23 18:24 ` Darren Hart
2013-07-23 18:29 ` Colin Cross
2013-07-23 19:16 ` Michael Leun
2013-07-23 19:29 ` Colin Cross
2013-07-23 19:58 ` Michael Leun
2013-07-23 21:43 ` Rafael J. Wysocki
2013-07-23 0:26 ` Pavel Machek
2013-05-06 23:50 ` [PATCH v3 14/16] nanosleep: use freezable blocking call Colin Cross
2013-05-06 23:50 ` [PATCH v3 15/16] sigtimedwait: " Colin Cross
2013-05-06 23:50 ` [PATCH v3 16/16] af_unix: use freezable blocking calls in read Colin Cross
2013-05-07 18:12 ` [PATCH v2 00/10] optimize freezing tasks by reducing task wakeups Tejun Heo
2013-05-08 0:02 ` Rafael J. Wysocki
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=CAMbhsRQv+W897_5qGuNJD47jQ9ozN6KxeCa6UJAvZpqVuBpQ4w@mail.gmail.com \
--to=ccross@android.com \
--cc=akpm@linux-foundation.org \
--cc=dvhart@linux.intel.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-nfs@vger.kernel.org \
--cc=linux-pm@vger.kernel.org \
--cc=lkml20130126@newton.leun.net \
--cc=mingo@redhat.com \
--cc=msb@chromium.org \
--cc=netdev@vger.kernel.org \
--cc=oleg@redhat.com \
--cc=pavel@ucw.cz \
--cc=peterz@infradead.org \
--cc=rdunlap@infradead.org \
--cc=rjw@sisk.pl \
--cc=tglx@linutronix.de \
--cc=tj@kernel.org \
--cc=torvalds@linux-foundation.org \
--cc=viro@zeniv.linux.org.uk \
/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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).