summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@linux-foundation.org>2010-04-11 17:15:03 -0700
committerLinus Torvalds <torvalds@linux-foundation.org>2010-04-12 17:54:12 -0700
commit646d87b481dab4ba8301716600dfd276605b0ab0 (patch)
treed457ef34537cf91ddc91dafc4842de9f43ed9555
parent287d97ac032136724143cde8d5964b414d562ee3 (diff)
downloadlinux-646d87b481dab4ba8301716600dfd276605b0ab0.tar.gz
linux-646d87b481dab4ba8301716600dfd276605b0ab0.tar.bz2
linux-646d87b481dab4ba8301716600dfd276605b0ab0.zip
anon_vma: clone the anon_vma chain in the right order
We want to walk the chain in reverse order when cloning it, so that the order of the result chain will be the same as the order in the source chain. When we add entries to the chain, they go at the head of the chain, so we want to add the source head last. Reviewed-by: Rik van Riel <riel@redhat.com> Acked-by: Johannes Weiner <hannes@cmpxchg.org> Tested-by: Borislav Petkov <bp@alien8.de> [ "No, it still oopses" ] Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
-rw-r--r--mm/rmap.c2
1 files changed, 1 insertions, 1 deletions
diff --git a/mm/rmap.c b/mm/rmap.c
index eaa7a09eb72e..ee97d38ed7d9 100644
--- a/mm/rmap.c
+++ b/mm/rmap.c
@@ -182,7 +182,7 @@ int anon_vma_clone(struct vm_area_struct *dst, struct vm_area_struct *src)
{
struct anon_vma_chain *avc, *pavc;
- list_for_each_entry(pavc, &src->anon_vma_chain, same_vma) {
+ list_for_each_entry_reverse(pavc, &src->anon_vma_chain, same_vma) {
avc = anon_vma_chain_alloc();
if (!avc)
goto enomem_failure;