git.openpandora.org
/
pandora-kernel.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
rmap: remove anon_vma check in page_address_in_vma()
[pandora-kernel.git]
/
mm
/
rmap.c
diff --git
a/mm/rmap.c
b/mm/rmap.c
index
526704e
..
0feeef8
100644
(file)
--- a/
mm/rmap.c
+++ b/
mm/rmap.c
@@
-133,8
+133,8
@@
int anon_vma_prepare(struct vm_area_struct *vma)
goto out_enomem_free_avc;
allocated = anon_vma;
}
goto out_enomem_free_avc;
allocated = anon_vma;
}
- spin_lock(&anon_vma->lock);
+ spin_lock(&anon_vma->lock);
/* page_table_lock to protect against threads */
spin_lock(&mm->page_table_lock);
if (likely(!vma->anon_vma)) {
/* page_table_lock to protect against threads */
spin_lock(&mm->page_table_lock);
if (likely(!vma->anon_vma)) {
@@
-144,14
+144,15
@@
int anon_vma_prepare(struct vm_area_struct *vma)
list_add(&avc->same_vma, &vma->anon_vma_chain);
list_add(&avc->same_anon_vma, &anon_vma->head);
allocated = NULL;
list_add(&avc->same_vma, &vma->anon_vma_chain);
list_add(&avc->same_anon_vma, &anon_vma->head);
allocated = NULL;
+ avc = NULL;
}
spin_unlock(&mm->page_table_lock);
}
spin_unlock(&mm->page_table_lock);
-
spin_unlock(&anon_vma->lock);
spin_unlock(&anon_vma->lock);
- if (unlikely(allocated)) {
+
+ if (unlikely(allocated))
anon_vma_free(allocated);
anon_vma_free(allocated);
+ if (unlikely(avc))
anon_vma_chain_free(avc);
anon_vma_chain_free(avc);
- }
}
return 0;
}
return 0;
@@
-335,14
+336,13
@@
vma_address(struct page *page, struct vm_area_struct *vma)
/*
* At what user virtual address is page expected in vma?
/*
* At what user virtual address is page expected in vma?
- *
checking that the page matches
the vma.
+ *
Caller should check the page is actually part of
the vma.
*/
unsigned long page_address_in_vma(struct page *page, struct vm_area_struct *vma)
{
*/
unsigned long page_address_in_vma(struct page *page, struct vm_area_struct *vma)
{
- if (PageAnon(page)) {
- if (vma->anon_vma != page_anon_vma(page))
- return -EFAULT;
- } else if (page->mapping && !(vma->vm_flags & VM_NONLINEAR)) {
+ if (PageAnon(page))
+ ;
+ else if (page->mapping && !(vma->vm_flags & VM_NONLINEAR)) {
if (!vma->vm_file ||
vma->vm_file->f_mapping != page->mapping)
return -EFAULT;
if (!vma->vm_file ||
vma->vm_file->f_mapping != page->mapping)
return -EFAULT;