From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753313AbXCYMNH (ORCPT ); Sun, 25 Mar 2007 08:13:07 -0400 Received: (majordomo@vger.kernel.org) by vger.kernel.org id S1753350AbXCYMNH (ORCPT ); Sun, 25 Mar 2007 08:13:07 -0400 Received: from amsfep19-int.chello.nl ([62.179.120.14]:61636 "EHLO amsfep19-int.chello.nl" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1753313AbXCYMNF (ORCPT ); Sun, 25 Mar 2007 08:13:05 -0400 Subject: Re: [patch 1/3] split mmap From: Peter Zijlstra To: Miklos Szeredi Cc: akpm@linux-foundation.org, linux-kernel@vger.kernel.org, linux-mm@kvack.org In-Reply-To: References: Content-Type: text/plain Date: Sun, 25 Mar 2007 14:12:26 +0200 Message-Id: <1174824749.5149.27.camel@lappy> Mime-Version: 1.0 X-Mailer: Evolution 2.8.1 Content-Transfer-Encoding: 7bit Sender: linux-kernel-owner@vger.kernel.org X-Mailing-List: linux-kernel@vger.kernel.org On Sat, 2007-03-24 at 23:07 +0100, Miklos Szeredi wrote: > From: Miklos Szeredi > > This is a straightforward split of do_mmap_pgoff() into two functions: > > - do_mmap_pgoff() checks the parameters, and calculates the vma > flags. Then it calls > > - mmap_region(), which does the actual mapping > > Signed-off-by: Miklos Szeredi Acked-by: Peter Zijlstra > --- > > Index: linux/mm/mmap.c > =================================================================== > --- linux.orig/mm/mmap.c 2007-03-24 21:00:40.000000000 +0100 > +++ linux/mm/mmap.c 2007-03-24 22:28:52.000000000 +0100 > @@ -893,14 +893,11 @@ unsigned long do_mmap_pgoff(struct file > 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? > @@ -1025,7 +1022,25 @@ unsigned long do_mmap_pgoff(struct file > error = security_file_mmap(file, reqprot, prot, flags); > 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: > @@ -1174,8 +1189,6 @@ unacct_error: > return error; > } > > -EXPORT_SYMBOL(do_mmap_pgoff); > - > /* Get an address range which is currently unmapped. > * For shmat() with addr=0. > * > Index: linux/include/linux/mm.h > =================================================================== > --- linux.orig/include/linux/mm.h 2007-03-24 21:00:40.000000000 +0100 > +++ linux/include/linux/mm.h 2007-03-24 22:28:52.000000000 +0100 > @@ -1035,6 +1035,10 @@ extern unsigned long get_unmapped_area(s > extern unsigned long do_mmap_pgoff(struct file *file, unsigned long addr, > unsigned long len, unsigned long prot, > unsigned long flag, unsigned long pgoff); > +extern 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); > > static inline unsigned long do_mmap(struct file *file, unsigned long addr, > unsigned long len, unsigned long prot,