From: Andrew Morton <akpm@digeo.com>
To: Chris Mason <mason@suse.com>
Cc: "linux-fsdevel@vger.kernel.org" <linux-fsdevel@vger.kernel.org>
Subject: Re: [PATCH] 2.5.x write_super is not for syncing
Date: Mon, 02 Dec 2002 14:07:00 -0800 [thread overview]
Message-ID: <3DEBD984.BACA3099@digeo.com> (raw)
In-Reply-To: 1034791206.18503.68.camel@tiny
Six weeks ago, Chris Mason wrote:
>
> Hello all,
>
> This patch adds a commit_super super operation that allows the journaled
> filesystems to do something different for the periodic write_super calls
> and sync.
This is the "right fix" for the ext3 data=journal problem.
> Based on comments from Al about my last patch, alloc_super sets a
> default empty super_operations struct on each super. This allows us to
> get rid of all checks for sb->s_ops == NULL.
>
> sync_supers is changed so that it doesn't loop on a single FS if the
> write_super call leaves sb->s_dirt set. I did this by changing
> generic_shutdown_super to use list_del_init(&sb->s_list), which allows
> us to check for supers that have been removed from the super_blocks list
> while we slept. The idea came from an sgi patch Hugh Dickins sent me.
>
> Anyway, this is against 2.5.43, please review:
>
> --- 1.161/fs/buffer.c Tue Oct 8 14:40:47 2002
> +++ edited/fs/buffer.c Wed Oct 16 11:39:04 2002
> @@ -217,8 +217,10 @@
> sync_inodes_sb(sb, 0);
> DQUOT_SYNC(sb);
> lock_super(sb);
> - if (sb->s_dirt && sb->s_op && sb->s_op->write_super)
> + if (sb->s_dirt && sb->s_op->write_super)
> sb->s_op->write_super(sb);
> + if (sb->s_dirt && sb->s_op->commit_super)
> + sb->s_op->commit_super(sb);
Except for the s_dirt test in here. If s_dirt is zero and we
have dirty inodes, the filesystem _still_ is not told what to
do.
I don't think we'll ever get this right until we start telling the
filesystem what's happening. So instead of all these little
presumptuous micro-syncs which we're doing in there, we need to turn
this inside out and just call sb->s_op->sync_everything_for_umount()
and let the fs decide how to get everything tight on disk.
That's a bit drastic. At a minimum we need to remove that s_dirt
test and make the commit_super() call unconditional.
What would that break?
next parent reply other threads:[~2002-12-02 22:07 UTC|newest]
Thread overview: 20+ messages / expand[flat|nested] mbox.gz Atom feed top
[not found] <1034791206.18503.68.camel@tiny>
2002-12-02 22:07 ` Andrew Morton [this message]
2002-12-02 23:40 ` [PATCH] 2.5.x write_super is not for syncing Chris Mason
2002-12-03 0:03 ` Andrew Morton
2002-12-03 1:10 ` Chris Mason
2002-12-03 1:40 ` Andrew Morton
2002-12-03 3:09 ` Andrew Morton
2002-12-03 19:36 ` Bryan Henderson
2002-12-03 20:06 ` Andrew Morton
2002-12-03 21:41 ` Bryan Henderson
2002-12-03 22:13 ` Andrew Morton
2002-12-04 2:05 ` Bryan Henderson
2002-12-04 4:29 ` Andrew Morton
2002-12-04 19:00 ` Bryan Henderson
2002-12-04 19:23 ` Matthew Wilcox
2002-12-04 22:17 ` Bryan Henderson
2002-12-05 10:36 ` Arnaldo Carvalho de Melo
2002-12-05 16:31 ` Stephen C. Tweedie
2002-12-05 17:24 ` girish
2002-12-04 21:10 ` Stephen C. Tweedie
2002-12-04 22:46 ` Bryan Henderson
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=3DEBD984.BACA3099@digeo.com \
--to=akpm@digeo.com \
--cc=linux-fsdevel@vger.kernel.org \
--cc=mason@suse.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox