Commit 2819f23a authored by Steven Rostedt (Google)'s avatar Steven Rostedt (Google)
Browse files

eventfs: Use eventfs_remove_events_dir()



The update to removing the eventfs_file changed the way the events top
level directory was handled. Instead of returning a dentry, it now returns
the eventfs_inode. In this changed, the removing of the events top level
directory is not much different than removing any of the other
directories. Because of this, the removal just called eventfs_remove_dir()
instead of eventfs_remove_events_dir().

Although eventfs_remove_dir() does the clean up, it misses out on the
dget() of the ei->dentry done in eventfs_create_events_dir(). It makes
more sense to match eventfs_create_events_dir() with a specific function
eventfs_remove_events_dir() and this specific function can then perform
the dput() to the dentry that had the dget() when it was created.

Fixes: 5790b1fb ("eventfs: Remove eventfs_file and just use eventfs_inode")
Reported-by: default avatarkernel test robot <lkp@intel.com>
Closes: https://lore.kernel.org/oe-kbuild-all/202310051743.y9EobbUr-lkp@intel.com/


Signed-off-by: default avatarSteven Rostedt (Google) <rostedt@goodmis.org>
parent f5d9e8e0
Loading
Loading
Loading
Loading
+7 −12
Original line number Diff line number Diff line
@@ -901,22 +901,17 @@ void eventfs_remove_dir(struct eventfs_inode *ei)
}

/**
 * eventfs_remove_events_dir - remove eventfs dir or file from list
 * @dentry: events's dentry to be removed.
 * eventfs_remove_events_dir - remove the top level eventfs directory
 * @ei: the event_inode returned by eventfs_create_events_dir().
 *
 * This function remove events main directory
 * This function removes the events main directory
 */
void eventfs_remove_events_dir(struct dentry *dentry)
void eventfs_remove_events_dir(struct eventfs_inode *ei)
{
	struct tracefs_inode *ti;
	struct dentry *dentry = ei->dentry;

	if (!dentry || !dentry->d_inode)
		return;
	eventfs_remove_dir(ei);

	ti = get_tracefs(dentry->d_inode);
	if (!ti || !(ti->flags & TRACEFS_EVENT_INODE))
		return;

	d_invalidate(dentry);
	/* Matches the dget() from eventfs_create_events_dir() */
	dput(dentry);
}
+1 −0
Original line number Diff line number Diff line
@@ -41,6 +41,7 @@ struct eventfs_inode *eventfs_create_dir(const char *name, struct eventfs_inode
					 const struct eventfs_entry *entries,
					 int size, void *data);

void eventfs_remove_events_dir(struct eventfs_inode *ei);
void eventfs_remove_dir(struct eventfs_inode *ei);

struct dentry *tracefs_create_file(const char *name, umode_t mode,
+1 −1
Original line number Diff line number Diff line
@@ -3872,7 +3872,7 @@ int event_trace_del_tracer(struct trace_array *tr)

	down_write(&trace_event_sem);
	__trace_remove_event_dirs(tr);
	eventfs_remove_dir(tr->event_dir);
	eventfs_remove_events_dir(tr->event_dir);
	up_write(&trace_event_sem);

	tr->event_dir = NULL;