From: Zach Brown <zach.brown@oracle.com>
To: Linus Torvalds <torvalds@linux-foundation.org>
Cc: Karl Schendel <kschendel@datallegro.com>,
Zach Brown <zach.brown@oracle.com>,
Benjamin LaHaise <bcrl@kvack.org>,
Andrew Morton <akpm@linux-foundation.org>,
Linux Kernel Mailing List <linux-kernel@vger.kernel.org>,
Nick Piggin <nickpiggin@yahoo.com.au>,
Leonid Ananiev <leonid.i.ananiev@linux.intel.com>,
Chris Mason <chris.mason@oracle.com>
Subject: Re: [PATCH] Fix bad data from non-direct-io read after direct-io write
Date: Fri, 26 Oct 2007 15:30:13 -0700 [thread overview]
Message-ID: <47226A75.1020008@oracle.com> (raw)
In-Reply-To: <alpine.LFD.0.999.0710261425240.30120@woody.linux-foundation.org>
Linus Torvalds wrote:
> Hmm. If I read this right, this bug seems to have been introduced by
> commit 65b8291c4000e5f38fc94fb2ca0cb7e8683c8a1b ("dio: invalidate clean
> pages before dio write") back in March.
Agreed. And it's a really dumb bug. ->direct_io will almost always
return -EIOCBQUEUED for aio dio so it won't be invalidating for aio dio
writes. (Notice that the testing in that commit mentions two racing
processes, I bet U$1M that I only tested sync dio :/)
I think that test should be changed to
if (retval < 0 && retval != -EIOCBQUEUED)
goto out;
> However, with both the old and the new code _and_ with your patch, the
> return code - in case the invalidate failed - was corrupted. So we may
> actually end up doing some IO, but then returning the "wrong" error code
> from the invalidate. Hmm?
If the invalidation fails then the app is left with stale data in the
page cache and current data on disk. The return code corruption you're
referring to was intended to communicate this scary situation to the app
with EIO.
It sucks. Does it suck more than returning success for the dio write
when later buffered reads will return stale data? I dunno. What does
the peanut gallery think?
> And maybe some day we can all agree that direct_IO is crap and should not
> be done.
Chris (Mason) and I certainly love the idea of getting rid of
fs/direct-io.c. Getting O_DIRECT working with the page-granular
buffered locking rules while doing large IOs (and, as far as I know,
potentially sector-granular) without noticeable performance regressions
is a mess.
- z
next prev parent reply other threads:[~2007-10-26 22:30 UTC|newest]
Thread overview: 12+ messages / expand[flat|nested] mbox.gz Atom feed top
2007-10-26 21:12 [PATCH] Fix bad data from non-direct-io read after direct-io write Karl Schendel
2007-10-26 21:34 ` Linus Torvalds
2007-10-26 22:10 ` Karl Schendel
2007-10-26 22:30 ` Zach Brown [this message]
2007-10-26 22:41 ` Karl Schendel
2007-10-26 22:42 ` Linus Torvalds
2007-10-26 22:54 ` Zach Brown
2007-10-26 23:14 ` Linus Torvalds
2007-10-26 23:28 ` Karl Schendel
2007-10-30 18:45 ` Zach Brown
2007-10-30 19:11 ` Linus Torvalds
2007-10-26 23:38 ` Zach Brown
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=47226A75.1020008@oracle.com \
--to=zach.brown@oracle.com \
--cc=akpm@linux-foundation.org \
--cc=bcrl@kvack.org \
--cc=chris.mason@oracle.com \
--cc=kschendel@datallegro.com \
--cc=leonid.i.ananiev@linux.intel.com \
--cc=linux-kernel@vger.kernel.org \
--cc=nickpiggin@yahoo.com.au \
--cc=torvalds@linux-foundation.org \
/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