On Tue, Sep 08, 2020 at 08:55:29PM +0100, Matthew Wilcox (Oracle) wrote: > A compound page in the page cache will not necessarily be of PMD size, > so check explicitly. > > Signed-off-by: Matthew Wilcox (Oracle) <willy@xxxxxxxxxxxxx> > --- > mm/memory.c | 7 ++++--- > 1 file changed, 4 insertions(+), 3 deletions(-) > > diff --git a/mm/memory.c b/mm/memory.c > index 602f4283122f..4b35b4e71e64 100644 > --- a/mm/memory.c > +++ b/mm/memory.c > @@ -3562,13 +3562,14 @@ static vm_fault_t do_set_pmd(struct vm_fault *vmf, struct page *page) > unsigned long haddr = vmf->address & HPAGE_PMD_MASK; > pmd_t entry; > int i; > - vm_fault_t ret; > + vm_fault_t ret = VM_FAULT_FALLBACK; > > if (!transhuge_vma_suitable(vma, haddr)) > - return VM_FAULT_FALLBACK; > + return ret; > > - ret = VM_FAULT_FALLBACK; > page = compound_head(page); > + if (page_order(page) != HPAGE_PMD_ORDER) > + return ret; Maybe also VM_BUG_ON_PAGE(page_order(page) > HPAGE_PMD_ORDER, page)? Just in case. > > /* > * Archs like ppc64 need additonal space to store information > -- > 2.28.0 > -- Kirill A. Shutemov