From: Pavel Machek <pavel@ucw.cz>
To: Andrew Morton <akpm@osdl.org>
Cc: Peter Lundkvist <p.lundkvist@telia.com>,
linux-kernel@vger.kernel.org, "Rafael J. Wysocki" <rjw@sisk.pl>
Subject: Re: [PATCH] Page writeback broken after resume: wb_timer lost
Date: Sun, 21 May 2006 00:50:18 +0200 [thread overview]
Message-ID: <20060520225018.GC8490@elf.ucw.cz> (raw)
In-Reply-To: <20060520103728.6f3b3798.akpm@osdl.org>
Hi!
> > I have noticed for some time that nr_dirty never drops but
> > increases except when VM pressure forces it down. This only
> > occurs after a resume, never on a freshly booted system.
> >
> > It seems the wb_timer is lost when the timer function is
> > trying to start a frozen pdflush thread, and this occurs
> > during suspend or resume.
> >
> > I have included a patch which work for me. Don't know if the
> > test also should include a check for freezing to be safe, ie
> > if ( !frozen(..) && !freezing(..) )
Yep, I have seen this too. Sync took *way* too long and I believe I
lost some data because of this problem.
> Maybe the code over in page-writeback.c should just rearm the timee within
> the timer handler rather than waiting for a pdflush thread to do it. I'll
> think about that.
>
> But the main questions is: what on earth is going on here? We've taken a
> kernel thread and we've done a wake_up_process() on it, but because it was
> in a frozen state it just never gets to run, even after the resume.
> Presumably it goes back into interruptible sleep after the resume. We took
> it off the list (in the expectation that it'd run again) so we've lost
> control of it.
I guess you should not try to wake up process while it is frozen. Such
wakeups are likely to get lost. Should we add some BUG_ON() somewhere?
...we have to eat some wakeups, because we fake some.
Or perhaps we should do WARN_ON(frozen(current)) just after schedule()
below?
> Pavel, Rafael: this amounts to a lost wakeup. What's the story?
Pavel
Refrigerator looks like this:
/* Refrigerator is place where frozen processes are stored :-). */
void refrigerator(void)
{
/* Hmm, should we be allowed to suspend when there are
realtime
processes around? */
long save;
save = current->state;
pr_debug("%s entered refrigerator\n", current->comm);
printk("=");
frozen_process(current);
spin_lock_irq(¤t->sighand->siglock);
recalc_sigpending(); /* We sent fake signal, clean it up */
spin_unlock_irq(¤t->sighand->siglock);
while (frozen(current)) {
current->state = TASK_UNINTERRUPTIBLE;
schedule();
}
pr_debug("%s left refrigerator\n", current->comm);
current->state = save;
}
--
(english) http://www.livejournal.com/~pavelmachek
(cesky, pictures) http://atrey.karlin.mff.cuni.cz/~pavel/picture/horses/blog.html
next prev parent reply other threads:[~2006-05-20 22:51 UTC|newest]
Thread overview: 14+ messages / expand[flat|nested] mbox.gz Atom feed top
2006-05-20 13:03 [PATCH] Page writeback broken after resume: wb_timer lost Peter Lundkvist
2006-05-20 17:37 ` Andrew Morton
2006-05-20 22:50 ` Pavel Machek [this message]
2006-05-21 0:12 ` Andrew Morton
2006-05-21 6:52 ` Peter Lundkvist
2006-05-21 10:08 ` Pavel Machek
2006-06-16 21:24 ` Johannes Stezenbach
2006-06-16 23:12 ` Nigel Cunningham
2006-06-19 15:41 ` Mark Lord
2006-06-21 3:38 ` Mark Lord
2006-06-21 3:54 ` Andrew Morton
2006-06-21 4:10 ` Mark Lord
2006-06-21 4:19 ` Andrew Morton
2006-06-22 20:25 ` Mark Lord
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=20060520225018.GC8490@elf.ucw.cz \
--to=pavel@ucw.cz \
--cc=akpm@osdl.org \
--cc=linux-kernel@vger.kernel.org \
--cc=p.lundkvist@telia.com \
--cc=rjw@sisk.pl \
/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.