From: Steven Rostedt <rostedt@goodmis.org>
To: linux-kernel@vger.kernel.org, stable@vger.kernel.org
Cc: Linus Torvalds <torvalds@linux-foundation.org>,
Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
Sasha Levin <sashal@kernel.org>,
Masami Hiramatsu <mhiramat@kernel.org>,
Mark Rutland <mark.rutland@arm.com>,
Mathieu Desnoyers <mathieu.desnoyers@efficios.com>,
Andrew Morton <akpm@linux-foundation.org>,
Christian Brauner <brauner@kernel.org>,
Al Viro <viro@ZenIV.linux.org.uk>,
Ajay Kaher <ajay.kaher@broadcom.com>
Subject: [v6.7][PATCH 20/23] eventfs: Warn if an eventfs_inode is freed without is_freed being set
Date: Sat, 03 Feb 2024 20:16:35 -0500 [thread overview]
Message-ID: <20240204011830.140246345@goodmis.org> (raw)
In-Reply-To: 20240204011615.703023949@goodmis.org
From: "Steven Rostedt (Google)" <rostedt@goodmis.org>
There should never be a case where an evenfs_inode is being freed without
is_freed being set. Add a WARN_ON_ONCE() if it ever happens. That would
mean there was one too many put_ei()s.
Link: https://lore.kernel.org/linux-trace-kernel/20240201161616.843551963@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: Christian Brauner <brauner@kernel.org>
Cc: Al Viro <viro@ZenIV.linux.org.uk>
Cc: Ajay Kaher <ajay.kaher@broadcom.com>
Signed-off-by: Steven Rostedt (Google) <rostedt@goodmis.org>
---
fs/tracefs/event_inode.c | 18 ++++++++++++++----
1 file changed, 14 insertions(+), 4 deletions(-)
diff --git a/fs/tracefs/event_inode.c b/fs/tracefs/event_inode.c
index 515fdace1eea..ca7daee7c811 100644
--- a/fs/tracefs/event_inode.c
+++ b/fs/tracefs/event_inode.c
@@ -73,6 +73,9 @@ enum {
static void release_ei(struct kref *ref)
{
struct eventfs_inode *ei = container_of(ref, struct eventfs_inode, kref);
+
+ WARN_ON_ONCE(!ei->is_freed);
+
kfree(ei->entry_attrs);
kfree_const(ei->name);
kfree_rcu(ei, rcu);
@@ -84,6 +87,14 @@ static inline void put_ei(struct eventfs_inode *ei)
kref_put(&ei->kref, release_ei);
}
+static inline void free_ei(struct eventfs_inode *ei)
+{
+ if (ei) {
+ ei->is_freed = 1;
+ put_ei(ei);
+ }
+}
+
static inline struct eventfs_inode *get_ei(struct eventfs_inode *ei)
{
if (ei)
@@ -679,7 +690,7 @@ struct eventfs_inode *eventfs_create_dir(const char *name, struct eventfs_inode
/* Was the parent freed? */
if (list_empty(&ei->list)) {
- put_ei(ei);
+ free_ei(ei);
ei = NULL;
}
return ei;
@@ -770,7 +781,7 @@ struct eventfs_inode *eventfs_create_events_dir(const char *name, struct dentry
return ei;
fail:
- put_ei(ei);
+ free_ei(ei);
tracefs_failed_creating(dentry);
return ERR_PTR(-ENOMEM);
}
@@ -801,9 +812,8 @@ static void eventfs_remove_rec(struct eventfs_inode *ei, int level)
list_for_each_entry(ei_child, &ei->children, list)
eventfs_remove_rec(ei_child, level + 1);
- ei->is_freed = 1;
list_del(&ei->list);
- put_ei(ei);
+ free_ei(ei);
}
/**
--
2.43.0
next prev parent reply other threads:[~2024-02-04 1:18 UTC|newest]
Thread overview: 27+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-02-04 1:16 [v6.7][PATCH 00/23] eventfs: Linus's updates for 6.7 Steven Rostedt
2024-02-04 1:16 ` [v6.7][PATCH 01/23] eventfs: Remove "lookup" parameter from create_dir/file_dentry() Steven Rostedt
2024-02-04 1:19 ` kernel test robot
2024-02-04 1:16 ` [v6.7][PATCH 02/23] eventfs: Stop using dcache_readdir() for getdents() Steven Rostedt
2024-02-04 1:16 ` [v6.7][PATCH 03/23] tracefs/eventfs: Use root and instance inodes as default ownership Steven Rostedt
2024-02-04 1:16 ` [v6.7][PATCH 04/23] eventfs: Have eventfs_iterate() stop immediately if ei->is_freed is set Steven Rostedt
2024-02-04 1:16 ` [v6.7][PATCH 05/23] eventfs: Do ctx->pos update for all iterations in eventfs_iterate() Steven Rostedt
2024-02-04 1:16 ` [v6.7][PATCH 06/23] eventfs: Read ei->entries before ei->children " Steven Rostedt
2024-02-04 1:16 ` [v6.7][PATCH 07/23] eventfs: Shortcut eventfs_iterate() by skipping entries already read Steven Rostedt
2024-02-04 1:16 ` [v6.7][PATCH 08/23] eventfs: Have the inodes all for files and directories all be the same Steven Rostedt
2024-02-04 1:16 ` [v6.7][PATCH 09/23] eventfs: Do not create dentries nor inodes in iterate_shared Steven Rostedt
2024-02-04 1:16 ` [v6.7][PATCH 10/23] eventfs: Use kcalloc() instead of kzalloc() Steven Rostedt
2024-02-04 1:16 ` [v6.7][PATCH 11/23] eventfs: Save directory inodes in the eventfs_inode structure Steven Rostedt
2024-02-04 1:16 ` [v6.7][PATCH 12/23] tracefs: remove stale update_gid code Steven Rostedt
2024-02-04 1:16 ` [v6.7][PATCH 13/23] tracefs: Zero out the tracefs_inode when allocating it Steven Rostedt
2024-02-04 1:16 ` [v6.7][PATCH 14/23] eventfs: Initialize the tracefs inode properly Steven Rostedt
2024-02-04 1:16 ` [v6.7][PATCH 15/23] tracefs: Avoid using the ei->dentry pointer unnecessarily Steven Rostedt
2024-02-04 1:16 ` [v6.7][PATCH 16/23] tracefs: dentry lookup crapectomy Steven Rostedt
2024-02-04 1:16 ` [v6.7][PATCH 17/23] eventfs: Remove unused d_parent pointer field Steven Rostedt
2024-02-04 1:16 ` [v6.7][PATCH 18/23] eventfs: Clean up dentry ops and add revalidate function Steven Rostedt
2024-02-04 1:16 ` [v6.7][PATCH 19/23] eventfs: Get rid of dentry pointers without refcounts Steven Rostedt
2024-02-04 1:16 ` Steven Rostedt [this message]
2024-02-04 1:16 ` [v6.7][PATCH 21/23] eventfs: Restructure eventfs_inode structure to be more condensed Steven Rostedt
2024-02-04 1:16 ` [v6.7][PATCH 22/23] eventfs: Remove fsnotify*() functions from lookup() Steven Rostedt
2024-02-04 1:16 ` [v6.7][PATCH 23/23] eventfs: Keep all directory links at 1 Steven Rostedt
2024-02-04 1:25 ` [v6.7][PATCH 00/23] eventfs: Linus's updates for 6.7 Steven Rostedt
2024-02-05 13:14 ` Greg Kroah-Hartman
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20240204011830.140246345@goodmis.org \
--to=rostedt@goodmis.org \
--cc=ajay.kaher@broadcom.com \
--cc=akpm@linux-foundation.org \
--cc=brauner@kernel.org \
--cc=gregkh@linuxfoundation.org \
--cc=linux-kernel@vger.kernel.org \
--cc=mark.rutland@arm.com \
--cc=mathieu.desnoyers@efficios.com \
--cc=mhiramat@kernel.org \
--cc=sashal@kernel.org \
--cc=stable@vger.kernel.org \
--cc=torvalds@linux-foundation.org \
--cc=viro@ZenIV.linux.org.uk \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.