From: Kamal Mostafa <kamal@canonical.com>
To: Jan Kara <jack@suse.cz>
Cc: LKML <linux-kernel@vger.kernel.org>,
linux-fsdevel@vger.kernel.org, Al Viro <viro@ZenIV.linux.org.uk>,
Christoph Hellwig <hch@infradead.org>,
dchinner@redhat.com, sandeen@redhat.com,
linux-ext4@vger.kernel.org, Theodore Ts'o <tytso@mit.edu>
Subject: Re: [PATCH 10/19] ext4: Convert to new freezing mechanism
Date: Wed, 07 Mar 2012 14:32:13 -0800 [thread overview]
Message-ID: <1331159533.12984.73.camel@fourier> (raw)
In-Reply-To: <1330963277-26336-11-git-send-email-jack@suse.cz>
[-- Attachment #1: Type: text/plain, Size: 5573 bytes --]
Re: the patch set:
[PATCH 00/19] Fix filesystem freezing deadlocks
In my initial smoke testing of this, I find that if I freeze a newly
created ext4 filesystem immediately after mounting it for the very first
time, then I get the new SB_FREEZE_COMPLETE warning from
ext4_journal_start_sb() every 0.4 seconds from ext4lazyinit...
# mkfs -t ext4 /dev/sdaX
# mount /dev/sdaX /mnt
# fsfreeze -f /mnt
WARNING:
at /home/kamal/src/linux/ubuntu-precise/fs/ext4/super.c:301
ext4_journal_start_sb+0x159/0x160()
Pid: 3252, comm: ext4lazyinit Tainted: G W
3.2.0-18-generic #28+kamal1+jankara1
Call Trace:
[<ffffffff8106724f>] warn_slowpath_common+0x7f/0xc0
[<ffffffff810672aa>] warn_slowpath_null+0x1a/0x20
[<ffffffff812352c9>] ext4_journal_start_sb+0x159/0x160
[<ffffffff8121326b>] ? ext4_init_inode_table+0xab/0x370
[<ffffffff8121326b>] ext4_init_inode_table+0xab/0x370
[<ffffffff81659cb5>] ? schedule_timeout+0x175/0x320
[<ffffffff81226905>] ext4_run_li_request+0x85/0xe0
[<ffffffff812269fc>] ext4_lazyinit_thread+0x9c/0x1c0
[<ffffffff81226960>] ? ext4_run_li_request+0xe0/0xe0
[<ffffffff8108a39c>] kthread+0x8c/0xa0
[<ffffffff81665e34>] kernel_thread_helper+0x4/0x10
[<ffffffff8108a310>] ? flush_kthread_worker+0xa0/0xa0
[<ffffffff81665e30>] ? gs_change+0x13/0x13
-Kamal
On Mon, 2012-03-05 at 17:01 +0100, Jan Kara wrote:
> We remove most of frozen checks since upper layer takes care
> of blocking all writes. We only have to handle protection in
> ext4_page_mkwrite() in a special way because we cannot use
> generic block_page_mkwrite().
>
> CC: linux-ext4@vger.kernel.org
> CC: "Theodore Ts'o" <tytso@mit.edu>
> Signed-off-by: Jan Kara <jack@suse.cz>
> ---
> fs/ext4/inode.c | 7 ++-----
> fs/ext4/super.c | 29 +++++------------------------
> 2 files changed, 7 insertions(+), 29 deletions(-)
>
> diff --git a/fs/ext4/inode.c b/fs/ext4/inode.c
> index feaa82f..c65baf9 100644
> --- a/fs/ext4/inode.c
> +++ b/fs/ext4/inode.c
> @@ -4593,11 +4593,7 @@ int ext4_page_mkwrite(struct vm_area_struct *vma, struct vm_fault *vmf)
> get_block_t *get_block;
> int retries = 0;
>
> - /*
> - * This check is racy but catches the common case. We rely on
> - * __block_page_mkwrite() to do a reliable check.
> - */
> - vfs_check_frozen(inode->i_sb, SB_FREEZE_WRITE);
> + sb_start_pagefault(inode->i_sb);
> /* Delalloc case is easy... */
> if (test_opt(inode->i_sb, DELALLOC) &&
> !ext4_should_journal_data(inode) &&
> @@ -4665,5 +4661,6 @@ retry_alloc:
> out_ret:
> ret = block_page_mkwrite_return(ret);
> out:
> + sb_end_pagefault(inode->i_sb);
> return ret;
> }
> diff --git a/fs/ext4/super.c b/fs/ext4/super.c
> index 502c61f..0f1024a 100644
> --- a/fs/ext4/super.c
> +++ b/fs/ext4/super.c
> @@ -289,33 +289,17 @@ static void ext4_put_nojournal(handle_t *handle)
> * journal_end calls result in the superblock being marked dirty, so
> * that sync() will call the filesystem's write_super callback if
> * appropriate.
> - *
> - * To avoid j_barrier hold in userspace when a user calls freeze(),
> - * ext4 prevents a new handle from being started by s_frozen, which
> - * is in an upper layer.
> */
> handle_t *ext4_journal_start_sb(struct super_block *sb, int nblocks)
> {
> journal_t *journal;
> - handle_t *handle;
>
> trace_ext4_journal_start(sb, nblocks, _RET_IP_);
> if (sb->s_flags & MS_RDONLY)
> return ERR_PTR(-EROFS);
>
> + WARN_ON(sb->s_writers.frozen == SB_FREEZE_COMPLETE);
> journal = EXT4_SB(sb)->s_journal;
> - handle = ext4_journal_current_handle();
> -
> - /*
> - * If a handle has been started, it should be allowed to
> - * finish, otherwise deadlock could happen between freeze
> - * and others(e.g. truncate) due to the restart of the
> - * journal handle if the filesystem is forzen and active
> - * handles are not stopped.
> - */
> - if (!handle)
> - vfs_check_frozen(sb, SB_FREEZE_TRANS);
> -
> if (!journal)
> return ext4_get_nojournal();
> /*
> @@ -4280,10 +4264,8 @@ int ext4_force_commit(struct super_block *sb)
> return 0;
>
> journal = EXT4_SB(sb)->s_journal;
> - if (journal) {
> - vfs_check_frozen(sb, SB_FREEZE_TRANS);
> + if (journal)
> ret = ext4_journal_force_commit(journal);
> - }
>
> return ret;
> }
> @@ -4315,9 +4297,8 @@ static int ext4_sync_fs(struct super_block *sb, int wait)
> * gives us a chance to flush the journal completely and mark the fs clean.
> *
> * Note that only this function cannot bring a filesystem to be in a clean
> - * state independently, because ext4 prevents a new handle from being started
> - * by @sb->s_frozen, which stays in an upper layer. It thus needs help from
> - * the upper layer.
> + * state independently. It relies on upper layer to stop all data & metadata
> + * modifications.
> */
> static int ext4_freeze(struct super_block *sb)
> {
> @@ -4344,7 +4325,7 @@ static int ext4_freeze(struct super_block *sb)
> EXT4_CLEAR_INCOMPAT_FEATURE(sb, EXT4_FEATURE_INCOMPAT_RECOVER);
> error = ext4_commit_super(sb, 1);
> out:
> - /* we rely on s_frozen to stop further updates */
> + /* we rely on upper layer to stop further updates */
> jbd2_journal_unlock_updates(EXT4_SB(sb)->s_journal);
> return error;
> }
[-- Attachment #2: This is a digitally signed message part --]
[-- Type: application/pgp-signature, Size: 836 bytes --]
next prev parent reply other threads:[~2012-03-07 22:32 UTC|newest]
Thread overview: 59+ messages / expand[flat|nested] mbox.gz Atom feed top
2012-03-05 16:00 [Cluster-devel] [PATCH 00/19] Fix filesystem freezing deadlocks Jan Kara
2012-03-05 16:01 ` [Ocfs2-devel] " Jan Kara
2012-03-05 16:00 ` Jan Kara
2012-03-05 16:00 ` Jan Kara
2012-03-05 16:00 ` Jan Kara
2012-03-05 16:00 ` [PATCH 01/19] mm: Make default vm_ops provide ->page_mkwrite handler Jan Kara
2012-03-23 22:45 ` Andrew Morton
2012-03-27 7:55 ` Jan Kara
2012-03-27 21:38 ` Andrew Morton
2012-03-27 22:08 ` Jan Kara
2012-03-27 22:45 ` Dave Chinner
2012-03-28 9:48 ` Jan Kara
2012-03-05 16:01 ` [PATCH 02/19] fs: Push mnt_want_write() outside of i_mutex Jan Kara
2012-03-05 16:01 ` [Ocfs2-devel] " Jan Kara
2012-03-05 16:01 ` [PATCH 03/19] fat: " Jan Kara
2012-03-05 16:01 ` [PATCH 04/19] btrfs: " Jan Kara
2012-03-05 16:01 ` [PATCH 05/19] nfsd: " Jan Kara
2012-03-05 16:01 ` Jan Kara
2012-03-05 16:01 ` [PATCH 06/19] fs: Improve filesystem freezing handling Jan Kara
2012-03-05 16:01 ` [PATCH 07/19] fs: Add freezing handling to mnt_want_write() / mnt_drop_write() Jan Kara
2012-03-05 16:01 ` [PATCH 08/19] fs: Skip atime update on frozen filesystem Jan Kara
2012-03-05 16:01 ` [PATCH 09/19] fs: Protect write paths by sb_start_write - sb_end_write Jan Kara
2012-03-05 16:01 ` [PATCH 10/19] ext4: Convert to new freezing mechanism Jan Kara
2012-03-07 22:32 ` Kamal Mostafa [this message]
2012-03-08 9:05 ` Jan Kara
2012-03-05 16:01 ` [PATCH 11/19] xfs: Convert to new freezing code Jan Kara
2012-03-05 16:01 ` Jan Kara
2012-03-08 23:20 ` Dave Chinner
2012-03-08 23:20 ` Dave Chinner
2012-03-09 8:23 ` Jan Kara
2012-03-09 8:23 ` Jan Kara
2012-03-09 14:22 ` Jan Kara
2012-03-09 14:22 ` Jan Kara
2012-03-11 22:45 ` Dave Chinner
2012-03-11 22:45 ` Dave Chinner
2012-03-12 17:55 ` Jan Kara
2012-03-12 17:55 ` Jan Kara
2012-03-12 23:48 ` Dave Chinner
2012-03-12 23:48 ` Dave Chinner
2012-03-13 21:30 ` Jan Kara
2012-03-13 21:30 ` Jan Kara
2012-03-14 3:00 ` Dave Chinner
2012-03-14 3:00 ` Dave Chinner
2012-03-05 16:01 ` [PATCH 12/19] ocfs2: Convert to new freezing mechanism Jan Kara
2012-03-05 16:01 ` [Ocfs2-devel] " Jan Kara
2012-03-05 16:01 ` [Cluster-devel] [PATCH 13/19] gfs2: " Jan Kara
2012-03-05 16:01 ` Jan Kara
2012-03-05 16:01 ` Jan Kara
[not found] ` <1330963277-26336-1-git-send-email-jack-AlSwsSmVLrQ@public.gmane.org>
2012-03-05 16:01 ` [PATCH 14/19] fuse: " Jan Kara
2012-03-05 16:01 ` Jan Kara
2012-03-05 16:01 ` [PATCH 15/19] ntfs: " Jan Kara
2012-03-05 16:01 ` [PATCH 16/19] nilfs2: " Jan Kara
2012-03-05 16:01 ` [PATCH 17/19] btrfs: " Jan Kara
2012-03-05 16:01 ` [PATCH 18/19] fs: Remove old " Jan Kara
2012-03-05 16:01 ` [PATCH 19/19] fs: Refuse to freeze filesystem with open but unlinked files Jan Kara
2012-03-11 20:22 ` [PATCH 00/19] Fix filesystem freezing deadlocks Kamal Mostafa
2012-03-11 20:23 ` [Ocfs2-devel] " Kamal Mostafa
2012-03-11 20:22 ` Kamal Mostafa
-- strict thread matches above, loose matches on Subject: below --
2012-03-28 23:43 [Cluster-devel] [PATCH 00/19 v4] " Jan Kara
2012-03-28 23:43 ` [PATCH 10/19] ext4: Convert to new freezing mechanism Jan Kara
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=1331159533.12984.73.camel@fourier \
--to=kamal@canonical.com \
--cc=dchinner@redhat.com \
--cc=hch@infradead.org \
--cc=jack@suse.cz \
--cc=linux-ext4@vger.kernel.org \
--cc=linux-fsdevel@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=sandeen@redhat.com \
--cc=tytso@mit.edu \
--cc=viro@ZenIV.linux.org.uk \
/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.