diff options
Diffstat (limited to 'mm/fremap.c')
| -rw-r--r-- | mm/fremap.c | 17 | 
1 files changed, 5 insertions, 12 deletions
diff --git a/mm/fremap.c b/mm/fremap.c index 0cd4c11488e..87da3590c61 100644 --- a/mm/fremap.c +++ b/mm/fremap.c @@ -129,7 +129,7 @@ SYSCALL_DEFINE5(remap_file_pages, unsigned long, start, unsigned long, size,  	struct vm_area_struct *vma;  	int err = -EINVAL;  	int has_write_lock = 0; -	vm_flags_t vm_flags; +	vm_flags_t vm_flags = 0;  	if (prot)  		return err; @@ -204,10 +204,8 @@ get_write_lock:  			unsigned long addr;  			struct file *file = get_file(vma->vm_file); -			vm_flags = vma->vm_flags; -			if (!(flags & MAP_NONBLOCK)) -				vm_flags |= VM_POPULATE; -			addr = mmap_region(file, start, size, vm_flags, pgoff); +			addr = mmap_region(file, start, size, +					vma->vm_flags, pgoff);  			fput(file);  			if (IS_ERR_VALUE(addr)) {  				err = addr; @@ -226,12 +224,6 @@ get_write_lock:  		mutex_unlock(&mapping->i_mmap_mutex);  	} -	if (!(flags & MAP_NONBLOCK) && !(vma->vm_flags & VM_POPULATE)) { -		if (!has_write_lock) -			goto get_write_lock; -		vma->vm_flags |= VM_POPULATE; -	} -  	if (vma->vm_flags & VM_LOCKED) {  		/*  		 * drop PG_Mlocked flag for over-mapped range @@ -254,7 +246,8 @@ get_write_lock:  	 */  out: -	vm_flags = vma->vm_flags; +	if (vma) +		vm_flags = vma->vm_flags;  	if (likely(!has_write_lock))  		up_read(&mm->mmap_sem);  	else  |