public inbox for linux-xfs@vger.kernel.org
 help / color / mirror / Atom feed
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

  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