diff --git a/mm/rmap.c b/mm/rmap.c index beb191abde219e78b7222b76f859873212cd6be2..738e07ee35345f300a241141899e45c331df88dc 100644 --- a/mm/rmap.c +++ b/mm/rmap.c @@ -701,11 +701,11 @@ unsigned long page_address_in_vma(struct page *page, struct vm_area_struct *vma) if (!vma->anon_vma || !page__anon_vma || vma->anon_vma->root != page__anon_vma->root) return -EFAULT; - } else if (page->mapping) { - if (!vma->vm_file || vma->vm_file->f_mapping != page->mapping) - return -EFAULT; - } else + } else if (!vma->vm_file) { + return -EFAULT; + } else if (vma->vm_file->f_mapping != compound_head(page)->mapping) { return -EFAULT; + } return vma_address(page, vma); }