mirror of
https://github.com/torvalds/linux.git
synced 2024-11-10 06:01:57 +00:00
fs: Create anon_inode_getfile_fmode()
Creates an anon_inode_getfile_fmode() function that works similarly to anon_inode_getfile() with the addition of being able to set the fmode member. Signed-off-by: Dawid Osuchowski <linux@osuchow.ski> Link: https://lore.kernel.org/r/20240426075854.4723-1-linux@osuchow.ski Signed-off-by: Christian Brauner <brauner@kernel.org>
This commit is contained in:
parent
652efdeca5
commit
55394d29c9
@ -148,6 +148,38 @@ struct file *anon_inode_getfile(const char *name,
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(anon_inode_getfile);
|
||||
|
||||
/**
|
||||
* anon_inode_getfile_fmode - 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
|
||||
* @f_mode: [in] fmode
|
||||
*
|
||||
* Creates a new file by hooking it on a single inode. This is useful for files
|
||||
* that do not need to have a full-fledged inode in order to operate correctly.
|
||||
* All the files created with anon_inode_getfile() will share a single inode,
|
||||
* hence saving memory and avoiding code duplication for the file/inode/dentry
|
||||
* setup. Allows setting the fmode. Returns the newly created file* or an error
|
||||
* pointer.
|
||||
*/
|
||||
struct file *anon_inode_getfile_fmode(const char *name,
|
||||
const struct file_operations *fops,
|
||||
void *priv, int flags, fmode_t f_mode)
|
||||
{
|
||||
struct file *file;
|
||||
|
||||
file = __anon_inode_getfile(name, fops, priv, flags, NULL, false);
|
||||
if (!IS_ERR(file))
|
||||
file->f_mode |= f_mode;
|
||||
|
||||
return file;
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(anon_inode_getfile_fmode);
|
||||
|
||||
/**
|
||||
* anon_inode_create_getfile - Like anon_inode_getfile(), but creates a new
|
||||
* !S_PRIVATE anon inode rather than reuse the
|
||||
@ -271,6 +303,7 @@ int anon_inode_create_getfd(const char *name, const struct file_operations *fops
|
||||
return __anon_inode_getfd(name, fops, priv, flags, context_inode, true);
|
||||
}
|
||||
|
||||
|
||||
static int __init anon_inode_init(void)
|
||||
{
|
||||
anon_inode_mnt = kern_mount(&anon_inode_fs_type);
|
||||
|
@ -9,12 +9,17 @@
|
||||
#ifndef _LINUX_ANON_INODES_H
|
||||
#define _LINUX_ANON_INODES_H
|
||||
|
||||
#include <linux/types.h>
|
||||
|
||||
struct file_operations;
|
||||
struct inode;
|
||||
|
||||
struct file *anon_inode_getfile(const char *name,
|
||||
const struct file_operations *fops,
|
||||
void *priv, int flags);
|
||||
struct file *anon_inode_getfile_fmode(const char *name,
|
||||
const struct file_operations *fops,
|
||||
void *priv, int flags, fmode_t f_mode);
|
||||
struct file *anon_inode_create_getfile(const char *name,
|
||||
const struct file_operations *fops,
|
||||
void *priv, int flags,
|
||||
|
Loading…
Reference in New Issue
Block a user