Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751860AbbFYWJF (ORCPT ); Thu, 25 Jun 2015 18:09:05 -0400 Received: from mta-out1.inet.fi ([62.71.2.230]:54821 "EHLO johanna3.inet.fi" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751589AbbFYWI7 (ORCPT ); Thu, 25 Jun 2015 18:08:59 -0400 RazorGate-KAS: Rate: 5 RazorGate-KAS: {RECEIVED: dynamic ip detected} RazorGate-KAS: Envelope from: RazorGate-KAS: Version: 5.5.3 RazorGate-KAS: LuaCore: 80 2014-11-10_18-01-23 260f8afb9361da3c7edfd3a8e3a4ca908191ad29 RazorGate-KAS: Method: none RazorGate-KAS: Lua profiles 69136 [Nov 12 2014] RazorGate-KAS: Status: not_detected Date: Fri, 26 Jun 2015 01:08:29 +0300 From: "Kirill A. Shutemov" To: Oleg Nesterov Cc: Andy Lutomirski , Andrew Morton , Al Viro , Benjamin LaHaise , Hugh Dickins , Jeff Moyer , Kirill Shutemov , Linus Torvalds , "linux-kernel@vger.kernel.org" , Andy Lutomirski , Pavel Emelyanov Subject: Re: [PATCH v2 1/1] mm: move ->mremap() from file_operations to vm_operations_struct Message-ID: <20150625220829.GA25673@node.dhcp.inet.fi> References: <20150623180225.GA12882@redhat.com> <20150625204504.GB31034@redhat.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20150625204504.GB31034@redhat.com> User-Agent: Mutt/1.5.23.1 (2014-03-12) Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 3915 Lines: 114 On Thu, Jun 25, 2015 at 10:45:04PM +0200, Oleg Nesterov wrote: > vma->vm_ops->mremap() looks more natural and clean in move_vma(), > and this way ->mremap() can have more users. Say, vdso. > > While at it, s/aio_ring_remap/aio_ring_mremap/. > > Signed-off-by: Oleg Nesterov > --- > fs/aio.c | 25 ++++++++++++++++--------- > include/linux/fs.h | 1 - > include/linux/mm.h | 1 + > mm/mremap.c | 4 ++-- > 4 files changed, 19 insertions(+), 12 deletions(-) > > diff --git a/fs/aio.c b/fs/aio.c > index 9bc1335..a632f14 100644 > --- a/fs/aio.c > +++ b/fs/aio.c > @@ -308,15 +308,9 @@ static void aio_free_ring(struct kioctx *ctx) > } > } > > -static int aio_ring_mmap(struct file *file, struct vm_area_struct *vma) > -{ > - vma->vm_flags |= VM_DONTEXPAND; > - vma->vm_ops = &generic_file_vm_ops; > - return 0; > -} > - > -static int aio_ring_remap(struct file *file, struct vm_area_struct *vma) > +static int aio_ring_mremap(struct vm_area_struct *vma) > { > + struct file *file = vma->vm_file; > struct mm_struct *mm = vma->vm_mm; > struct kioctx_table *table; > int i, res = -EINVAL; > @@ -339,9 +333,22 @@ static int aio_ring_remap(struct file *file, struct vm_area_struct *vma) > return res; > } > > +static const struct vm_operations_struct aio_ring_vm_ops = { > + .mremap = aio_ring_mremap, > + .fault = filemap_fault, > + .map_pages = filemap_map_pages, > + .page_mkwrite = filemap_page_mkwrite, > +}; > + > +static int aio_ring_mmap(struct file *file, struct vm_area_struct *vma) > +{ > + vma->vm_flags |= VM_DONTEXPAND; > + vma->vm_ops = &aio_ring_vm_ops; > + return 0; > +} > + > static const struct file_operations aio_ring_fops = { > .mmap = aio_ring_mmap, > - .mremap = aio_ring_remap, > }; > > #if IS_ENABLED(CONFIG_MIGRATION) > diff --git a/include/linux/fs.h b/include/linux/fs.h > index 35ec87e..42aac09 100644 > --- a/include/linux/fs.h > +++ b/include/linux/fs.h > @@ -1582,7 +1582,6 @@ struct file_operations { > long (*unlocked_ioctl) (struct file *, unsigned int, unsigned long); > long (*compat_ioctl) (struct file *, unsigned int, unsigned long); > int (*mmap) (struct file *, struct vm_area_struct *); > - int (*mremap)(struct file *, struct vm_area_struct *); > int (*open) (struct inode *, struct file *); > int (*flush) (struct file *, fl_owner_t id); > int (*release) (struct inode *, struct file *); > diff --git a/include/linux/mm.h b/include/linux/mm.h > index a0fe3d3..0295b4a 100644 > --- a/include/linux/mm.h > +++ b/include/linux/mm.h > @@ -244,6 +244,7 @@ struct vm_fault { > struct vm_operations_struct { > void (*open)(struct vm_area_struct * area); > void (*close)(struct vm_area_struct * area); > + int (*mremap)(struct vm_area_struct * area); > int (*fault)(struct vm_area_struct *vma, struct vm_fault *vmf); > void (*map_pages)(struct vm_area_struct *vma, struct vm_fault *vmf); > > diff --git a/mm/mremap.c b/mm/mremap.c > index ed1b13a..aeba807 100644 > --- a/mm/mremap.c > +++ b/mm/mremap.c > @@ -276,8 +276,8 @@ static unsigned long move_vma(struct vm_area_struct *vma, > need_rmap_locks); > if (moved_len < old_len) { > err = -ENOMEM; > - } else if (vma->vm_file && vma->vm_file->f_op->mremap) { > - err = vma->vm_file->f_op->mremap(vma->vm_file, new_vma); > + } else if (vma->vm_ops && vma->vm_ops->mremap) { > + err = vma->vm_ops->mremap(new_vma); > } > > if (unlikely(err)) { I'm not sure what is target tree for the patch. Last hunk is not going to apply on Linus' tree or -next. Hm? Otherwise, looks good. Acked-by: Kirill A. Shutemov -- Kirill A. Shutemov -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/