From: Chris Mason <chris.mason@oracle.com>
To: Nick Piggin <npiggin@kernel.dk>
Cc: linux-fsdevel <linux-fsdevel@vger.kernel.org>,
Andrew Morton <akpm@linux-foundation.org>,
Al Viro <viro@zeniv.linux.org.uk>,
linux-ext4 <linux-ext4@vger.kernel.org>,
linux-btrfs <linux-btrfs@vger.kernel.org>,
Jan Kara <jack@suse.cz>, Eric Sandeen <sandeen@redhat.com>,
"Theodore Ts'o" <tytso@mit.edu>
Subject: Re: [patch] fs: fix deadlocks in writeback_if_idle
Date: Tue, 23 Nov 2010 07:34:07 -0500 [thread overview]
Message-ID: <1290515274-sup-3895@think> (raw)
In-Reply-To: <20101123100239.GA4232@amd>
Excerpts from Nick Piggin's message of 2010-11-23 05:02:39 -0500:
[ ... ]
>
> Avoid both these issues by issuing completely asynchronous writeback request in
> writeback_inodes_sb_if_idle. Don't let that fool you into thinking these
> functions don't suck any more.
>
> ext4 now passes extensive stress testing with xfstests, fs_mark, dbench,
> with a writeback_inodes_if_idle call added directly into ext4_da_write_begin
> to trigger the path frequently. Previously it would spew lockdep stuff and
> hang in a number of ways very quickly.
>
> Signed-off-by: Nick Piggin <npiggin@kernel.dk>
>
> ---
> fs/fs-writeback.c | 32 ++++++++++++++++++++------------
> 1 file changed, 20 insertions(+), 12 deletions(-)
>
> Index: linux-2.6/fs/fs-writeback.c
> ===================================================================
> --- linux-2.6.orig/fs/fs-writeback.c 2010-11-23 20:57:23.000000000 +1100
> +++ linux-2.6/fs/fs-writeback.c 2010-11-23 20:59:10.000000000 +1100
> @@ -1152,16 +1152,17 @@ EXPORT_SYMBOL(writeback_inodes_sb);
> *
> * Invoke writeback_inodes_sb if no writeback is currently underway.
> * Returns 1 if writeback was started, 0 if not.
> + *
> + * Even if 1 is returned, writeback may not be started if memory allocation
> + * fails. This function makes no guarantees about anything.
> */
> int writeback_inodes_sb_if_idle(struct super_block *sb)
> {
> if (!writeback_in_progress(sb->s_bdi)) {
> - down_read(&sb->s_umount);
> - writeback_inodes_sb(sb);
> - up_read(&sb->s_umount);
> + bdi_start_writeback(sb->s_bdi, get_nr_dirty_pages());
I'll put on my skis and channel Christoph for a minute. This isn't
quite the same as the original. writeback_inodes_sb() writes inodes on a
specific super block, while bdi_start_writeback() writes them for any SB
on that bdi.
For btrfs there's only one bdi per SB, but for most everyone else a disk
with a bunch of partitions is going to have multiple filesystems on the
same bdi.
My original btrfs patch just exported the bdi_ funcs so that btrfs could
do the above internally. But Christoph objected, and I think he's
right. We should either give everyone a bdi or make sure the writeback
func kicks only one filesystem.
-chris
next prev parent reply other threads:[~2010-11-23 12:34 UTC|newest]
Thread overview: 24+ messages / expand[flat|nested] mbox.gz Atom feed top
2010-11-23 10:02 [patch] fs: fix deadlocks in writeback_if_idle Nick Piggin
2010-11-23 10:11 ` Nick Piggin
2010-11-23 13:18 ` Jan Kara
2010-11-25 3:52 ` Nick Piggin
2010-11-23 10:26 ` Boaz Harrosh
2010-11-23 10:54 ` Nick Piggin
2010-11-23 12:00 ` Boaz Harrosh
2010-11-23 12:34 ` Chris Mason [this message]
2010-11-23 12:52 ` Nick Piggin
2010-11-23 18:58 ` Chris Mason
2010-11-24 1:03 ` Nick Piggin
2010-11-24 13:10 ` Jan Kara
2010-11-25 3:53 ` Nick Piggin
2010-11-29 22:26 ` Andrew Morton
2010-11-30 0:01 ` Nick Piggin
2010-12-16 3:12 ` Nick Piggin
2010-11-24 22:51 ` Andrew Morton
2010-11-25 4:07 ` Nick Piggin
2010-11-24 22:47 ` Andrew Morton
2010-11-25 9:41 ` Boaz Harrosh
2010-11-25 20:30 ` Andrew Morton
2010-11-30 0:50 ` Chris Mason
2010-11-23 12:54 ` Dmitry
2010-11-23 12:54 ` Dmitry
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=1290515274-sup-3895@think \
--to=chris.mason@oracle.com \
--cc=akpm@linux-foundation.org \
--cc=jack@suse.cz \
--cc=linux-btrfs@vger.kernel.org \
--cc=linux-ext4@vger.kernel.org \
--cc=linux-fsdevel@vger.kernel.org \
--cc=npiggin@kernel.dk \
--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.