mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-11-25 13:14:07 +08:00
mmap_region: cleanup the final vma_merge() related code
It is not easy to actually understand the "if (!file || !vma_merge())" code, turn it into "if (file && vma_merge())". This makes immediately obvious that the subsequent "if (file)" is superfluous. As Hugh Dickins pointed out, we can also factor out the ->i_writecount corrections, and add a small comment about that. Signed-off-by: Oleg Nesterov <oleg@tv-sign.ru> Cc: Miklos Szeredi <miklos@szeredi.hu> Cc: Hugh Dickins <hugh@veritas.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:
parent
0dd1334faf
commit
4d3d5b41a7
23
mm/mmap.c
23
mm/mmap.c
@ -1068,7 +1068,6 @@ int vma_wants_writenotify(struct vm_area_struct *vma)
|
||||
mapping_cap_account_dirty(vma->vm_file->f_mapping);
|
||||
}
|
||||
|
||||
|
||||
unsigned long mmap_region(struct file *file, unsigned long addr,
|
||||
unsigned long len, unsigned long flags,
|
||||
unsigned int vm_flags, unsigned long pgoff,
|
||||
@ -1181,22 +1180,20 @@ munmap_back:
|
||||
if (vma_wants_writenotify(vma))
|
||||
vma->vm_page_prot = vm_get_page_prot(vm_flags & ~VM_SHARED);
|
||||
|
||||
if (!file || !vma_merge(mm, prev, addr, vma->vm_end,
|
||||
if (file && vma_merge(mm, prev, addr, vma->vm_end,
|
||||
vma->vm_flags, NULL, file, pgoff, vma_policy(vma))) {
|
||||
file = vma->vm_file;
|
||||
vma_link(mm, vma, prev, rb_link, rb_parent);
|
||||
if (correct_wcount)
|
||||
atomic_inc(&inode->i_writecount);
|
||||
} else {
|
||||
if (file) {
|
||||
if (correct_wcount)
|
||||
atomic_inc(&inode->i_writecount);
|
||||
fput(file);
|
||||
}
|
||||
mpol_free(vma_policy(vma));
|
||||
kmem_cache_free(vm_area_cachep, vma);
|
||||
fput(file);
|
||||
} else {
|
||||
vma_link(mm, vma, prev, rb_link, rb_parent);
|
||||
file = vma->vm_file;
|
||||
}
|
||||
out:
|
||||
|
||||
/* Once vma denies write, undo our temporary denial count */
|
||||
if (correct_wcount)
|
||||
atomic_inc(&inode->i_writecount);
|
||||
out:
|
||||
mm->total_vm += len >> PAGE_SHIFT;
|
||||
vm_stat_account(mm, vm_flags, file, len >> PAGE_SHIFT);
|
||||
if (vm_flags & VM_LOCKED) {
|
||||
|
Loading…
Reference in New Issue
Block a user