hugetlb: wrap hugetlb_prefault with prefault_key()
PATCH 4/11 hugetlb: wrap hugetlb_prefault with prefault_key()
This wraps hugetlb_prefault() with prefault_key() in order to isolate the dependency on inodes for prefaulting the hugetlb vma.
hugetlbpage.c | 12 ++++++++---- 1 files changed, 8 insertions(+), 4 deletions(-)
arch/i386/mm/hugetlbpage.c +8 -4
@@ -350,12 +350,18 @@ static int check_size_prot(struct inodereturn 0 ; } +static int prefault_key (struct hugetlb_key *key,struct vm_area_struct *vma) +{ +struct inode *inode = (struct inode *)key; + +return hugetlb_prefault (inode->i_mapping, vma); +} +static int alloc_shared_hugetlb_pages (int key,unsigned long addr,unsigned long len,int prot,int flag) {struct mm_struct *mm = current->mm;struct vm_area_struct *vma;struct inode *inode; -struct address_space *mapping;int retval = -ENOMEM ;int newalloc =0 ;
@@ -367,8 +373,6 @@ static int alloc_shared_hugetlb_pages(in }else spin_unlock (&htlbpage_lock); - mapping = inode->i_mapping; - addr =do_mmap_pgoff (NULL , addr, len, (unsigned long ) prot,MAP_NORESERVE |MAP_FIXED |MAP_PRIVATE |MAP_ANONYMOUS ,0 );if (IS_ERR ((void *) addr))
@@ -380,7 +384,7 @@ static int alloc_shared_hugetlb_pages(in goto freeinode; } - retval =hugetlb_prefault (mapping, vma); + retval =prefault_key ((struct hugetlb_key *)inode, vma);if (retval) goto out;