[PATCH] Fix handling spurious page fault for hugetlb region
This reverts commit 3359b54c8c07338f3a863d1109b42eebccdcf379 and
replaces it with a cleaner version that is purely based on page table
operations, so that the synchronization between inode size and hugetlb
mappings becomes moot.
Signed-off-by: Hugh Dickins <hugh@veritas.com>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
diff --git a/include/linux/hugetlb.h b/include/linux/hugetlb.h
index 42cb7d70..d664330 100644
--- a/include/linux/hugetlb.h
+++ b/include/linux/hugetlb.h
@@ -25,6 +25,8 @@
unsigned long hugetlb_total_pages(void);
struct page *alloc_huge_page(void);
void free_huge_page(struct page *);
+int hugetlb_fault(struct mm_struct *mm, struct vm_area_struct *vma,
+ unsigned long address, int write_access);
extern unsigned long max_huge_pages;
extern const unsigned long hugetlb_zero, hugetlb_infinity;
@@ -99,6 +101,7 @@
do { } while (0)
#define alloc_huge_page() ({ NULL; })
#define free_huge_page(p) ({ (void)(p); BUG(); })
+#define hugetlb_fault(mm, vma, addr, write) ({ BUG(); 0; })
#ifndef HPAGE_MASK
#define HPAGE_MASK 0 /* Keep the compiler happy */
@@ -155,24 +158,11 @@
{
file->f_op = &hugetlbfs_file_operations;
}
-
-static inline int valid_hugetlb_file_off(struct vm_area_struct *vma,
- unsigned long address)
-{
- struct inode *inode = vma->vm_file->f_dentry->d_inode;
- loff_t file_off = address - vma->vm_start;
-
- file_off += (vma->vm_pgoff << PAGE_SHIFT);
-
- return (file_off < inode->i_size);
-}
-
#else /* !CONFIG_HUGETLBFS */
#define is_file_hugepages(file) 0
#define set_file_hugepages(file) BUG()
#define hugetlb_zero_setup(size) ERR_PTR(-ENOSYS)
-#define valid_hugetlb_file_off(vma, address) 0
#endif /* !CONFIG_HUGETLBFS */