From: Linus Torvalds <torvalds@linux-foundation.org>
To: Peter Zijlstra <a.p.zijlstra@chello.nl>
Cc: Hugh Dickins <hugh@veritas.com>, Nick Piggin <npiggin@suse.de>,
Linux Memory Management List <linux-mm@kvack.org>
Subject: Re: [patch] mm: fix anon_vma races
Date: Sun, 19 Oct 2008 11:25:03 -0700 (PDT) [thread overview]
Message-ID: <alpine.LFD.2.00.0810191105090.4386@nehalem.linux-foundation.org> (raw)
In-Reply-To: <1224413500.10548.55.camel@lappy.programming.kicks-ass.net>
On Sun, 19 Oct 2008, Peter Zijlstra wrote:
>
> Part of the confusion is that we don't clear those pointers at the end
> of their lifetimes (page_remove_rmap and anon_vma_unlink).
>
> I guess the !page_mapping() test in page_lock_anon_vma() is meant to
> deal with this
Hmm. So that part I'm still not entirely convinced about.
The thing is, we have two issues on anon_vma usage, and the
page_lock_anon_vma() usage in particular:
- the integrity of the list itself
Here it should be sufficient to just always get the lock, to the point
where we don't need to care about anything else. So getting the lock
properly on new allocation makes all the other races irrelevant.
- the integrity of the _result_ of traversing the list
This is what the !page_mapping() thing is supposedly protecting
against, I think.
But as far as I can tell, there's really two different use cases here:
(a) people who care deeply about the result and (b) people who don't.
And the difference between the two cases is whether they had the page
locked or not. The "try_to_unmap()" callers care deeply, and lock the
page. In contrast, some "page_referenced()" callers (really just
shrink_active_list) don't care deeply, and to them the return value is
really just a heuristic.
As far as I can tell, all the people who care deeply will lock the page
(and _have_ to lock the page), and thus 'page->mapping' should be stable
for those cases.
And then we have the other cases, who just want a heuristic, and they
don't hold the page lock, but if we look at the wrong active_vma that has
gotten reallocated to something else, they don't even really care.
So I'm not seeing the reason for that check for page_mapped() at the end.
Does it actually protect against anything relevant?
Anyway, I _think_ the part that everybody agrees about is the initial
locking of the anon_vma. Whether we then even need any memory barriers
and/or the page_mapped() check is an independent question. Yes? No?
So I'm suggesting this commit as the part we at least all agree on. But I
haven't pushed it out yet, so you can still holler.. But I think all the
discussion is about other issues, and we all agree on at least this part?
Linus
---
next prev parent reply other threads:[~2008-10-19 18:25 UTC|newest]
Thread overview: 52+ messages / expand[flat|nested] mbox.gz Atom feed top
2008-10-16 4:10 Nick Piggin
2008-10-17 22:14 ` Hugh Dickins
2008-10-17 23:05 ` Linus Torvalds
2008-10-18 0:13 ` Hugh Dickins
2008-10-18 0:25 ` Linus Torvalds
2008-10-18 1:53 ` Nick Piggin
2008-10-18 2:50 ` Paul Mackerras
2008-10-18 2:57 ` Linus Torvalds
2008-10-18 5:49 ` Nick Piggin
2008-10-18 10:49 ` Paul Mackerras
2008-10-18 17:00 ` Linus Torvalds
2008-10-18 18:44 ` Matthew Wilcox
2008-10-19 2:54 ` Nick Piggin
2008-10-19 2:53 ` Nick Piggin
2008-10-17 23:13 ` Peter Zijlstra
2008-10-17 23:53 ` Linus Torvalds
2008-10-18 0:42 ` Linus Torvalds
2008-10-18 1:08 ` Linus Torvalds
2008-10-18 1:32 ` Nick Piggin
2008-10-18 2:11 ` Linus Torvalds
2008-10-18 2:25 ` Nick Piggin
2008-10-18 2:35 ` Nick Piggin
2008-10-18 2:53 ` Linus Torvalds
2008-10-18 5:20 ` Nick Piggin
2008-10-18 10:38 ` Peter Zijlstra
2008-10-19 9:52 ` Hugh Dickins
2008-10-19 10:51 ` Peter Zijlstra
2008-10-19 12:39 ` Hugh Dickins
2008-10-19 18:25 ` Linus Torvalds [this message]
2008-10-19 18:45 ` Peter Zijlstra
2008-10-19 19:00 ` Hugh Dickins
2008-10-20 4:03 ` Hugh Dickins
2008-10-20 15:17 ` Linus Torvalds
2008-10-20 18:21 ` Hugh Dickins
2008-10-21 2:56 ` Nick Piggin
2008-10-21 3:25 ` Linus Torvalds
2008-10-21 4:33 ` Nick Piggin
2008-10-21 12:58 ` Hugh Dickins
2008-10-21 15:59 ` Christoph Lameter
2008-10-22 9:29 ` Nick Piggin
2008-10-21 4:34 ` Nick Piggin
2008-10-21 13:55 ` Hugh Dickins
2008-10-21 2:44 ` Nick Piggin
2008-10-18 19:14 ` Hugh Dickins
2008-10-19 3:03 ` Nick Piggin
2008-10-19 7:07 ` Hugh Dickins
2008-10-20 3:26 ` Hugh Dickins
2008-10-21 2:45 ` Nick Piggin
2008-10-19 1:13 ` Hugh Dickins
2008-10-19 2:41 ` Nick Piggin
2008-10-19 9:45 ` Hugh Dickins
2008-10-21 3:59 ` Nick Piggin
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=alpine.LFD.2.00.0810191105090.4386@nehalem.linux-foundation.org \
--to=torvalds@linux-foundation.org \
--cc=a.p.zijlstra@chello.nl \
--cc=hugh@veritas.com \
--cc=linux-mm@kvack.org \
--cc=npiggin@suse.de \
/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