|
@@ -894,14 +894,11 @@ unsigned long do_mmap_pgoff(struct file * file, unsigned long addr,
|
|
|
unsigned long flags, unsigned long pgoff)
|
|
|
{
|
|
|
struct mm_struct * mm = current->mm;
|
|
|
- struct vm_area_struct * vma, * prev;
|
|
|
struct inode *inode;
|
|
|
unsigned int vm_flags;
|
|
|
- int correct_wcount = 0;
|
|
|
int error;
|
|
|
- struct rb_node ** rb_link, * rb_parent;
|
|
|
int accountable = 1;
|
|
|
- unsigned long charged = 0, reqprot = prot;
|
|
|
+ unsigned long reqprot = prot;
|
|
|
|
|
|
/*
|
|
|
* Does the application expect PROT_READ to imply PROT_EXEC?
|
|
@@ -1027,6 +1024,24 @@ unsigned long do_mmap_pgoff(struct file * file, unsigned long addr,
|
|
|
if (error)
|
|
|
return error;
|
|
|
|
|
|
+ return mmap_region(file, addr, len, flags, vm_flags, pgoff,
|
|
|
+ accountable);
|
|
|
+}
|
|
|
+EXPORT_SYMBOL(do_mmap_pgoff);
|
|
|
+
|
|
|
+unsigned long mmap_region(struct file *file, unsigned long addr,
|
|
|
+ unsigned long len, unsigned long flags,
|
|
|
+ unsigned int vm_flags, unsigned long pgoff,
|
|
|
+ int accountable)
|
|
|
+{
|
|
|
+ struct mm_struct *mm = current->mm;
|
|
|
+ struct vm_area_struct *vma, *prev;
|
|
|
+ int correct_wcount = 0;
|
|
|
+ int error;
|
|
|
+ struct rb_node **rb_link, *rb_parent;
|
|
|
+ unsigned long charged = 0;
|
|
|
+ struct inode *inode = file ? file->f_path.dentry->d_inode : NULL;
|
|
|
+
|
|
|
/* Clear old maps */
|
|
|
error = -ENOMEM;
|
|
|
munmap_back:
|
|
@@ -1175,8 +1190,6 @@ unacct_error:
|
|
|
return error;
|
|
|
}
|
|
|
|
|
|
-EXPORT_SYMBOL(do_mmap_pgoff);
|
|
|
-
|
|
|
/* Get an address range which is currently unmapped.
|
|
|
* For shmat() with addr=0.
|
|
|
*
|