From: Ted Ts'o <tytso@mit.edu>
To: Sebastian Ott <sebott@linux.vnet.ibm.com>
Cc: "linux-ext4@vger.kernel.org development"
<linux-ext4@vger.kernel.org>,
LKML Kernel <linux-kernel@vger.kernel.org>,
pm list <linux-pm@lists.linux-foundation.org>
Subject: Re: Oops while going into hibernate
Date: Thu, 13 Jan 2011 00:56:12 -0500 [thread overview]
Message-ID: <20110113055612.GF13496@thunk.org> (raw)
In-Reply-To: <A01161D0-D08F-4522-A546-90057B2E1F2A@mit.edu>
On Wed, Jan 12, 2011 at 07:44:17PM -0500, Theodore Tso wrote:
>
> You said originally that the oops was happening "while going into
> hibernation right after resuming with...". So that means you did a
> successful suspend/resume, and then the second suspend caused the
> oops? It looks like somehow the pages were left marked as dirty, so
> the writeback daemons attempted writing back a page to an inode
> which was never opened read/write (and in fact as a text page for
> /usr/bin/killall, was mapped read/only). Given that ext4
> initializes jinode only when the file is opened read/write, the fact
> that it is null, and the fact that it makes no sense that a program
> would be modifying /usr/bin/killall as part of a suspend/resume, it
> looks very much like we just unmasked a software suspend bug....
... and I think I've found the problem. In kernel/power/block_io.c,
in the function submit(), we see this:
if (bio_chain == NULL) {
submit_bio(bio_rw, bio);
wait_on_page_locked(page);
if (rw == READ)
bio_set_pages_dirty(bio); <====
bio_put(bio);
So when we read in pages from the software suspend device, we end up
marking the pages as dirty(!). I'm guessing this was caused by a copy
and paste from the only other caller of bio_set_pages_dirty(), which
is the direct I/O code, which needs this when we are writing from a
file into a user-provided buffer. But for restoring from a software
suspend case, this is as far as I can tell wholely inappropriate.
This causes needless writes, which is bad even before ext4 unmasked
the problem. I will send a patch under separate cover; could you give
it a try and see if it fixes your crash?
I will look into bulletproofing ext4 by adding checks for this case
and printing warning messages, but neverthe less, I think the root
cause is actually in the hibernation's bio code.
- Ted
next prev parent reply other threads:[~2011-01-13 5:56 UTC|newest]
Thread overview: 34+ messages / expand[flat|nested] mbox.gz Atom feed top
2011-01-12 13:48 Oops while going into hibernate Sebastian Ott
2011-01-12 16:26 ` Ted Ts'o
2011-01-12 16:56 ` Sebastian Ott
2011-01-12 17:26 ` Ted Ts'o
2011-01-12 17:37 ` Sebastian Ott
2011-01-12 18:49 ` Sebastian Ott
2011-01-13 0:44 ` Theodore Tso
2011-01-13 5:56 ` Ted Ts'o
2011-01-13 5:56 ` Ted Ts'o [this message]
2011-01-13 5:59 ` [PATCH] PM / Hibernate: Don't mark pages dirty when reading pages while thawing Theodore Ts'o
2011-01-13 12:36 ` Sebastian Ott
2011-01-13 12:36 ` Sebastian Ott
2011-01-13 5:59 ` Theodore Ts'o
2011-01-13 11:12 ` Oops while going into hibernate Bojan Smojver
2011-01-13 11:12 ` [linux-pm] " Bojan Smojver
2011-01-13 11:49 ` Sebastian Ott
2011-01-13 11:49 ` [linux-pm] " Sebastian Ott
2011-01-13 11:48 ` Sebastian Ott
2011-01-13 11:48 ` Sebastian Ott
2011-01-13 12:11 ` [linux-pm] " Bojan Smojver
2011-01-13 12:31 ` Sebastian Ott
2011-01-13 12:31 ` Sebastian Ott
2011-01-13 12:11 ` Bojan Smojver
2011-01-13 13:36 ` Heiko Carstens
2011-01-13 18:46 ` Ted Ts'o
2011-01-13 18:46 ` Ted Ts'o
2011-01-13 21:30 ` Bojan Smojver
2011-01-13 21:30 ` [linux-pm] " Bojan Smojver
2011-01-14 9:53 ` Heiko Carstens
2011-01-14 9:53 ` [linux-pm] " Heiko Carstens
2011-01-14 13:14 ` Bojan Smojver
2011-01-14 13:14 ` [linux-pm] " Bojan Smojver
2011-01-13 13:36 ` Heiko Carstens
2011-01-13 0:44 ` Theodore Tso
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=20110113055612.GF13496@thunk.org \
--to=tytso@mit.edu \
--cc=linux-ext4@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-pm@lists.linux-foundation.org \
--cc=sebott@linux.vnet.ibm.com \
/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.