From: Gu Zheng <guz.fnst@cn.fujitsu.com>
To: Andrew Morton <akpm@linux-foundation.org>,
Mel Gorman <mgorman@suse.de>, Al Viro <viro@zeniv.linux.org.uk>,
Benjamin <bcrl@kvack.org>
Cc: tangchen <tangchen@cn.fujitsu.com>,
KAMEZAWA Hiroyuki <kamezawa.hiroyu@jp.fujitsu.com>,
linux-mm@kvack.org, linux-fsdevel <linux-fsdevel@vger.kernel.org>,
linux-kernel <linux-kernel@vger.kernel.org>
Subject: Re: [PATCH 1/2] fs/anon_inode: Introduce a new lib function, anon_inode_getfile_private()
Date: Thu, 11 Jul 2013 18:11:50 +0800 [thread overview]
Message-ID: <51DE84E6.80105@cn.fujitsu.com> (raw)
In-Reply-To: <51DA96BE.5080008@cn.fujitsu.com>
ping...
On 07/08/2013 06:38 PM, Gu Zheng wrote:
> Introduce a new lib function anon_inode_getfile_private(), it creates a new file
> instance by hooking it up to an anonymous inode, and a dentry that describe the
> "class" of the file, similar to anon_inode_getfile(), but each file holds a
> single inode. Furthermore, anyone who wants to create a private anon file will
> benefit from this change.
>
> Signed-off-by: Gu Zheng <guz.fnst@cn.fujitsu.com>
> Signed-off-by: Benjamin LaHaise <bcrl@kvack.org>
> ---
> fs/anon_inodes.c | 66 +++++++++++++++++++++++++++++++++++++++++++
> include/linux/anon_inodes.h | 3 ++
> 2 files changed, 69 insertions(+), 0 deletions(-)
>
> diff --git a/fs/anon_inodes.c b/fs/anon_inodes.c
> index 47a65df..85c9618 100644
> --- a/fs/anon_inodes.c
> +++ b/fs/anon_inodes.c
> @@ -109,6 +109,72 @@ static struct file_system_type anon_inode_fs_type = {
> };
>
> /**
> + * anon_inode_getfile_private - creates a new file instance by hooking it up to an
> + * anonymous inode, and a dentry that describe the "class"
> + * of the file
> + *
> + * @name: [in] name of the "class" of the new file
> + * @fops: [in] file operations for the new file
> + * @priv: [in] private data for the new file (will be file's private_data)
> + * @flags: [in] flags
> + *
> + *
> + * Similar to anon_inode_getfile, but each file holds a single inode.
> + *
> + */
> +struct file *anon_inode_getfile_private(const char *name,
> + const struct file_operations *fops,
> + void *priv, int flags)
> +{
> + struct qstr this;
> + struct path path;
> + struct file *file;
> + struct inode *inode;
> +
> + if (fops->owner && !try_module_get(fops->owner))
> + return ERR_PTR(-ENOENT);
> +
> + inode = anon_inode_mkinode(anon_inode_mnt->mnt_sb);
> + if (IS_ERR(inode)) {
> + file = ERR_PTR(-ENOMEM);
> + goto err_module;
> + }
> +
> + /*
> + * Link the inode to a directory entry by creating a unique name
> + * using the inode sequence number.
> + */
> + file = ERR_PTR(-ENOMEM);
> + this.name = name;
> + this.len = strlen(name);
> + this.hash = 0;
> + path.dentry = d_alloc_pseudo(anon_inode_mnt->mnt_sb, &this);
> + if (!path.dentry)
> + goto err_module;
> +
> + path.mnt = mntget(anon_inode_mnt);
> +
> + d_instantiate(path.dentry, inode);
> +
> + file = alloc_file(&path, OPEN_FMODE(flags), fops);
> + if (IS_ERR(file))
> + goto err_dput;
> +
> + file->f_mapping = inode->i_mapping;
> + file->f_flags = flags & (O_ACCMODE | O_NONBLOCK);
> + file->private_data = priv;
> +
> + return file;
> +
> +err_dput:
> + path_put(&path);
> +err_module:
> + module_put(fops->owner);
> + return file;
> +}
> +EXPORT_SYMBOL_GPL(anon_inode_getfile_private);
> +
> +/**
> * anon_inode_getfile - creates a new file instance by hooking it up to an
> * anonymous inode, and a dentry that describe the "class"
> * of the file
> diff --git a/include/linux/anon_inodes.h b/include/linux/anon_inodes.h
> index 8013a45..cf573c2 100644
> --- a/include/linux/anon_inodes.h
> +++ b/include/linux/anon_inodes.h
> @@ -13,6 +13,9 @@ struct file_operations;
> struct file *anon_inode_getfile(const char *name,
> const struct file_operations *fops,
> void *priv, int flags);
> +struct file *anon_inode_getfile_private(const char *name,
> + const struct file_operations *fops,
> + void *priv, int flags);
> int anon_inode_getfd(const char *name, const struct file_operations *fops,
> void *priv, int flags);
>
--
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: <a href=mailto:"dont@kvack.org"> email@kvack.org </a>
WARNING: multiple messages have this Message-ID (diff)
From: Gu Zheng <guz.fnst@cn.fujitsu.com>
To: Andrew Morton <akpm@linux-foundation.org>,
Mel Gorman <mgorman@suse.de>, Al Viro <viro@zeniv.linux.org.uk>,
Benjamin <bcrl@kvack.org>
Cc: tangchen <tangchen@cn.fujitsu.com>,
KAMEZAWA Hiroyuki <kamezawa.hiroyu@jp.fujitsu.com>,
linux-mm@kvack.org, linux-fsdevel <linux-fsdevel@vger.kernel.org>,
linux-kernel <linux-kernel@vger.kernel.org>
Subject: Re: [PATCH 1/2] fs/anon_inode: Introduce a new lib function, anon_inode_getfile_private()
Date: Thu, 11 Jul 2013 18:11:50 +0800 [thread overview]
Message-ID: <51DE84E6.80105@cn.fujitsu.com> (raw)
In-Reply-To: <51DA96BE.5080008@cn.fujitsu.com>
ping...
On 07/08/2013 06:38 PM, Gu Zheng wrote:
> Introduce a new lib function anon_inode_getfile_private(), it creates a new file
> instance by hooking it up to an anonymous inode, and a dentry that describe the
> "class" of the file, similar to anon_inode_getfile(), but each file holds a
> single inode. Furthermore, anyone who wants to create a private anon file will
> benefit from this change.
>
> Signed-off-by: Gu Zheng <guz.fnst@cn.fujitsu.com>
> Signed-off-by: Benjamin LaHaise <bcrl@kvack.org>
> ---
> fs/anon_inodes.c | 66 +++++++++++++++++++++++++++++++++++++++++++
> include/linux/anon_inodes.h | 3 ++
> 2 files changed, 69 insertions(+), 0 deletions(-)
>
> diff --git a/fs/anon_inodes.c b/fs/anon_inodes.c
> index 47a65df..85c9618 100644
> --- a/fs/anon_inodes.c
> +++ b/fs/anon_inodes.c
> @@ -109,6 +109,72 @@ static struct file_system_type anon_inode_fs_type = {
> };
>
> /**
> + * anon_inode_getfile_private - creates a new file instance by hooking it up to an
> + * anonymous inode, and a dentry that describe the "class"
> + * of the file
> + *
> + * @name: [in] name of the "class" of the new file
> + * @fops: [in] file operations for the new file
> + * @priv: [in] private data for the new file (will be file's private_data)
> + * @flags: [in] flags
> + *
> + *
> + * Similar to anon_inode_getfile, but each file holds a single inode.
> + *
> + */
> +struct file *anon_inode_getfile_private(const char *name,
> + const struct file_operations *fops,
> + void *priv, int flags)
> +{
> + struct qstr this;
> + struct path path;
> + struct file *file;
> + struct inode *inode;
> +
> + if (fops->owner && !try_module_get(fops->owner))
> + return ERR_PTR(-ENOENT);
> +
> + inode = anon_inode_mkinode(anon_inode_mnt->mnt_sb);
> + if (IS_ERR(inode)) {
> + file = ERR_PTR(-ENOMEM);
> + goto err_module;
> + }
> +
> + /*
> + * Link the inode to a directory entry by creating a unique name
> + * using the inode sequence number.
> + */
> + file = ERR_PTR(-ENOMEM);
> + this.name = name;
> + this.len = strlen(name);
> + this.hash = 0;
> + path.dentry = d_alloc_pseudo(anon_inode_mnt->mnt_sb, &this);
> + if (!path.dentry)
> + goto err_module;
> +
> + path.mnt = mntget(anon_inode_mnt);
> +
> + d_instantiate(path.dentry, inode);
> +
> + file = alloc_file(&path, OPEN_FMODE(flags), fops);
> + if (IS_ERR(file))
> + goto err_dput;
> +
> + file->f_mapping = inode->i_mapping;
> + file->f_flags = flags & (O_ACCMODE | O_NONBLOCK);
> + file->private_data = priv;
> +
> + return file;
> +
> +err_dput:
> + path_put(&path);
> +err_module:
> + module_put(fops->owner);
> + return file;
> +}
> +EXPORT_SYMBOL_GPL(anon_inode_getfile_private);
> +
> +/**
> * anon_inode_getfile - creates a new file instance by hooking it up to an
> * anonymous inode, and a dentry that describe the "class"
> * of the file
> diff --git a/include/linux/anon_inodes.h b/include/linux/anon_inodes.h
> index 8013a45..cf573c2 100644
> --- a/include/linux/anon_inodes.h
> +++ b/include/linux/anon_inodes.h
> @@ -13,6 +13,9 @@ struct file_operations;
> struct file *anon_inode_getfile(const char *name,
> const struct file_operations *fops,
> void *priv, int flags);
> +struct file *anon_inode_getfile_private(const char *name,
> + const struct file_operations *fops,
> + void *priv, int flags);
> int anon_inode_getfd(const char *name, const struct file_operations *fops,
> void *priv, int flags);
>
next prev parent reply other threads:[~2013-07-11 10:11 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-07-08 10:38 [PATCH 1/2] fs/anon_inode: Introduce a new lib function, anon_inode_getfile_private() Gu Zheng
2013-07-08 10:38 ` Gu Zheng
2013-07-11 10:11 ` Gu Zheng [this message]
2013-07-11 10:11 ` Gu Zheng
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=51DE84E6.80105@cn.fujitsu.com \
--to=guz.fnst@cn.fujitsu.com \
--cc=akpm@linux-foundation.org \
--cc=bcrl@kvack.org \
--cc=kamezawa.hiroyu@jp.fujitsu.com \
--cc=linux-fsdevel@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-mm@kvack.org \
--cc=mgorman@suse.de \
--cc=tangchen@cn.fujitsu.com \
--cc=viro@zeniv.linux.org.uk \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.