From: David Chinner <dgc@sgi.com>
To: Christoph Hellwig <hch@infradead.org>
Cc: Lachlan McIlroy <lachlan@sgi.com>,
sgi.bugs.xfs@engr.sgi.com, xfs@oss.sgi.com
Subject: Re: TAKE 964002 - Don't wait for pending I/Os when purging blocks beyond eof.
Date: Wed, 12 Dec 2007 10:25:17 +1100 [thread overview]
Message-ID: <20071211232517.GE4612@sgi.com> (raw)
In-Reply-To: <20071211081117.GB19213@infradead.org>
On Tue, Dec 11, 2007 at 08:11:17AM +0000, Christoph Hellwig wrote:
> On Mon, Dec 10, 2007 at 04:59:55PM +1100, Lachlan McIlroy wrote:
> > Don't wait for pending I/Os when purging blocks beyond eof.
> >
> > On last close of a file we purge blocks beyond eof. The same
> > code is used when we truncate the file size down. In this case
> > we need to wait for any pending I/Os for dirty pages beyond the
> > new eof. For the last close case we are not changing the file
> > size and therefore do not need to wait for any I/Os to complete.
> > This fixes a performance bottleneck where writes into the page
> > cache and cache flushes can become mutually exclusive.
>
> I think I shortened from of this should be in the comment above
> the conditional vn_iowait intead of the current
>
> /* wait for the completion of any pending DIOs */
>
> which is wrong given that we don't wait for all pending direct I/O
> requests.. (and vn_iowait doesn't wait for direct I/O anyway)
vn_iowait() does wait for direct I/O. That was it's entire purpose - to be
able to prevent truncate vs direct I/O write races by tracking direct I/Os.
We increment ip->i_iocount in xfs_alloc_ioend() which is called from both the
buffered write and direct I/O write path, so vn_iowait() does wait for both
buffered and direct writes to complete.
FWIW, the freeze code makes use of this functionality (SYNC_IOWAIT) to ensure
all pending data writes are complete complete before the freeze is completed....
Cheers,
Dave.
--
Dave Chinner
Principal Engineer
SGI Australian Software Group
next prev parent reply other threads:[~2007-12-11 23:25 UTC|newest]
Thread overview: 6+ messages / expand[flat|nested] mbox.gz Atom feed top
2007-12-10 5:59 TAKE 964002 - Don't wait for pending I/Os when purging blocks beyond eof Lachlan McIlroy
2007-12-11 8:11 ` Christoph Hellwig
2007-12-11 23:25 ` David Chinner [this message]
2007-12-12 5:13 ` Christoph Hellwig
2007-12-11 16:52 ` Bhagi rathi
2007-12-12 4:04 ` Lachlan McIlroy
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=20071211232517.GE4612@sgi.com \
--to=dgc@sgi.com \
--cc=hch@infradead.org \
--cc=lachlan@sgi.com \
--cc=sgi.bugs.xfs@engr.sgi.com \
--cc=xfs@oss.sgi.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