On Fri 22-03-13 16:23:52, Naoya Horiguchi wrote: [...] > --- v3.9-rc3.orig/mm/mempolicy.c > +++ v3.9-rc3/mm/mempolicy.c > @@ -1173,6 +1173,8 @@ static struct page *new_vma_page(struct page *page, > unsigned long private, int * > vma = vma->vm_next; > } > > + if (PageHuge(page)) > + return alloc_huge_page(vma, address, 1); > /* > * if !vma, alloc_page_vma() will use task or system default policy > */ [...] > diff --git v3.9-rc3.orig/mm/migrate.c v3.9-rc3/mm/migrate.c > index ef8e4e3..e64cd55 100644 > --- v3.9-rc3.orig/mm/migrate.c > +++ v3.9-rc3/mm/migrate.c > @@ -951,7 +951,12 @@ static int unmap_and_move_huge_page(new_page_t > get_new_page, > struct page *new_hpage = get_new_page(hpage, private, &result); > struct anon_vma *anon_vma = NULL; > > - if (!new_hpage) > + /* > + * Getting a new hugepage with alloc_huge_page() (which can happen > + * when migration is caused by mbind()) can return ERR_PTR value, > + * so we need take care of the case here. > + */ > + if (!new_hpage || IS_ERR_VALUE(new_hpage)) > return -ENOMEM;
Please no. get_new_page returns NULL or a page. You are hooking a wrong callback here. The error value doesn't make any sense here. IMO you should just wrap alloc_huge_page by something that returns NULL or page. > > rc = -EAGAIN; -- Michal Hocko SUSE Labs -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/