Commit 625acf9d authored by Steven Rostedt (Google)'s avatar Steven Rostedt (Google)
Browse files

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
Loading
Loading
Loading
Loading
+23 −19
Original line number Diff line number Diff line
@@ -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);