diff options
| author | Andi Kleen <ak@linux.intel.com> | 2010-10-22 11:40:48 -0400 |
|---|---|---|
| committer | Andi Kleen <ak@linux.intel.com> | 2010-10-22 11:40:48 -0400 |
| commit | 46e387bbd82d438b9131e237e6e2cb55a825da49 (patch) | |
| tree | 414948afd6b4d63c6ea8cc79ce022128bc1bf2eb /mm/rmap.c | |
| parent | e9d08567ef72a2d0fb9b14dded386352d3136442 (diff) | |
| parent | 3ef8fd7f720fc4f462fcdcae2fcde6f1c0536bfe (diff) | |
Merge branch 'hwpoison-hugepages' into hwpoison
Conflicts:
mm/memory-failure.c
Diffstat (limited to 'mm/rmap.c')
| -rw-r--r-- | mm/rmap.c | 25 |
1 files changed, 8 insertions, 17 deletions
| @@ -780,10 +780,10 @@ void page_move_anon_rmap(struct page *page, | |||
| 780 | } | 780 | } |
| 781 | 781 | ||
| 782 | /** | 782 | /** |
| 783 | * __page_set_anon_rmap - setup new anonymous rmap | 783 | * __page_set_anon_rmap - set up new anonymous rmap |
| 784 | * @page: the page to add the mapping to | 784 | * @page: Page to add to rmap |
| 785 | * @vma: the vm area in which the mapping is added | 785 | * @vma: VM area to add page to. |
| 786 | * @address: the user virtual address mapped | 786 | * @address: User virtual address of the mapping |
| 787 | * @exclusive: the page is exclusively owned by the current process | 787 | * @exclusive: the page is exclusively owned by the current process |
| 788 | */ | 788 | */ |
| 789 | static void __page_set_anon_rmap(struct page *page, | 789 | static void __page_set_anon_rmap(struct page *page, |
| @@ -793,25 +793,16 @@ static void __page_set_anon_rmap(struct page *page, | |||
| 793 | 793 | ||
| 794 | BUG_ON(!anon_vma); | 794 | BUG_ON(!anon_vma); |
| 795 | 795 | ||
| 796 | if (PageAnon(page)) | ||
| 797 | return; | ||
| 798 | |||
| 796 | /* | 799 | /* |
| 797 | * If the page isn't exclusively mapped into this vma, | 800 | * If the page isn't exclusively mapped into this vma, |
| 798 | * we must use the _oldest_ possible anon_vma for the | 801 | * we must use the _oldest_ possible anon_vma for the |
| 799 | * page mapping! | 802 | * page mapping! |
| 800 | */ | 803 | */ |
| 801 | if (!exclusive) { | 804 | if (!exclusive) |
| 802 | if (PageAnon(page)) | ||
| 803 | return; | ||
| 804 | anon_vma = anon_vma->root; | 805 | anon_vma = anon_vma->root; |
| 805 | } else { | ||
| 806 | /* | ||
| 807 | * In this case, swapped-out-but-not-discarded swap-cache | ||
| 808 | * is remapped. So, no need to update page->mapping here. | ||
| 809 | * We convice anon_vma poitned by page->mapping is not obsolete | ||
| 810 | * because vma->anon_vma is necessary to be a family of it. | ||
| 811 | */ | ||
| 812 | if (PageAnon(page)) | ||
| 813 | return; | ||
| 814 | } | ||
| 815 | 806 | ||
| 816 | anon_vma = (void *) anon_vma + PAGE_MAPPING_ANON; | 807 | anon_vma = (void *) anon_vma + PAGE_MAPPING_ANON; |
| 817 | page->mapping = (struct address_space *) anon_vma; | 808 | page->mapping = (struct address_space *) anon_vma; |
