eventfs: Consolidate the eventfs_inode update in eventfs_get_inode()
authorSteven Rostedt (Google) <rostedt@goodmis.org>
Wed, 22 May 2024 16:49:43 +0000 (12:49 -0400)
committerSteven Rostedt (Google) <rostedt@goodmis.org>
Thu, 23 May 2024 13:27:25 +0000 (09:27 -0400)
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>
fs/tracefs/event_inode.c

index 129d0f54ba62f3ba1a5dee08535f02e0c8635c17..92987b5c8d9d609a0fdbc91d72d5111653222b25 100644 (file)
@@ -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);