mm: remove flags argument to mmap_region
After the MAP_POPULATE handling has been moved to mmap_region() call sites, the only remaining use of the flags argument is to pass the MAP_NORESERVE flag. This can be just as easily handled by do_mmap_pgoff(), so do that and remove the mmap_region() flags parameter. [akpm@linux-foundation.org: remove double parens] Signed-off-by: Michel Lespinasse <walken@google.com> Acked-by: Rik van Riel <riel@redhat.com> Tested-by: Andy Lutomirski <luto@amacapital.net> Cc: Greg Ungerer <gregungerer@westnet.com.au> Cc: David Howells <dhowells@redhat.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:
Родитель
81909b8421
Коммит
c22c0d6344
|
@ -130,7 +130,6 @@ int arch_setup_additional_pages(struct linux_binprm *bprm,
|
|||
if (!retval) {
|
||||
unsigned long addr = MEM_USER_INTRPT;
|
||||
addr = mmap_region(NULL, addr, INTRPT_SIZE,
|
||||
MAP_FIXED|MAP_ANONYMOUS|MAP_PRIVATE,
|
||||
VM_READ|VM_EXEC|
|
||||
VM_MAYREAD|VM_MAYWRITE|VM_MAYEXEC, 0);
|
||||
if (addr > (unsigned long) -PAGE_SIZE)
|
||||
|
|
|
@ -1472,8 +1472,7 @@ extern int install_special_mapping(struct mm_struct *mm,
|
|||
extern unsigned long get_unmapped_area(struct file *, unsigned long, unsigned long, unsigned long, unsigned long);
|
||||
|
||||
extern unsigned long mmap_region(struct file *file, unsigned long addr,
|
||||
unsigned long len, unsigned long flags,
|
||||
vm_flags_t vm_flags, unsigned long pgoff);
|
||||
unsigned long len, vm_flags_t vm_flags, unsigned long pgoff);
|
||||
extern unsigned long do_mmap_pgoff(struct file *file, unsigned long addr,
|
||||
unsigned long len, unsigned long prot, unsigned long flags,
|
||||
unsigned long pgoff, bool *populate);
|
||||
|
|
|
@ -204,9 +204,8 @@ get_write_lock:
|
|||
unsigned long addr;
|
||||
struct file *file = get_file(vma->vm_file);
|
||||
|
||||
flags = (flags & MAP_NONBLOCK) | MAP_POPULATE;
|
||||
addr = mmap_region(file, start, size,
|
||||
flags, vma->vm_flags, pgoff);
|
||||
vma->vm_flags, pgoff);
|
||||
fput(file);
|
||||
if (IS_ERR_VALUE(addr)) {
|
||||
err = addr;
|
||||
|
|
33
mm/mmap.c
33
mm/mmap.c
|
@ -1291,7 +1291,21 @@ unsigned long do_mmap_pgoff(struct file *file, unsigned long addr,
|
|||
}
|
||||
}
|
||||
|
||||
addr = mmap_region(file, addr, len, flags, vm_flags, pgoff);
|
||||
/*
|
||||
* Set 'VM_NORESERVE' if we should not account for the
|
||||
* memory use of this mapping.
|
||||
*/
|
||||
if (flags & MAP_NORESERVE) {
|
||||
/* We honor MAP_NORESERVE if allowed to overcommit */
|
||||
if (sysctl_overcommit_memory != OVERCOMMIT_NEVER)
|
||||
vm_flags |= VM_NORESERVE;
|
||||
|
||||
/* hugetlb applies strict overcommit unless MAP_NORESERVE */
|
||||
if (file && is_file_hugepages(file))
|
||||
vm_flags |= VM_NORESERVE;
|
||||
}
|
||||
|
||||
addr = mmap_region(file, addr, len, vm_flags, pgoff);
|
||||
if (!IS_ERR_VALUE(addr) &&
|
||||
((vm_flags & VM_LOCKED) ||
|
||||
(flags & (MAP_POPULATE | MAP_NONBLOCK)) == MAP_POPULATE))
|
||||
|
@ -1411,8 +1425,7 @@ static inline int accountable_mapping(struct file *file, vm_flags_t vm_flags)
|
|||
}
|
||||
|
||||
unsigned long mmap_region(struct file *file, unsigned long addr,
|
||||
unsigned long len, unsigned long flags,
|
||||
vm_flags_t vm_flags, unsigned long pgoff)
|
||||
unsigned long len, vm_flags_t vm_flags, unsigned long pgoff)
|
||||
{
|
||||
struct mm_struct *mm = current->mm;
|
||||
struct vm_area_struct *vma, *prev;
|
||||
|
@ -1435,20 +1448,6 @@ munmap_back:
|
|||
if (!may_expand_vm(mm, len >> PAGE_SHIFT))
|
||||
return -ENOMEM;
|
||||
|
||||
/*
|
||||
* Set 'VM_NORESERVE' if we should not account for the
|
||||
* memory use of this mapping.
|
||||
*/
|
||||
if ((flags & MAP_NORESERVE)) {
|
||||
/* We honor MAP_NORESERVE if allowed to overcommit */
|
||||
if (sysctl_overcommit_memory != OVERCOMMIT_NEVER)
|
||||
vm_flags |= VM_NORESERVE;
|
||||
|
||||
/* hugetlb applies strict overcommit unless MAP_NORESERVE */
|
||||
if (file && is_file_hugepages(file))
|
||||
vm_flags |= VM_NORESERVE;
|
||||
}
|
||||
|
||||
/*
|
||||
* Private writable mapping: check memory availability
|
||||
*/
|
||||
|
|
Загрузка…
Ссылка в новой задаче