diff options
Diffstat (limited to 'fs/hugetlbfs/inode.c')
-rw-r--r-- | fs/hugetlbfs/inode.c | 4 |
1 files changed, 1 insertions, 3 deletions
diff --git a/fs/hugetlbfs/inode.c b/fs/hugetlbfs/inode.c index 6449cb697967..c3920c96dadf 100644 --- a/fs/hugetlbfs/inode.c +++ b/fs/hugetlbfs/inode.c | |||
@@ -83,8 +83,6 @@ static int hugetlbfs_file_mmap(struct file *file, struct vm_area_struct *vma) | |||
83 | 83 | ||
84 | ret = -ENOMEM; | 84 | ret = -ENOMEM; |
85 | len = vma_len + ((loff_t)vma->vm_pgoff << PAGE_SHIFT); | 85 | len = vma_len + ((loff_t)vma->vm_pgoff << PAGE_SHIFT); |
86 | if (!(vma->vm_flags & VM_WRITE) && len > inode->i_size) | ||
87 | goto out; | ||
88 | 86 | ||
89 | if (vma->vm_flags & VM_MAYSHARE && | 87 | if (vma->vm_flags & VM_MAYSHARE && |
90 | hugetlb_reserve_pages(inode, vma->vm_pgoff >> (HPAGE_SHIFT-PAGE_SHIFT), | 88 | hugetlb_reserve_pages(inode, vma->vm_pgoff >> (HPAGE_SHIFT-PAGE_SHIFT), |
@@ -93,7 +91,7 @@ static int hugetlbfs_file_mmap(struct file *file, struct vm_area_struct *vma) | |||
93 | 91 | ||
94 | ret = 0; | 92 | ret = 0; |
95 | hugetlb_prefault_arch_hook(vma->vm_mm); | 93 | hugetlb_prefault_arch_hook(vma->vm_mm); |
96 | if (inode->i_size < len) | 94 | if (vma->vm_flags & VM_WRITE && inode->i_size < len) |
97 | inode->i_size = len; | 95 | inode->i_size = len; |
98 | out: | 96 | out: |
99 | mutex_unlock(&inode->i_mutex); | 97 | mutex_unlock(&inode->i_mutex); |