mirror of https://lore.kernel.org/lkml/
 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 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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox

Powered by JetHome