VM: add "vm_mmap()" helper function
This continues the theme started with vm_brk() and vm_munmap(): vm_mmap() does the same thing as do_mmap(), but additionally does the required VM locking. This uninlines (and rewrites it to be clearer) do_mmap(), which sadly duplicates it in mm/mmap.c and mm/nommu.c. But that way we don't have to export our internal do_mmap_pgoff() function. Some day we hopefully don't have to export do_mmap() either, if all modular users can become the simpler vm_mmap() instead. We're actually very close to that already, with the notable exception of the (broken) use in i810, and a couple of stragglers in binfmt_elf. Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:
@@ -147,10 +147,8 @@ static int map_som_binary(struct file *file,
|
||||
code_size = SOM_PAGEALIGN(hpuxhdr->exec_tsize);
|
||||
current->mm->start_code = code_start;
|
||||
current->mm->end_code = code_start + code_size;
|
||||
down_write(¤t->mm->mmap_sem);
|
||||
retval = do_mmap(file, code_start, code_size, prot,
|
||||
retval = vm_mmap(file, code_start, code_size, prot,
|
||||
flags, SOM_PAGESTART(hpuxhdr->exec_tfile));
|
||||
up_write(¤t->mm->mmap_sem);
|
||||
if (retval < 0 && retval > -1024)
|
||||
goto out;
|
||||
|
||||
@@ -158,20 +156,16 @@ static int map_som_binary(struct file *file,
|
||||
data_size = SOM_PAGEALIGN(hpuxhdr->exec_dsize);
|
||||
current->mm->start_data = data_start;
|
||||
current->mm->end_data = bss_start = data_start + data_size;
|
||||
down_write(¤t->mm->mmap_sem);
|
||||
retval = do_mmap(file, data_start, data_size,
|
||||
retval = vm_mmap(file, data_start, data_size,
|
||||
prot | PROT_WRITE, flags,
|
||||
SOM_PAGESTART(hpuxhdr->exec_dfile));
|
||||
up_write(¤t->mm->mmap_sem);
|
||||
if (retval < 0 && retval > -1024)
|
||||
goto out;
|
||||
|
||||
som_brk = bss_start + SOM_PAGEALIGN(hpuxhdr->exec_bsize);
|
||||
current->mm->start_brk = current->mm->brk = som_brk;
|
||||
down_write(¤t->mm->mmap_sem);
|
||||
retval = do_mmap(NULL, bss_start, som_brk - bss_start,
|
||||
retval = vm_mmap(NULL, bss_start, som_brk - bss_start,
|
||||
prot | PROT_WRITE, MAP_FIXED | MAP_PRIVATE, 0);
|
||||
up_write(¤t->mm->mmap_sem);
|
||||
if (retval > 0 || retval < -1024)
|
||||
retval = 0;
|
||||
out:
|
||||
|
Reference in New Issue
Block a user