From: Jens Axboe <jens.axboe@oracle.com>
To: Theodore Tso <tytso@mit.edu>
Cc: Christoph Hellwig <hch@infradead.org>,
linux-mm@kvack.org,
Ext4 Developers List <linux-ext4@vger.kernel.org>,
linux-fsdevel@vger.kernel.org, chris.mason@oracle.com
Subject: Re: [PATCH, RFC] vm: Add an tuning knob for vm.max_writeback_pages
Date: Tue, 1 Sep 2009 11:17:08 +0200 [thread overview]
Message-ID: <20090901091708.GW12579@kernel.dk> (raw)
In-Reply-To: <20090831210337.GG23535@mit.edu>
On Mon, Aug 31 2009, Theodore Tso wrote:
> On Mon, Aug 31, 2009 at 12:47:49PM +0200, Jens Axboe wrote:
> > It's because ext4 writepages sets ->range_start and wb_writeback() is
> > range cyclic, then the next iteration will have the previous end point
> > as the starting point. Looks like we need to clear ->range_start in
> > wb_writeback(), the better place is probably to do that in
> > fs/fs-writeback.c:generic_sync_wb_inodes() right after the
> > writeback_single_inode() call. This, btw, should be no different than
> > the current code, weird/correct or not :-)
>
> Thanks for pointing it out. After staring at the code, I now believe
> this is the best fix for now. What do other folks think?
>
> - Ted
>
> commit 39cac8147479b48cd45b768d184aa6a80f23a2f7
> Author: Theodore Ts'o <tytso@mit.edu>
> Date: Mon Aug 31 17:00:59 2009 -0400
>
> ext4: Restore wbc->range_start in ext4_da_writepages()
>
> To solve a lock inversion problem, we implement part of the
> range_cyclic algorithm in ext4_da_writepages(). (See commit 2acf2c26
> for more details.)
>
> As part of that change wbc->range_start was modified by ext4's
> writepages function, which causes its callers to get confused since
> they aren't expecting the filesystem to modify it. The simplest fix
> is to save and restore wbc->range_start in ext4_da_writepages.
>
> Signed-off-by: "Theodore Ts'o" <tytso@mit.edu>
>
> diff --git a/fs/ext4/inode.c b/fs/ext4/inode.c
> index d61fb52..ff659e7 100644
> --- a/fs/ext4/inode.c
> +++ b/fs/ext4/inode.c
> @@ -2749,6 +2749,7 @@ static int ext4_da_writepages(struct address_space *mapping,
> long pages_skipped;
> int range_cyclic, cycled = 1, io_done = 0;
> int needed_blocks, ret = 0, nr_to_writebump = 0;
> + loff_t range_start = wbc->range_start;
> struct ext4_sb_info *sbi = EXT4_SB(mapping->host->i_sb);
>
> trace_ext4_da_writepages(inode, wbc);
> @@ -2917,6 +2918,7 @@ out_writepages:
> if (!no_nrwrite_index_update)
> wbc->no_nrwrite_index_update = 0;
> wbc->nr_to_write -= nr_to_writebump;
> + wbc->range_start = range_start;
> trace_ext4_da_writepages_result(inode, wbc, ret, pages_written);
> return ret;
> }
I was going to suggest using range_start locally and not touching
->range_start, but I see you pass the wbc further down. So this looks
fine to me.
--
Jens Axboe
--
To unsubscribe, send a message with 'unsubscribe linux-mm' in
the body to majordomo@kvack.org. For more info on Linux MM,
see: http://www.linux-mm.org/ .
Don't email: <a href=mailto:"dont@kvack.org"> email@kvack.org </a>
next prev parent reply other threads:[~2009-09-01 9:17 UTC|newest]
Thread overview: 24+ messages / expand[flat|nested] mbox.gz Atom feed top
2009-08-30 2:54 [PATCH, RFC] vm: Add an tuning knob for vm.max_writeback_pages Theodore Ts'o
2009-08-30 2:54 ` Theodore Ts'o
2009-08-30 16:52 ` Christoph Hellwig
2009-08-30 16:52 ` Christoph Hellwig
2009-08-30 18:17 ` Theodore Tso
2009-08-30 18:17 ` Theodore Tso
2009-08-30 22:27 ` Christoph Hellwig
2009-08-30 22:27 ` Christoph Hellwig
2009-08-31 3:08 ` Theodore Tso
2009-08-31 3:08 ` Theodore Tso
2009-08-31 10:29 ` Jens Axboe
2009-08-31 10:29 ` Jens Axboe
2009-08-31 10:47 ` Jens Axboe
2009-08-31 10:47 ` Jens Axboe
2009-08-31 12:37 ` Theodore Tso
2009-08-31 12:37 ` Theodore Tso
2009-08-31 15:54 ` Theodore Tso
2009-08-31 20:36 ` Jens Axboe
2009-08-31 21:03 ` Theodore Tso
2009-09-01 7:57 ` Aneesh Kumar K.V
2009-09-01 9:17 ` Jens Axboe [this message]
2009-09-01 18:00 ` Chris Mason
2009-09-01 20:30 ` Theodore Tso
2009-09-01 20:30 ` Theodore Tso
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=20090901091708.GW12579@kernel.dk \
--to=jens.axboe@oracle.com \
--cc=chris.mason@oracle.com \
--cc=hch@infradead.org \
--cc=linux-ext4@vger.kernel.org \
--cc=linux-fsdevel@vger.kernel.org \
--cc=linux-mm@kvack.org \
--cc=tytso@mit.edu \
/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.