From: "Rafael J. Wysocki" <rjw@sisk.pl>
To: Nigel Cunningham <ncunningham@linuxmail.org>
Cc: Andrew Morton <akpm@osdl.org>,
LKML <linux-kernel@vger.kernel.org>, Pavel Machek <pavel@ucw.cz>
Subject: Re: [PATCH] Freeze bdevs when freezing processes.
Date: Mon, 23 Oct 2006 16:07:16 +0200 [thread overview]
Message-ID: <200610231607.17525.rjw@sisk.pl> (raw)
In-Reply-To: <1161605379.3315.23.camel@nigel.suspend2.net>
On Monday, 23 October 2006 14:09, Nigel Cunningham wrote:
> Hi.
>
> On Mon, 2006-10-23 at 12:36 +0200, Rafael J. Wysocki wrote:
> > On Monday, 23 October 2006 06:12, Nigel Cunningham wrote:
> > > XFS can continue to submit I/O from a timer routine, even after
> > > freezeable kernel and userspace threads are frozen. This doesn't seem to
> > > be an issue for current swsusp code,
> >
> > So it doesn't look like we need the patch _now_.
>
> I'm trying to prepare the patches to make swsusp into suspend2.
Oh, I see. Please don't do that.
> Please assume it's part of a stream of patches that belong together, rather
> than an isolated modification. Yes, I'd really rather just rm -f swap.c
> user.c swsusp.c,
And I'm against that, sorry. Also I don't think you can remove user.c just
like that.
> but I'm trying to do the incremental modification thing for you.
>
> > > but is definitely an issue for Suspend2, where the pages being written could
> > > be overwritten by Suspend2's atomic copy.
> >
> > And IMO that's a good reason why we shouldn't use RCU pages for storing the
> > image. XFS is one known example that breaks things if we do so and
> > there may be more such things that we don't know of. The fact that they
> > haven't appeared in testing so far doesn't mean they don't exist and
> > moreover some things like that may appear in the future.
>
> Ok. We can modify the selection of pages to be overwritten. I agree that
> absence of proof isn't proof of absence, but on the later part, we can't
> rule some modification out now because something in the future might
> break it.
This case is a bit special. I don't think it would be right to require every
device driver writer to avoid modifying RCU pages from the interrupt
context, because that would break the suspend to disk ...
Besides, if there is an RCU page that we _know_ we can use to store the image
in it, we can just include this page in the image without copying. This
already gives us one extra free page for the rest of the image and we can
_avoid_ creating two images which suspend2 does and which adds a _lot_ of
complexity to the code.
> > > We can address this issue by freezing bdevs after stopping userspace
> > > threads, and thawing them prior to thawing userspace.
> >
> > This will only address the issues related to filesystems, but the RCU pages
> > can also be modified from interrupt context by other code, AFAICT.
>
> Agreed. We can find some other way to address that.
I think, to stat with, we should look for pages that we're deadly sure will
_not_ be overwritten from the interrupt context (for example, the pages that
are mapped read-only by the user space look promising). Then, we should
estimate the number of these pages and consider if dealing with them in
a special way is worth the effort.
> > > Signed-off-by: Nigel Cunningham <nigel@suspend2.net>
> > >
> > > diff --git a/kernel/power/process.c b/kernel/power/process.c
> > > index 4a001fe..ddeeb50 100644
> > > --- a/kernel/power/process.c
> > > +++ b/kernel/power/process.c
> > > @@ -13,6 +13,7 @@ #include <linux/interrupt.h>
> > > #include <linux/suspend.h>
> > > #include <linux/module.h>
> > > #include <linux/syscalls.h>
> > > +#include <linux/buffer_head.h>
> > > #include <linux/freezer.h>
> > >
> > > /*
> > > @@ -20,6 +21,58 @@ #include <linux/freezer.h>
> > > */
> > > #define TIMEOUT (20 * HZ)
> > >
> > > +struct frozen_fs
> > > +{
> > > + struct list_head fsb_list;
> > > + struct super_block *sb;
> > > +};
> > > +
> > > +LIST_HEAD(frozen_fs_list);
> > > +
> > > +void freezer_make_fses_rw(void)
> > > +{
> > > + struct frozen_fs *fs, *next_fs;
> > > +
> > > + list_for_each_entry_safe(fs, next_fs, &frozen_fs_list, fsb_list) {
> > > + thaw_bdev(fs->sb->s_bdev, fs->sb);
> > > +
> > > + list_del(&fs->fsb_list);
> > > + kfree(fs);
> > > + }
> > > +}
> > > +
> > > +/*
> > > + * Done after userspace is frozen, so there should be no danger of
> > > + * fses being unmounted while we're in here.
> > > + */
> > > +int freezer_make_fses_ro(void)
> > > +{
> > > + struct frozen_fs *fs;
> > > + struct super_block *sb;
> > > +
> > > + /* Generate the list */
> > > + list_for_each_entry(sb, &super_blocks, s_list) {
> > > + if (!sb->s_root || !sb->s_bdev ||
> > > + (sb->s_frozen == SB_FREEZE_TRANS) ||
> > > + (sb->s_flags & MS_RDONLY))
> > > + continue;
> > > +
> > > + fs = kmalloc(sizeof(struct frozen_fs), GFP_ATOMIC);
> > > + if (!fs)
> > > + return 1;
> >
> > You're still leaking memory here.
>
> Ah. Good point.
>
> > I have a simpler version of this patch without this leak, but we have decided
> > we won't apply it anyway.
>
> We?
Well, Pavel and I have discussed that with the XFS people.
> You do realise that XFS can still be writing data while you're writing
> your snapshot,
According to the XFS people, this can't happen.
Greetings,
Rafael
--
You never change things by fighting the existing reality.
R. Buckminster Fuller
next prev parent reply other threads:[~2006-10-23 14:08 UTC|newest]
Thread overview: 57+ messages / expand[flat|nested] mbox.gz Atom feed top
2006-10-23 4:12 Nigel Cunningham
2006-10-23 10:36 ` Rafael J. Wysocki
2006-10-23 12:09 ` Nigel Cunningham
2006-10-23 14:07 ` Rafael J. Wysocki [this message]
2006-10-23 14:15 ` Nick Piggin
2006-10-23 14:20 ` Rafael J. Wysocki
2006-10-23 23:05 ` Nigel Cunningham
2006-10-23 16:55 ` Andrew Morton
2006-10-23 17:14 ` Pavel Machek
2006-10-23 17:50 ` Andrew Morton
2006-10-23 18:06 ` Pavel Machek
2006-10-23 19:19 ` Rafael J. Wysocki
2006-10-23 22:52 ` Nigel Cunningham
2006-10-24 7:57 ` Rafael J. Wysocki
2006-10-24 8:21 ` Nigel Cunningham
2006-10-23 21:39 ` Matthew Garrett
2006-10-23 22:12 ` Rafael J. Wysocki
2006-10-24 7:58 ` Pavel Machek
2006-10-23 22:58 ` Nigel Cunningham
2006-10-24 8:01 ` Pavel Machek
2006-10-23 23:22 ` Nigel Cunningham
2006-10-24 8:37 ` Rafael J. Wysocki
2006-10-24 14:44 ` David Chinner
2006-10-24 15:29 ` Rafael J. Wysocki
2006-10-24 16:20 ` Oleg Verych
2006-10-24 17:08 ` Christoph Hellwig
2006-10-24 16:33 ` David Chinner
2006-10-24 21:37 ` Pavel Machek
2006-10-25 0:13 ` David Chinner
2006-10-25 8:10 ` Pavel Machek
2006-10-25 8:38 ` David Chinner
2006-10-25 8:47 ` Pavel Machek
2006-10-25 12:32 ` Rafael J. Wysocki
2006-10-25 13:23 ` Nigel Cunningham
2006-10-25 19:05 ` Rafael J. Wysocki
2006-10-26 7:30 ` David Chinner
2006-10-26 8:18 ` Nigel Cunningham
2006-10-26 8:48 ` Rafael J. Wysocki
2006-10-26 8:57 ` David Chinner
2006-10-26 9:11 ` Rafael J. Wysocki
2006-10-27 1:38 ` David Chinner
2006-10-27 14:37 ` Rafael J. Wysocki
2006-10-29 17:35 ` Pavel Machek
2006-10-29 23:29 ` Rafael J. Wysocki
2006-10-29 23:46 ` Nigel Cunningham
2006-10-26 9:18 ` Nigel Cunningham
2006-10-26 9:08 ` Rafael J. Wysocki
2006-10-25 8:12 ` Rafael J. Wysocki
2006-10-24 17:06 ` Christoph Hellwig
2006-10-24 19:09 ` Rafael J. Wysocki
2006-10-24 21:26 ` Pavel Machek
2006-10-24 21:33 ` Christoph Hellwig
2006-10-24 21:43 ` Pavel Machek
2006-10-24 22:19 ` Nigel Cunningham
2006-10-24 20:16 ` Rafael J. Wysocki
2006-10-24 22:17 ` Nigel Cunningham
2006-10-24 20:38 ` Christoph Hellwig
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=200610231607.17525.rjw@sisk.pl \
--to=rjw@sisk.pl \
--cc=akpm@osdl.org \
--cc=linux-kernel@vger.kernel.org \
--cc=ncunningham@linuxmail.org \
--cc=pavel@ucw.cz \
/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
Powered by JetHome