From: David Chinner <dgc@sgi.com>
To: Nick Piggin <nickpiggin@yahoo.com.au>
Cc: David Chinner <dgc@sgi.com>,
Peter Zijlstra <a.p.zijlstra@chello.nl>,
linux-kernel@vger.kernel.org, xfs@oss.sgi.com, akpm@osdl.org
Subject: Re: [PATCH 1/2]: Fix BUG in cancel_dirty_pages on XFS
Date: Thu, 25 Jan 2007 11:35:36 +1100 [thread overview]
Message-ID: <20070125003536.GS33919298@melbourne.sgi.com> (raw)
In-Reply-To: <45B7F5F9.2070308@yahoo.com.au>
On Thu, Jan 25, 2007 at 11:12:41AM +1100, Nick Piggin wrote:
> David Chinner wrote:
> >On Thu, Jan 25, 2007 at 12:43:23AM +1100, Nick Piggin wrote:
>
> >>And why not just leave it in the pagecache and be done with it?
> >
> >
> >because what is in cache is then not coherent with what is on disk,
> >and a direct read is supposed to read the data that is present
> >in the file at the time it is issued.
>
> So after a writeout it will be coherent of course, so the point in
> question is what happens when someone comes in and dirties it at the
> worst possible moment? That relates to the paragraph below...
>
> >>All you need is to do a writeout before a direct IO read, which is
> >>what generic dio code does.
> >
> >
> >No, that's not good enough - after writeout but before the
> >direct I/O read is issued a process can fault the page and dirty
> >it. If you do a direct read, followed by a buffered read you should
> >get the same data. The only way to guarantee this is to chuck out
> >any cached pages across the range of the direct I/O so they are
> >fetched again from disk on the next buffered I/O. i.e. coherent
> >at the time the direct I/O is issued.
>
> ... so surely if you do a direct read followed by a buffered read,
> you should *not* get the same data if there has been some activity
> to modify that part of the file in the meantime (whether that be a
> buffered or direct write).
Right. And that is what happens in XFS because it purges the
caches on direct I/O and forces data to be re-read from disk.
Effectively, if you are mixing direct I/O with other types of I/O
(buffered or mmap) then the application really needs to be certain
it is doing the right thing because there are races that can occur
below the filesystem. All we care about in the filesystem is that
what we cache is the same as what is on disk, and that implies that
direct I/O needs to purge the cache regardless of the state it is in....
Hence we need to unmap pages and use truncate semantics on them to
ensure they are removed from the page cache....
Cheers,
Dave.
--
Dave Chinner
Principal Engineer
SGI Australian Software Group
next prev parent reply other threads:[~2007-01-25 0:35 UTC|newest]
Thread overview: 16+ messages / expand[flat|nested] mbox.gz Atom feed top
2007-01-23 22:37 [PATCH 1/2]: Fix BUG in cancel_dirty_pages on XFS David Chinner
2007-01-24 12:13 ` Peter Zijlstra
2007-01-24 13:43 ` Nick Piggin
2007-01-24 14:40 ` Peter Zijlstra
2007-01-25 0:05 ` Nick Piggin
2007-01-24 22:46 ` David Chinner
2007-01-25 0:12 ` Nick Piggin
2007-01-25 0:35 ` David Chinner [this message]
2007-01-25 0:47 ` Nick Piggin
2007-01-25 1:52 ` David Chinner
2007-01-25 2:01 ` Nick Piggin
2007-01-25 3:42 ` David Chinner
2007-01-25 4:25 ` Nick Piggin
2007-01-25 7:40 ` David Chinner
2007-01-25 10:26 ` Nick Piggin
2007-01-24 22:24 ` David Chinner
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=20070125003536.GS33919298@melbourne.sgi.com \
--to=dgc@sgi.com \
--cc=a.p.zijlstra@chello.nl \
--cc=akpm@osdl.org \
--cc=linux-kernel@vger.kernel.org \
--cc=nickpiggin@yahoo.com.au \
--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