From: Jeff Layton <jlayton@redhat.com>
To: Rik van Riel <riel@redhat.com>
Cc: Andrew Morton <akpm@linux-foundation.org>,
"Ted Ts'o" <tytso@mit.edu>,
linux-kernel@vger.kernel.org, esandeen@redhat.com,
jmoyer@redhat.com, linux-fsdevel@vger.kernel.org,
Alexander Viro <viro@zeniv.linux.org.uk>,
lmcilroy@redhat.com
Subject: Re: [PATCH] clear PageError bit in msync & fsync
Date: Fri, 12 Nov 2010 10:52:50 -0500 [thread overview]
Message-ID: <20101112105250.75f01670@tlielax.poochiereds.net> (raw)
In-Reply-To: <4CDCC457.9030400@redhat.com>
On Thu, 11 Nov 2010 23:36:39 -0500
Rik van Riel <riel@redhat.com> wrote:
> On 11/09/2010 04:41 PM, Andrew Morton wrote:
>
> > yup. It's a userspace bug, really. Although that bug might be
> > expressed as "userspace didn't know about linux-specific EIO
> > behaviour".
>
> Looking at this some more, I am not convinced this is a userspace
> bug.
>
> First, let me describe the problem scenario:
> 1) process A calls write
> 2) process B calls write
> 3) process A calls fsync, runs into an IO error, returns -EIO
> 4) process B calls fsync, returns success
> (even though data could have been lost!)
>
> Common sense, as well as these snippets from the fsync man
> page, suggest that this behaviour is incorrect:
>
> DESCRIPTION
> fsync() transfers ("flushes") all modified in-core data of (i.e.,
> modified buffer cache pages for) the file referred to by the file
> descriptor fd to the disk device
> ...
> RETURN VALUE
> On success, these system calls return zero. On error, -1 is
> returned, and errno is set appropriately.
>
I'll agree that that situation sucks for userspace but I'm not sure
that problem scenario is technically wrong. The error got reported to
userspace after all, just not to both processes that had done writes.
The root cause here is that we don't track the file descriptor that was
used to dirty specific pages. The reason is simple, IMO -- it would be
an unmanageable rabbit-hole.
Here's another related "problem" scenario (for purposes of argument):
Suppose between steps 2 and 3, the VM decides to flush out the pages
dirtied by process A, but not the ones from process B. That succeeds,
but just afterward the disk goes toes-up.
Now, process A issues an fsync. He gets an error but his data was
flushed to disk just fine. Is that also incorrect behavior?
--
Jeff Layton <jlayton@redhat.com>
next prev parent reply other threads:[~2010-11-12 15:53 UTC|newest]
Thread overview: 17+ messages / expand[flat|nested] mbox.gz Atom feed top
2010-11-09 16:44 Rik van Riel
2010-11-09 18:09 ` Valerie Aurora
2010-11-09 19:21 ` Jeff Layton
2010-11-09 19:33 ` Rik van Riel
2010-11-09 21:07 ` Ted Ts'o
2010-11-09 21:15 ` Rik van Riel
2010-11-09 21:41 ` Andrew Morton
2010-11-12 4:36 ` Rik van Riel
2010-11-12 15:52 ` Jeff Layton [this message]
2010-11-12 17:04 ` Rik van Riel
2010-11-09 21:44 ` Jan Kara
2010-11-11 16:31 ` Rik van Riel
2010-11-09 21:21 ` Zan Lynx
2010-11-09 21:24 ` Rik van Riel
2010-11-12 20:51 ` Eric Sandeen
2010-11-12 21:36 ` Jeff Layton
2010-11-09 21:39 ` Jan Kara
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=20101112105250.75f01670@tlielax.poochiereds.net \
--to=jlayton@redhat.com \
--cc=akpm@linux-foundation.org \
--cc=esandeen@redhat.com \
--cc=jmoyer@redhat.com \
--cc=linux-fsdevel@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=lmcilroy@redhat.com \
--cc=riel@redhat.com \
--cc=tytso@mit.edu \
--cc=viro@zeniv.linux.org.uk \
/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
all inboxes | Powered by JetHome®