mirror of
https://github.com/torvalds/linux.git
synced 2024-11-21 19:41:42 +00:00
eventfs: Consolidate the eventfs_inode update in eventfs_get_inode()
To simplify the code, create a eventfs_get_inode() that is used when an eventfs file or directory is created. Have the internal tracefs_inode updated the appropriate flags in this function and update the inode's mode as well. Link: https://lore.kernel.org/lkml/20240522165031.624864160@goodmis.org Cc: Linus Torvalds <torvalds@linux-foundation.org> Cc: Masami Hiramatsu <mhiramat@kernel.org> Cc: Mark Rutland <mark.rutland@arm.com> Cc: Mathieu Desnoyers <mathieu.desnoyers@efficios.com> Cc: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Steven Rostedt (Google) <rostedt@goodmis.org>
This commit is contained in:
parent
0bcfd9aa4d
commit
625acf9d5e
@ -412,6 +412,25 @@ static void update_inode_attr(struct dentry *dentry, struct inode *inode,
|
||||
inode->i_gid = attr->gid;
|
||||
}
|
||||
|
||||
static struct inode *eventfs_get_inode(struct dentry *dentry, struct eventfs_attr *attr,
|
||||
umode_t mode, struct eventfs_inode *ei)
|
||||
{
|
||||
struct tracefs_inode *ti;
|
||||
struct inode *inode;
|
||||
|
||||
inode = tracefs_get_inode(dentry->d_sb);
|
||||
if (!inode)
|
||||
return NULL;
|
||||
|
||||
ti = get_tracefs(inode);
|
||||
ti->private = ei;
|
||||
ti->flags |= TRACEFS_EVENT_INODE;
|
||||
|
||||
update_inode_attr(dentry, inode, attr, mode);
|
||||
|
||||
return inode;
|
||||
}
|
||||
|
||||
/**
|
||||
* lookup_file - look up a file in the tracefs filesystem
|
||||
* @parent_ei: Pointer to the eventfs_inode that represents parent of the file
|
||||
@ -432,7 +451,6 @@ static struct dentry *lookup_file(struct eventfs_inode *parent_ei,
|
||||
void *data,
|
||||
const struct file_operations *fop)
|
||||
{
|
||||
struct tracefs_inode *ti;
|
||||
struct inode *inode;
|
||||
|
||||
if (!(mode & S_IFMT))
|
||||
@ -441,13 +459,11 @@ static struct dentry *lookup_file(struct eventfs_inode *parent_ei,
|
||||
if (WARN_ON_ONCE(!S_ISREG(mode)))
|
||||
return ERR_PTR(-EIO);
|
||||
|
||||
inode = tracefs_get_inode(dentry->d_sb);
|
||||
/* Only directories have ti->private set to an ei, not files */
|
||||
inode = eventfs_get_inode(dentry, attr, mode, NULL);
|
||||
if (unlikely(!inode))
|
||||
return ERR_PTR(-ENOMEM);
|
||||
|
||||
/* If the user updated the directory's attributes, use them */
|
||||
update_inode_attr(dentry, inode, attr, mode);
|
||||
|
||||
inode->i_op = &eventfs_file_inode_operations;
|
||||
inode->i_fop = fop;
|
||||
inode->i_private = data;
|
||||
@ -455,9 +471,6 @@ static struct dentry *lookup_file(struct eventfs_inode *parent_ei,
|
||||
/* All files will have the same inode number */
|
||||
inode->i_ino = EVENTFS_FILE_INODE_INO;
|
||||
|
||||
ti = get_tracefs(inode);
|
||||
ti->flags |= TRACEFS_EVENT_INODE;
|
||||
|
||||
// Files have their parent's ei as their fsdata
|
||||
dentry->d_fsdata = get_ei(parent_ei);
|
||||
|
||||
@ -477,28 +490,19 @@ static struct dentry *lookup_file(struct eventfs_inode *parent_ei,
|
||||
static struct dentry *lookup_dir_entry(struct dentry *dentry,
|
||||
struct eventfs_inode *pei, struct eventfs_inode *ei)
|
||||
{
|
||||
struct tracefs_inode *ti;
|
||||
struct inode *inode;
|
||||
umode_t mode = S_IFDIR | S_IRWXU | S_IRUGO | S_IXUGO;
|
||||
|
||||
inode = tracefs_get_inode(dentry->d_sb);
|
||||
inode = eventfs_get_inode(dentry, &ei->attr, mode, ei);
|
||||
if (unlikely(!inode))
|
||||
return ERR_PTR(-ENOMEM);
|
||||
|
||||
/* If the user updated the directory's attributes, use them */
|
||||
update_inode_attr(dentry, inode, &ei->attr,
|
||||
S_IFDIR | S_IRWXU | S_IRUGO | S_IXUGO);
|
||||
|
||||
inode->i_op = &eventfs_dir_inode_operations;
|
||||
inode->i_fop = &eventfs_file_operations;
|
||||
|
||||
/* All directories will have the same inode number */
|
||||
inode->i_ino = eventfs_dir_ino(ei);
|
||||
|
||||
ti = get_tracefs(inode);
|
||||
ti->flags |= TRACEFS_EVENT_INODE;
|
||||
/* Only directories have ti->private set to an ei, not files */
|
||||
ti->private = ei;
|
||||
|
||||
dentry->d_fsdata = get_ei(ei);
|
||||
|
||||
d_add(dentry, inode);
|
||||
|
Loading…
Reference in New Issue
Block a user