From: Adam Litke I discovered that 2.6.21-rc5-mm1 was oopsing my box when running the libhugetlbfs test suite. The trouble led me once again to shm stacked files ;-) The stacked mmap function is labeling the lack of a ->fault() vm_op a BUG() which is probably a good idea. It isn't really a problem for hugetlbfs though, since our faults are handled by an explicit hook in __handle_mm_fault(). Rather than removing the BUG(), just convert the hugetlbfs ->nopage() placeholder to a ->fault() one which helps us get one step closer to removing the nopage vm_op anyway. Signed-off-by: Adam Litke Acked-by: Nick Piggin Acked-by: Bill Irwin Signed-off-by: Andrew Morton --- mm/hugetlb.c | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff -puN mm/hugetlb.c~convert-hugetlbfs-to-use-vm_ops-fault mm/hugetlb.c --- a/mm/hugetlb.c~convert-hugetlbfs-to-use-vm_ops-fault +++ a/mm/hugetlb.c @@ -287,20 +287,19 @@ unsigned long hugetlb_total_pages(void) } /* - * We cannot handle pagefaults against hugetlb pages at all. They cause - * handle_mm_fault() to try to instantiate regular-sized pages in the - * hugegpage VMA. do_page_fault() is supposed to trap this, so BUG is we get - * this far. + * Hugetlb faults are serviced in __handle_mm_fault by explicitly calling + * hugetlb_fault. Therefore the vm_ops->fault() op for hugetlb pages + * should never be called. */ -static struct page *hugetlb_nopage(struct vm_area_struct *vma, - unsigned long address, int *unused) +static struct page *hugetlb_vm_op_fault(struct vm_area_struct *vma, + struct fault_data *fdata) { BUG(); return NULL; } struct vm_operations_struct hugetlb_vm_ops = { - .nopage = hugetlb_nopage, + .fault = hugetlb_vm_op_fault, }; static pte_t make_huge_pte(struct vm_area_struct *vma, struct page *page, _