From: Andrew Morton <akpm@linux-foundation.org>
To: David Howells <dhowells@redhat.com>
Cc: linux-kernel@vger.kernel.org
Subject: Re: [PATCH 2/4] AFS: Add a function to excise a rejected write from the pagecache
Date: Thu, 24 May 2007 14:47:32 -0700 [thread overview]
Message-ID: <20070524144732.d9b2650b.akpm@linux-foundation.org> (raw)
In-Reply-To: <27608.1180042522@redhat.com>
On Thu, 24 May 2007 22:35:22 +0100
David Howells <dhowells@redhat.com> wrote:
>
> > Why can't we just run the end_page_writeback() unconditionally?
> > PG_writeback _must_ be set here, and it is the caller who set PG_writeback,
> > so this thread of control "owns" that flag.
>
> You may be right. I'm trying to avoid a race with truncate and attempts to
> rewrite the page both, but as I set PG_error, that might not be a problem.
Thing is, this new interpretation and usage of PG_error is worrisome. For
example, I don't think we've previously made any effort to avoid starting
writeback against PageError() pages. We may be avoiding it in certain
places, but it wasn't a design rule of any sort. And any such code hasn't
had any useful testing: PageError() is a damn rare thing.
So my reason for asking the above is to try to find a way to make all these
new PG-error games just go away.
> > Also, are you really really sure that there is no way in which PG_writeback
> > can get itself set again after the end_page_writeback()?
>
> PG_error ought to take care of that. To set PG_writeback again, we have to
> wait for any outstanding PG_writeback to go away first - at which point
> PG_error should come to light.
>
> That's also the reason for the second part of the if-complex - the one that
> BUGs if PG_error is set *and* the page is dirty or undergoing writeback. I
> want to make sure I catch such a situation.
>
> > I'd have thought that we should be doing a wait_on_page_writeback() after the
> > lock_page() there.
>
> That would require us to begin writing back a page marked PG_error, which
> probably ought to be considered "a bad thing".
As I say, no effort has been made to enforce anything like that.
> > Remember, other filesystems might want to be calling this, so we shouldn't be
> > designing around AFS implementation specifics.
>
> I know. Part of the reason that I put it here is so that we can have a common
> policy. However, without trying to get it called from those other filesystems,
> it's hard to see where I've made AFS-specific assumptions. I don't think that
> there are actually any, but...
>
> > hm, is the pte-unmapping here completely solid?
>
> I'm not sure. Certainly by doing it after the grunging of the affected pages,
> we should evict all the PTEs and they shouldn't come back after that point.
>
> I'm tempted to rearrange the algorithm to be this:
>
> (1) Mark all affected pages PG_error.
>
> (2) Ditch all PTEs mapping to those pages.
>
> (3) Truncate all affected pages.
>
> Which has the downside of traversing the set of affected pages twice, but the
> upside of only whacking the PTEs once. The calling netfs would then have to
> make sure that nopage() didn't resurrect a PG_error page, but that could
> possibly be built into filemap_nopage() or do_no_page() as a convenience.
>
> > Are there any race windows in which a faulter can end up owning, say, an
> > anonymous page? We've had heaps of problems with that sort of thing in
> > generic_file_direct_IO() and I don't expect it's this easy.
>
> At the moment, I do two passes of PTE erasure to make sure that all these pages
> are properly expunged. However, if I use the above set of steps, and provided
> PG_error is properly honoured, I don't think this should be a problem.
>
Would be better, I think, to be able to remove all this new PG_error stuff.
next prev parent reply other threads:[~2007-05-24 21:47 UTC|newest]
Thread overview: 17+ messages / expand[flat|nested] mbox.gz Atom feed top
2007-05-23 19:15 [PATCH 1/4] AFS: Add TestSetPageError() David Howells
2007-05-23 19:15 ` [PATCH 2/4] AFS: Add a function to excise a rejected write from the pagecache David Howells
2007-05-24 20:38 ` Andrew Morton
2007-05-24 21:35 ` David Howells
2007-05-24 21:47 ` Andrew Morton [this message]
2007-05-24 22:34 ` David Howells
2007-05-24 22:46 ` Andrew Morton
2007-05-24 23:08 ` David Howells
2007-05-24 23:24 ` Andrew Morton
2007-05-24 23:37 ` David Howells
2007-05-24 22:35 ` Trond Myklebust
2007-05-24 23:18 ` David Howells
2007-05-24 23:54 ` Trond Myklebust
2007-05-30 10:35 ` David Howells
2007-05-30 17:39 ` Trond Myklebust
2007-05-23 19:15 ` [PATCH 3/4] AFS: Improve handling of a rejected writeback David Howells
2007-05-23 19:15 ` [PATCH 4/4] AFS: Implement shared-writable mmap David Howells
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=20070524144732.d9b2650b.akpm@linux-foundation.org \
--to=akpm@linux-foundation.org \
--cc=dhowells@redhat.com \
--cc=linux-kernel@vger.kernel.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