diff options
Diffstat (limited to 'mm/fremap.c')
| -rw-r--r-- | mm/fremap.c | 12 |
1 files changed, 2 insertions, 10 deletions
diff --git a/mm/fremap.c b/mm/fremap.c index 4723ac8d2fc2..87da3590c61e 100644 --- a/mm/fremap.c +++ b/mm/fremap.c | |||
| @@ -204,10 +204,8 @@ get_write_lock: | |||
| 204 | unsigned long addr; | 204 | unsigned long addr; |
| 205 | struct file *file = get_file(vma->vm_file); | 205 | struct file *file = get_file(vma->vm_file); |
| 206 | 206 | ||
| 207 | vm_flags = vma->vm_flags; | 207 | addr = mmap_region(file, start, size, |
| 208 | if (!(flags & MAP_NONBLOCK)) | 208 | vma->vm_flags, pgoff); |
| 209 | vm_flags |= VM_POPULATE; | ||
| 210 | addr = mmap_region(file, start, size, vm_flags, pgoff); | ||
| 211 | fput(file); | 209 | fput(file); |
| 212 | if (IS_ERR_VALUE(addr)) { | 210 | if (IS_ERR_VALUE(addr)) { |
| 213 | err = addr; | 211 | err = addr; |
| @@ -226,12 +224,6 @@ get_write_lock: | |||
| 226 | mutex_unlock(&mapping->i_mmap_mutex); | 224 | mutex_unlock(&mapping->i_mmap_mutex); |
| 227 | } | 225 | } |
| 228 | 226 | ||
| 229 | if (!(flags & MAP_NONBLOCK) && !(vma->vm_flags & VM_POPULATE)) { | ||
| 230 | if (!has_write_lock) | ||
| 231 | goto get_write_lock; | ||
| 232 | vma->vm_flags |= VM_POPULATE; | ||
| 233 | } | ||
| 234 | |||
| 235 | if (vma->vm_flags & VM_LOCKED) { | 227 | if (vma->vm_flags & VM_LOCKED) { |
| 236 | /* | 228 | /* |
| 237 | * drop PG_Mlocked flag for over-mapped range | 229 | * drop PG_Mlocked flag for over-mapped range |
