From: Nigel Cunningham <nigel@suspend2.net>
To: "Rafael J. Wysocki" <rjw@sisk.pl>
Cc: Nick Piggin <nickpiggin@yahoo.com.au>,
LKML <linux-kernel@vger.kernel.org>, Pavel Machek <pavel@ucw.cz>,
Linux PM <linux-pm@osdl.org>
Subject: Re: [RFC][PATCH] swsusp: support creating bigger images
Date: Mon, 1 May 2006 11:49:58 +1000 [thread overview]
Message-ID: <200605011150.04429.nigel@suspend2.net> (raw)
In-Reply-To: <200604301427.22687.rjw@sisk.pl>
[-- Attachment #1.1: Type: text/plain, Size: 5025 bytes --]
Hi.
Sorry for the slow response - I only have internet access at work now. This is
going to be a pattern for the next few weeks - I'm off work next week and.the
week after I'll also be off apart from Monday and Tuesday (those are my last
two days working for Cyclades - I then get my sweetheart and little one back,
and we drive down to Victoria over the rest of the week).
On Sunday 30 April 2006 22:27, Rafael J. Wysocki wrote:
> Hi,
>
> On Wednesday 26 April 2006 02:49, Nigel Cunningham wrote:
> > On Wednesday 26 April 2006 08:43, Rafael J. Wysocki wrote:
> > > On Wednesday 26 April 2006 00:25, Pavel Machek wrote:
> > > > > > It does apply to all of the LRU pages. This is what I've been
> > > > > > doing for years now. The only corner case I've come across is
> > > > > > XFS. It still wants to write data even when there's nothing to do
> > > > > > and it's threads are frozen (IIRC - haven't looked at it for a
> > > > > > while). I got around that by freezing bdevs when freezing
> > > > > > processes.
> > > > >
> > > > > This means if we freeze bdevs, we'll be able to save all of the LRU
> > > > > pages, except for the pages mapped by the current task, without
> > > > > copying. I think we can try to do this, but we'll need a patch to
> > > > > freeze bdevs for this purpose. ;-)
> > > >
> > > > ...adding more dependencies to how vm/blockdevs work. I'd say current
> > > > code is complex enough...
> > >
> > > Well, why don't we see the patch? If it's too complex, we can just
> > > decide not to use it. :-)
> >
> > In Suspend2, I'm still using a different version of process.c to what you
> > guys have. In my version, I thaw kernelspace, then thaw bdevs, then thaw
> > userspace. The version below just thaws bdevs after thawing all
> > processes. I think that might need modification, but thought I'd post
> > this now so you can see how complicated or otherwise it is.
>
> IMHO it doesn't look so scary. :-)
:)
> > diff -ruN linux-2.6.17-rc2/kernel/power/process.c
> > bdev-freeze/kernel/power/process.c ---
> > linux-2.6.17-rc2/kernel/power/process.c 2006-04-19 14:27:36.000000000
> > +1000 +++ bdev-freeze/kernel/power/process.c 2006-04-26
> > 10:44:56.000000000 +1000 @@ -19,6 +19,56 @@
> > */
> > #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);
>
> Shouldn't we check for kmalloc() failures here?
Good point. Just because I've never seen it fail, doesn't mean it can't :)
Before I roll a new version, what did you think splitting the thawing and
thawing bdevs in the middle? I think it's the right thing (TM) to do :>
Nigel
> > + fs->sb = sb;
> > + list_add_tail(&fs->fsb_list, &frozen_fs_list);
> > + };
> > +
> > + /* Do the freezing in reverse order so filesystems dependant
> > + * upon others are frozen in the right order. (Eg loopback
> > + * on ext3). */
> > + list_for_each_entry_reverse(fs, &frozen_fs_list, fsb_list)
> > + freeze_bdev(fs->sb->s_bdev);
> > +
> > + return 0;
> > +}
> > +
> >
> > static inline int freezeable(struct task_struct * p)
> > {
> > @@ -77,6 +127,7 @@
> > printk( "Stopping tasks: " );
> > start_time = jiffies;
> > user_frozen = 0;
> > + bdevs_frozen = 0;
> > do {
> > nr_user = todo = 0;
> > read_lock(&tasklist_lock);
> > @@ -107,6 +158,10 @@
> > start_time = jiffies;
> > }
> > user_frozen = !nr_user;
> > +
> > + if (user_frozen && !bdevs_frozen)
> > + freezer_make_fses_ro();
> > +
> > yield(); /* Yield is okay here */
> > if (todo && time_after(jiffies, start_time + TIMEOUT))
> > break;
> > @@ -156,6 +211,8 @@
> > printk(KERN_INFO " Strange, %s not stopped\n", p->comm );
> > } while_each_thread(g, p);
> >
> > + freezer_make_fses_rw();
> > +
> > read_unlock(&tasklist_lock);
> > schedule();
> > printk( " done\n" );
>
> Greetings,
> Rafael
--
See our web page for Howtos, FAQs, the Wiki and mailing list info.
http://www.suspend2.net IRC: #suspend2 on Freenode
[-- Attachment #1.2: Type: application/pgp-signature, Size: 189 bytes --]
[-- Attachment #2: Type: text/plain, Size: 0 bytes --]
WARNING: multiple messages have this Message-ID (diff)
From: Nigel Cunningham <nigel@suspend2.net>
To: "Rafael J. Wysocki" <rjw@sisk.pl>
Cc: Pavel Machek <pavel@ucw.cz>,
Nick Piggin <nickpiggin@yahoo.com.au>,
Linux PM <linux-pm@osdl.org>, LKML <linux-kernel@vger.kernel.org>
Subject: Re: [RFC][PATCH] swsusp: support creating bigger images
Date: Mon, 1 May 2006 11:49:58 +1000 [thread overview]
Message-ID: <200605011150.04429.nigel@suspend2.net> (raw)
In-Reply-To: <200604301427.22687.rjw@sisk.pl>
[-- Attachment #1: Type: text/plain, Size: 5025 bytes --]
Hi.
Sorry for the slow response - I only have internet access at work now. This is
going to be a pattern for the next few weeks - I'm off work next week and.the
week after I'll also be off apart from Monday and Tuesday (those are my last
two days working for Cyclades - I then get my sweetheart and little one back,
and we drive down to Victoria over the rest of the week).
On Sunday 30 April 2006 22:27, Rafael J. Wysocki wrote:
> Hi,
>
> On Wednesday 26 April 2006 02:49, Nigel Cunningham wrote:
> > On Wednesday 26 April 2006 08:43, Rafael J. Wysocki wrote:
> > > On Wednesday 26 April 2006 00:25, Pavel Machek wrote:
> > > > > > It does apply to all of the LRU pages. This is what I've been
> > > > > > doing for years now. The only corner case I've come across is
> > > > > > XFS. It still wants to write data even when there's nothing to do
> > > > > > and it's threads are frozen (IIRC - haven't looked at it for a
> > > > > > while). I got around that by freezing bdevs when freezing
> > > > > > processes.
> > > > >
> > > > > This means if we freeze bdevs, we'll be able to save all of the LRU
> > > > > pages, except for the pages mapped by the current task, without
> > > > > copying. I think we can try to do this, but we'll need a patch to
> > > > > freeze bdevs for this purpose. ;-)
> > > >
> > > > ...adding more dependencies to how vm/blockdevs work. I'd say current
> > > > code is complex enough...
> > >
> > > Well, why don't we see the patch? If it's too complex, we can just
> > > decide not to use it. :-)
> >
> > In Suspend2, I'm still using a different version of process.c to what you
> > guys have. In my version, I thaw kernelspace, then thaw bdevs, then thaw
> > userspace. The version below just thaws bdevs after thawing all
> > processes. I think that might need modification, but thought I'd post
> > this now so you can see how complicated or otherwise it is.
>
> IMHO it doesn't look so scary. :-)
:)
> > diff -ruN linux-2.6.17-rc2/kernel/power/process.c
> > bdev-freeze/kernel/power/process.c ---
> > linux-2.6.17-rc2/kernel/power/process.c 2006-04-19 14:27:36.000000000
> > +1000 +++ bdev-freeze/kernel/power/process.c 2006-04-26
> > 10:44:56.000000000 +1000 @@ -19,6 +19,56 @@
> > */
> > #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);
>
> Shouldn't we check for kmalloc() failures here?
Good point. Just because I've never seen it fail, doesn't mean it can't :)
Before I roll a new version, what did you think splitting the thawing and
thawing bdevs in the middle? I think it's the right thing (TM) to do :>
Nigel
> > + fs->sb = sb;
> > + list_add_tail(&fs->fsb_list, &frozen_fs_list);
> > + };
> > +
> > + /* Do the freezing in reverse order so filesystems dependant
> > + * upon others are frozen in the right order. (Eg loopback
> > + * on ext3). */
> > + list_for_each_entry_reverse(fs, &frozen_fs_list, fsb_list)
> > + freeze_bdev(fs->sb->s_bdev);
> > +
> > + return 0;
> > +}
> > +
> >
> > static inline int freezeable(struct task_struct * p)
> > {
> > @@ -77,6 +127,7 @@
> > printk( "Stopping tasks: " );
> > start_time = jiffies;
> > user_frozen = 0;
> > + bdevs_frozen = 0;
> > do {
> > nr_user = todo = 0;
> > read_lock(&tasklist_lock);
> > @@ -107,6 +158,10 @@
> > start_time = jiffies;
> > }
> > user_frozen = !nr_user;
> > +
> > + if (user_frozen && !bdevs_frozen)
> > + freezer_make_fses_ro();
> > +
> > yield(); /* Yield is okay here */
> > if (todo && time_after(jiffies, start_time + TIMEOUT))
> > break;
> > @@ -156,6 +211,8 @@
> > printk(KERN_INFO " Strange, %s not stopped\n", p->comm );
> > } while_each_thread(g, p);
> >
> > + freezer_make_fses_rw();
> > +
> > read_unlock(&tasklist_lock);
> > schedule();
> > printk( " done\n" );
>
> Greetings,
> Rafael
--
See our web page for Howtos, FAQs, the Wiki and mailing list info.
http://www.suspend2.net IRC: #suspend2 on Freenode
[-- Attachment #2: Type: application/pgp-signature, Size: 189 bytes --]
next prev parent reply other threads:[~2006-05-01 1:49 UTC|newest]
Thread overview: 53+ messages / expand[flat|nested] mbox.gz Atom feed top
2006-04-24 21:55 [RFC][PATCH] swsusp: support creating bigger images Rafael J. Wysocki
2006-04-24 22:16 ` Pavel Machek
2006-04-25 8:26 ` Rafael J. Wysocki
2006-04-25 8:26 ` Rafael J. Wysocki
2006-04-25 10:04 ` Pavel Machek
2006-04-25 10:04 ` Pavel Machek
2006-04-25 10:31 ` Rafael J. Wysocki
2006-04-25 10:31 ` Rafael J. Wysocki
2006-04-27 15:27 ` Rafael J. Wysocki
2006-04-27 15:27 ` Rafael J. Wysocki
2006-04-27 20:55 ` Pavel Machek
2006-04-28 9:19 ` Rafael J. Wysocki
2006-04-28 9:19 ` Rafael J. Wysocki
2006-04-28 9:23 ` Pavel Machek
2006-04-28 9:23 ` Pavel Machek
2006-04-25 10:28 ` Nick Piggin
2006-04-25 15:39 ` Rafael J. Wysocki
2006-04-25 20:32 ` Pavel Machek
2006-04-25 21:12 ` Rafael J. Wysocki
2006-04-25 21:12 ` Rafael J. Wysocki
2006-04-25 21:18 ` Nigel Cunningham
2006-04-25 21:18 ` Nigel Cunningham
2006-04-25 22:21 ` Rafael J. Wysocki
2006-04-25 22:21 ` Rafael J. Wysocki
2006-04-25 22:24 ` Nigel Cunningham
2006-04-25 22:24 ` Nigel Cunningham
2006-04-25 22:38 ` Rafael J. Wysocki
2006-04-25 22:38 ` Rafael J. Wysocki
2006-04-25 22:25 ` Pavel Machek
2006-04-25 22:25 ` Pavel Machek
2006-04-25 22:30 ` Nigel Cunningham
2006-04-25 22:30 ` Nigel Cunningham
2006-04-25 22:36 ` Pavel Machek
2006-04-25 22:36 ` Pavel Machek
2006-04-25 22:43 ` Rafael J. Wysocki
2006-04-25 22:43 ` Rafael J. Wysocki
2006-04-26 0:49 ` Nigel Cunningham
2006-04-30 12:27 ` Rafael J. Wysocki
2006-04-30 12:27 ` Rafael J. Wysocki
2006-05-01 1:49 ` Nigel Cunningham [this message]
2006-05-01 1:49 ` Nigel Cunningham
2006-05-01 11:20 ` Rafael J. Wysocki
2006-05-01 22:56 ` Nigel Cunningham
2006-04-26 2:24 ` Nick Piggin
2006-04-26 2:24 ` Nick Piggin
2006-04-26 3:41 ` Nigel Cunningham
2006-04-26 16:22 ` Nick Piggin
2006-04-26 21:16 ` Rafael J. Wysocki
2006-04-26 21:16 ` Rafael J. Wysocki
2006-04-26 8:10 ` Pavel Machek
2006-04-26 8:10 ` Pavel Machek
2006-04-27 19:53 ` [RFC][PATCH] swsusp: support creating bigger images (rev. 2) Rafael J. Wysocki
2006-04-27 19:53 ` 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=200605011150.04429.nigel@suspend2.net \
--to=nigel@suspend2.net \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-pm@osdl.org \
--cc=nickpiggin@yahoo.com.au \
--cc=pavel@ucw.cz \
--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.