|
@@ -40,14 +40,13 @@ asmlinkage int sys_pipe(unsigned long __user * fildes)
|
|
|
return error;
|
|
|
}
|
|
|
|
|
|
-/* common code for old and new mmaps */
|
|
|
-static inline long do_mmap2(
|
|
|
- unsigned long addr, unsigned long len,
|
|
|
- unsigned long prot, unsigned long flags,
|
|
|
- unsigned long fd, unsigned long pgoff)
|
|
|
+asmlinkage long sys_mmap2(unsigned long addr, unsigned long len,
|
|
|
+ unsigned long prot, unsigned long flags,
|
|
|
+ unsigned long fd, unsigned long pgoff)
|
|
|
{
|
|
|
int error = -EBADF;
|
|
|
- struct file * file = NULL;
|
|
|
+ struct file *file = NULL;
|
|
|
+ struct mm_struct *mm = current->mm;
|
|
|
|
|
|
flags &= ~(MAP_EXECUTABLE | MAP_DENYWRITE);
|
|
|
if (!(flags & MAP_ANONYMOUS)) {
|
|
@@ -56,9 +55,9 @@ static inline long do_mmap2(
|
|
|
goto out;
|
|
|
}
|
|
|
|
|
|
- down_write(¤t->mm->mmap_sem);
|
|
|
+ down_write(&mm->mmap_sem);
|
|
|
error = do_mmap_pgoff(file, addr, len, prot, flags, pgoff);
|
|
|
- up_write(¤t->mm->mmap_sem);
|
|
|
+ up_write(&mm->mmap_sem);
|
|
|
|
|
|
if (file)
|
|
|
fput(file);
|
|
@@ -66,13 +65,6 @@ out:
|
|
|
return error;
|
|
|
}
|
|
|
|
|
|
-asmlinkage long sys_mmap2(unsigned long addr, unsigned long len,
|
|
|
- unsigned long prot, unsigned long flags,
|
|
|
- unsigned long fd, unsigned long pgoff)
|
|
|
-{
|
|
|
- return do_mmap2(addr, len, prot, flags, fd, pgoff);
|
|
|
-}
|
|
|
-
|
|
|
/*
|
|
|
* Perform the select(nd, in, out, ex, tv) and mmap() system
|
|
|
* calls. Linux/i386 didn't use to be able to handle more than
|
|
@@ -101,7 +93,8 @@ asmlinkage int old_mmap(struct mmap_arg_struct __user *arg)
|
|
|
if (a.offset & ~PAGE_MASK)
|
|
|
goto out;
|
|
|
|
|
|
- err = do_mmap2(a.addr, a.len, a.prot, a.flags, a.fd, a.offset >> PAGE_SHIFT);
|
|
|
+ err = sys_mmap2(a.addr, a.len, a.prot, a.flags,
|
|
|
+ a.fd, a.offset >> PAGE_SHIFT);
|
|
|
out:
|
|
|
return err;
|
|
|
}
|