From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-pf0-f200.google.com (mail-pf0-f200.google.com [209.85.192.200]) by kanga.kvack.org (Postfix) with ESMTP id 212C1280757 for ; Wed, 23 Aug 2017 05:31:48 -0400 (EDT) Received: by mail-pf0-f200.google.com with SMTP id c67so9939503pfj.7 for ; Wed, 23 Aug 2017 02:31:48 -0700 (PDT) Received: from mga11.intel.com (mga11.intel.com. [192.55.52.93]) by mx.google.com with ESMTPS id h125si756343pgc.280.2017.08.23.02.31.46 for (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Wed, 23 Aug 2017 02:31:46 -0700 (PDT) Message-ID: <1503480688.6276.4.camel@linux.intel.com> Subject: Re: [PATCH 01/23] mm/shmem: introduce shmem_file_setup_with_mnt From: Joonas Lahtinen Date: Wed, 23 Aug 2017 12:31:28 +0300 In-Reply-To: <20170821183503.12246-2-matthew.auld@intel.com> References: <20170821183503.12246-1-matthew.auld@intel.com> <20170821183503.12246-2-matthew.auld@intel.com> Content-Type: text/plain; charset="UTF-8" Mime-Version: 1.0 Content-Transfer-Encoding: 7bit Sender: owner-linux-mm@kvack.org List-ID: To: Andrew Morton Cc: Matthew Auld , intel-gfx@lists.freedesktop.org, Chris Wilson , Dave Hansen , "Kirill A . Shutemov" , Hugh Dickins , linux-mm@kvack.org Hi Andrew, This patch has been floating around for a while now Acked and without further comments. It is blocking us from merging huge page support to drm/i915. Would you mind merging it, or prodding the right people to get it in? Regards, Joonas On Mon, 2017-08-21 at 19:34 +0100, Matthew Auld wrote: > We are planning to use our own tmpfs mnt in i915 in place of the > shm_mnt, such that we can control the mount options, in particular > huge=, which we require to support huge-gtt-pages. So rather than roll > our own version of __shmem_file_setup, it would be preferred if we could > just give shmem our mnt, and let it do the rest. > > Signed-off-by: Matthew Auld > Cc: Joonas Lahtinen > Cc: Chris Wilson > Cc: Dave Hansen > Cc: Kirill A. Shutemov > Cc: Hugh Dickins > Cc: linux-mm@kvack.org > Acked-by: Kirill A. Shutemov > Reviewed-by: Joonas Lahtinen > --- > include/linux/shmem_fs.h | 2 ++ > mm/shmem.c | 30 ++++++++++++++++++++++-------- > 2 files changed, 24 insertions(+), 8 deletions(-) > > diff --git a/include/linux/shmem_fs.h b/include/linux/shmem_fs.h > index a7d6bd2a918f..27de676f0b63 100644 > --- a/include/linux/shmem_fs.h > +++ b/include/linux/shmem_fs.h > @@ -53,6 +53,8 @@ extern struct file *shmem_file_setup(const char *name, > loff_t size, unsigned long flags); > extern struct file *shmem_kernel_file_setup(const char *name, loff_t size, > unsigned long flags); > +extern struct file *shmem_file_setup_with_mnt(struct vfsmount *mnt, > + const char *name, loff_t size, unsigned long flags); > extern int shmem_zero_setup(struct vm_area_struct *); > extern unsigned long shmem_get_unmapped_area(struct file *, unsigned long addr, > unsigned long len, unsigned long pgoff, unsigned long flags); > diff --git a/mm/shmem.c b/mm/shmem.c > index 6540e5982444..0975e65ea61c 100644 > --- a/mm/shmem.c > +++ b/mm/shmem.c > @@ -4141,7 +4141,7 @@ static const struct dentry_operations anon_ops = { > .d_dname = simple_dname > }; > > -static struct file *__shmem_file_setup(const char *name, loff_t size, > +static struct file *__shmem_file_setup(struct vfsmount *mnt, const char *name, loff_t size, > unsigned long flags, unsigned int i_flags) > { > struct file *res; > @@ -4150,8 +4150,8 @@ static struct file *__shmem_file_setup(const char *name, loff_t size, > struct super_block *sb; > struct qstr this; > > - if (IS_ERR(shm_mnt)) > - return ERR_CAST(shm_mnt); > + if (IS_ERR(mnt)) > + return ERR_CAST(mnt); > > if (size < 0 || size > MAX_LFS_FILESIZE) > return ERR_PTR(-EINVAL); > @@ -4163,8 +4163,8 @@ static struct file *__shmem_file_setup(const char *name, loff_t size, > this.name = name; > this.len = strlen(name); > this.hash = 0; /* will go */ > - sb = shm_mnt->mnt_sb; > - path.mnt = mntget(shm_mnt); > + sb = mnt->mnt_sb; > + path.mnt = mntget(mnt); > path.dentry = d_alloc_pseudo(sb, &this); > if (!path.dentry) > goto put_memory; > @@ -4209,7 +4209,7 @@ static struct file *__shmem_file_setup(const char *name, loff_t size, > */ > struct file *shmem_kernel_file_setup(const char *name, loff_t size, unsigned long flags) > { > - return __shmem_file_setup(name, size, flags, S_PRIVATE); > + return __shmem_file_setup(shm_mnt, name, size, flags, S_PRIVATE); > } > > /** > @@ -4220,11 +4220,25 @@ struct file *shmem_kernel_file_setup(const char *name, loff_t size, unsigned lon > */ > struct file *shmem_file_setup(const char *name, loff_t size, unsigned long flags) > { > - return __shmem_file_setup(name, size, flags, 0); > + return __shmem_file_setup(shm_mnt, name, size, flags, 0); > } > EXPORT_SYMBOL_GPL(shmem_file_setup); > > /** > + * shmem_file_setup_with_mnt - get an unlinked file living in tmpfs > + * @mnt: the tmpfs mount where the file will be created > + * @name: name for dentry (to be seen in /proc//maps > + * @size: size to be set for the file > + * @flags: VM_NORESERVE suppresses pre-accounting of the entire object size > + */ > +struct file *shmem_file_setup_with_mnt(struct vfsmount *mnt, const char *name, > + loff_t size, unsigned long flags) > +{ > + return __shmem_file_setup(mnt, name, size, flags, 0); > +} > +EXPORT_SYMBOL_GPL(shmem_file_setup_with_mnt); > + > +/** > * shmem_zero_setup - setup a shared anonymous mapping > * @vma: the vma to be mmapped is prepared by do_mmap_pgoff > */ > @@ -4239,7 +4253,7 @@ int shmem_zero_setup(struct vm_area_struct *vma) > * accessible to the user through its mapping, use S_PRIVATE flag to > * bypass file security, in the same way as shmem_kernel_file_setup(). > */ > - file = __shmem_file_setup("dev/zero", size, vma->vm_flags, S_PRIVATE); > + file = shmem_kernel_file_setup("dev/zero", size, vma->vm_flags); > if (IS_ERR(file)) > return PTR_ERR(file); > -- Joonas Lahtinen Open Source Technology Center Intel Corporation -- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to majordomo@kvack.org. For more info on Linux MM, see: http://www.linux-mm.org/ . Don't email: email@kvack.org