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: default avatarSteven Rostedt (Google) <rostedt@goodmis.org>
parent 0bcfd9aa
...@@ -412,6 +412,25 @@ static void update_inode_attr(struct dentry *dentry, struct inode *inode, ...@@ -412,6 +412,25 @@ static void update_inode_attr(struct dentry *dentry, struct inode *inode,
inode->i_gid = attr->gid; 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 * lookup_file - look up a file in the tracefs filesystem
* @parent_ei: Pointer to the eventfs_inode that represents parent of the file * @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, ...@@ -432,7 +451,6 @@ static struct dentry *lookup_file(struct eventfs_inode *parent_ei,
void *data, void *data,
const struct file_operations *fop) const struct file_operations *fop)
{ {
struct tracefs_inode *ti;
struct inode *inode; struct inode *inode;
if (!(mode & S_IFMT)) if (!(mode & S_IFMT))
...@@ -441,13 +459,11 @@ static struct dentry *lookup_file(struct eventfs_inode *parent_ei, ...@@ -441,13 +459,11 @@ static struct dentry *lookup_file(struct eventfs_inode *parent_ei,
if (WARN_ON_ONCE(!S_ISREG(mode))) if (WARN_ON_ONCE(!S_ISREG(mode)))
return ERR_PTR(-EIO); 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)) if (unlikely(!inode))
return ERR_PTR(-ENOMEM); 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_op = &eventfs_file_inode_operations;
inode->i_fop = fop; inode->i_fop = fop;
inode->i_private = data; inode->i_private = data;
...@@ -455,9 +471,6 @@ static struct dentry *lookup_file(struct eventfs_inode *parent_ei, ...@@ -455,9 +471,6 @@ static struct dentry *lookup_file(struct eventfs_inode *parent_ei,
/* All files will have the same inode number */ /* All files will have the same inode number */
inode->i_ino = EVENTFS_FILE_INODE_INO; 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 // Files have their parent's ei as their fsdata
dentry->d_fsdata = get_ei(parent_ei); dentry->d_fsdata = get_ei(parent_ei);
...@@ -477,28 +490,19 @@ static struct dentry *lookup_file(struct eventfs_inode *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, static struct dentry *lookup_dir_entry(struct dentry *dentry,
struct eventfs_inode *pei, struct eventfs_inode *ei) struct eventfs_inode *pei, struct eventfs_inode *ei)
{ {
struct tracefs_inode *ti;
struct inode *inode; 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)) if (unlikely(!inode))
return ERR_PTR(-ENOMEM); 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_op = &eventfs_dir_inode_operations;
inode->i_fop = &eventfs_file_operations; inode->i_fop = &eventfs_file_operations;
/* All directories will have the same inode number */ /* All directories will have the same inode number */
inode->i_ino = eventfs_dir_ino(ei); 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); dentry->d_fsdata = get_ei(ei);
d_add(dentry, inode); d_add(dentry, inode);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment