Messages in this thread | | | Date | Fri, 27 Jul 2012 11:02:43 +0200 | From | Michal Hocko <> | Subject | Re: [PATCH -alternative] mm: hugetlbfs: Close race during teardown of hugetlbfs shared page tables V2 (resend) |
| |
On Thu 26-07-12 14:31:50, Rik van Riel wrote: > On 07/20/2012 10:36 AM, Michal Hocko wrote: > > >--- a/arch/x86/mm/hugetlbpage.c > >+++ b/arch/x86/mm/hugetlbpage.c > >@@ -81,7 +81,12 @@ static void huge_pmd_share(struct mm_struct *mm, unsigned long addr, pud_t *pud) > > if (saddr) { > > spte = huge_pte_offset(svma->vm_mm, saddr); > > if (spte) { > >- get_page(virt_to_page(spte)); > >+ struct page *spte_page = virt_to_page(spte); > >+ if (!is_hugetlb_pmd_page_valid(spte_page)) { > > What prevents somebody else from marking the hugetlb > pmd invalid, between here... > > >+ spte = NULL; > >+ continue; > >+ } > > ... and here?
huge_ptep_get_and_clear is (should be) called inside i_mmap which is not the case right now as Mel already pointed out in other email
-- Michal Hocko SUSE Labs
| |