All of lore.kernel.org
 help / color / mirror / Atom feed
From: Andrew Morton <akpm@linux-foundation.org>
To: Rik van Riel <riel@redhat.com>
Cc: "Ted Ts'o" <tytso@mit.edu>, Jeff Layton <jlayton@redhat.com>,
	linux-kernel@vger.kernel.org, esandeen@redhat.com,
	jmoyer@redhat.com, linux-fsdevel@vger.kernel.org
Subject: Re: [PATCH] clear PageError bit in msync & fsync
Date: Tue, 9 Nov 2010 13:41:39 -0800	[thread overview]
Message-ID: <20101109134139.c6f9f6dc.akpm@linux-foundation.org> (raw)
In-Reply-To: <4CD9BA08.2000002@redhat.com>

On Tue, 09 Nov 2010 16:15:52 -0500
Rik van Riel <riel@redhat.com> wrote:

> On 11/09/2010 04:07 PM, Ted Ts'o wrote:
> > On Tue, Nov 09, 2010 at 02:33:29PM -0500, Rik van Riel wrote:
> >>
> >> There are essentially two possibilities:
> >> 1) the VM can potentially be filled up with uncleanable dirty pages, or
> >> 2) pages that hit an IO error are left in a clean state, so they can
> >>     be reclaimed under memory pressure
> >>
> >> Alternative 1 could cause the entire system to deadlock, while
> >> option 2 puts the onus on userland apps to rewrite the data
> >> from a failed msync/fsync.
> >>
> >> Currently the VM has behaviour #2 which is preserved with my
> >> patch.
> >>
> >> The only difference with my patch is, we won't keep returning
> >> -EIO on subsequent, error free, msync or fsync calls to files
> >> that had an IO error at some previous point in the past.
> >
> > Do we guarantee that the application will get EIO at least once?  I
> > thought there were issues where the error bit could get lost if the
> > page writeback was triggered by sync() run by a third-party
> > application.
> 
> There is no such guarantee in the current kernel, either
> with or without my patch.
> 
> A third application calling fsync or msync can get the
> EIO cleared, so the application that did the write does
> not see it.

yup.  It's a userspace bug, really.  Although that bug might be
expressed as "userspace didn't know about linux-specific EIO
behaviour".

> The VM could also reclaim the PageError page due to
> memory pressure, so the application calling fsync or
> msync does not see it.

That would be a kernel bug, methinks.  The page's end_io handler should
set the address_space's AS_EIO flag (see mpage_end_io_write()), to be
later returned to (and cleared by) the fsync/msync caller.

It wouldn't surprise me if lots of end_io handlers got that wrong.

> I see no good way in which we could guarantee that
> every process calling msync or fsync on a file that
> had an IO error in the past gets EIO once - at least,
> not without every one of them always getting EIO on
> the file even after the IO path is good again...

Yes, there's no obviously good design here.

And a lot of these problems also apply to ENOSPC, and an ENOSPC
condition most certainly does magically fix itself up in real time...

  reply	other threads:[~2010-11-09 21:42 UTC|newest]

Thread overview: 17+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2010-11-09 16:44 [PATCH] clear PageError bit in msync & fsync 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 [this message]
2010-11-12  4:36           ` Rik van Riel
2010-11-12 15:52             ` Jeff Layton
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=20101109134139.c6f9f6dc.akpm@linux-foundation.org \
    --to=akpm@linux-foundation.org \
    --cc=esandeen@redhat.com \
    --cc=jlayton@redhat.com \
    --cc=jmoyer@redhat.com \
    --cc=linux-fsdevel@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=riel@redhat.com \
    --cc=tytso@mit.edu \
    /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.