fs/anon_inode: Introduce a new lib function anon_inode_getfile_private()
Subsystems (2)
PATCH RESEND 1/2 fs/anon_inode: Introduce a new lib function anon_inode_getfile_private()
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.
--- fs/anon_inodes.c | 66 +++++++++++++++++++++++++++++++++++++++++++ include/linux/anon_inodes.h | 3 ++ 2 files changed, 69 insertions(+), 0 deletions(-)
fs/anon_inodes.c +66 -0
@@ -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
include/linux/anon_inodes.h +3 -0
@@ -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);
Signature · 7 lines
1.7.7 -- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to [email protected]. For more info on Linux MM, see: http://www.linux-mm.org/ . Don't email: <a href=mailto:"[email protected]"> [email protected] </a>
Quoted 9 lines · Gu Zheng
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 toanon_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 <[email protected]>Signed-off-by Benjamin LaHaise <[email protected]>
Please don't add my Signed-off-by when I have never even seen or reviewed a patch -- that is completely unacceptable. Second, I don't think this patch is suitable for 3.11, as it has not seen much testing outside of one test program I had written. It's a long standing bug, so it isn't urgent to get the fix into the tree. That said, it did pass a few tests I ran last night, so it is probably suitable for the -next tree.
As for patch 1, it looks okay to me, but will need Al Viro's signoff.
-ben
Signature · 7 lines
"Thought is the essence of where you are now." -- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to [email protected]. For more info on Linux MM, see: http://www.linux-mm.org/ . Don't email: <a href=mailto:"[email protected]"> [email protected] </a>
Hi Ben,
Quoted 8 lines · Benjamin LaHaise
Quoted 7 lines · Gu Zheng
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 toanon_inode_getfile(), but each file holds a single inode. Furthermore, anyone who wants to create a private anon file will benefit from this change.
Quoted 5 lines
Quoted 2 lines
Signed-off-by Gu Zheng <[email protected]>Signed-off-by Benjamin LaHaise <[email protected]>Please don't add my Signed-off-by when I have never even seen or reviewed a patch -- that is completely unacceptable.
Sorry for my reckless action, I'll remember your reminder.:)
Quoted 5 lines
Second, I don't think this
patch is suitable for 3.11, as it has not seen much testing outside of one test program I had written. It's a long standing bug, so it isn't urgent to get the fix into the tree. That said, it did pass a few tests I ran last night, so it is probably suitable for the -next tree.
Thanks for your test.:)
Regards,
Gu
Quoted 4 lines
As for patch 1, it looks okay to me, but will need Al Viro's signoff.
-ben
--
To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to [email protected]. For more info on Linux MM,
see: http://www.linux-mm.org/ .
Don't email: <a href=mailto:"[email protected]"> [email protected] </a>