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 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.