public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
* [PATCH 0/3] tracing: Fix seqfile memory leak for .31
@ 2009-07-23  3:28 Li Zefan
  2009-07-23  3:28 ` [PATCH 1/3] trace_stack: Fix seqfile memory leak Li Zefan
                   ` (3 more replies)
  0 siblings, 4 replies; 8+ messages in thread
From: Li Zefan @ 2009-07-23  3:28 UTC (permalink / raw)
  To: Steven Rostedt; +Cc: Ingo Molnar, Frederic Weisbecker, LKML

I found some memory leak in tracing code, due to missing
seq_release().

I think those fixes should be queued for .31.

[PATCH 1/3] trace_stack: Fix seqfile memory leak
[PATCH 2/3] function-graph: Fix seqfile memory leak
[PATCH 3/3] tracing/stat: Fix seqfile memory leak
---
 kernel/trace/ftrace.c      |   15 ++++++++++++---
 kernel/trace/trace_stack.c |    7 ++-----
 kernel/trace/trace_stat.c  |   34 ++++++++++++++++++++++------------
 3 files changed, 36 insertions(+), 20 deletions(-)


^ permalink raw reply	[flat|nested] 8+ messages in thread

* [PATCH 1/3] trace_stack: Fix seqfile memory leak
  2009-07-23  3:28 [PATCH 0/3] tracing: Fix seqfile memory leak for .31 Li Zefan
@ 2009-07-23  3:28 ` Li Zefan
  2009-07-30 19:54   ` [tip:tracing/urgent] " tip-bot for Li Zefan
  2009-07-23  3:29 ` [PATCH 2/3] function-graph: " Li Zefan
                   ` (2 subsequent siblings)
  3 siblings, 1 reply; 8+ messages in thread
From: Li Zefan @ 2009-07-23  3:28 UTC (permalink / raw)
  To: Steven Rostedt; +Cc: Ingo Molnar, Frederic Weisbecker, LKML

Every time we cat stack_trace, we leak memory allocated by seq_open().

Signed-off-by: Li Zefan <lizf@cn.fujitsu.com>
---
 kernel/trace/trace_stack.c |    7 ++-----
 1 files changed, 2 insertions(+), 5 deletions(-)

diff --git a/kernel/trace/trace_stack.c b/kernel/trace/trace_stack.c
index a4dc8d9..0da1cff 100644
--- a/kernel/trace/trace_stack.c
+++ b/kernel/trace/trace_stack.c
@@ -294,17 +294,14 @@ static const struct seq_operations stack_trace_seq_ops = {
 
 static int stack_trace_open(struct inode *inode, struct file *file)
 {
-	int ret;
-
-	ret = seq_open(file, &stack_trace_seq_ops);
-
-	return ret;
+	return seq_open(file, &stack_trace_seq_ops);
 }
 
 static const struct file_operations stack_trace_fops = {
 	.open		= stack_trace_open,
 	.read		= seq_read,
 	.llseek		= seq_lseek,
+	.release	= seq_release,
 };
 
 int
-- 
1.6.3


^ permalink raw reply related	[flat|nested] 8+ messages in thread

* [PATCH 2/3] function-graph: Fix seqfile memory leak
  2009-07-23  3:28 [PATCH 0/3] tracing: Fix seqfile memory leak for .31 Li Zefan
  2009-07-23  3:28 ` [PATCH 1/3] trace_stack: Fix seqfile memory leak Li Zefan
@ 2009-07-23  3:29 ` Li Zefan
  2009-07-30 19:55   ` [tip:tracing/urgent] " tip-bot for Li Zefan
  2009-07-23  3:29 ` [PATCH 3/3] tracing/stat: " Li Zefan
  2009-07-23  3:44 ` [PATCH 0/3] tracing: Fix seqfile memory leak for .31 Steven Rostedt
  3 siblings, 1 reply; 8+ messages in thread
From: Li Zefan @ 2009-07-23  3:29 UTC (permalink / raw)
  To: Steven Rostedt; +Cc: Ingo Molnar, Frederic Weisbecker, LKML

Every time we cat set_graph_function, we leak memory allocated
by seq_open().

Signed-off-by: Li Zefan <lizf@cn.fujitsu.com>
---
 kernel/trace/ftrace.c |   15 ++++++++++++---
 1 files changed, 12 insertions(+), 3 deletions(-)

diff --git a/kernel/trace/ftrace.c b/kernel/trace/ftrace.c
index 7179bff..fd5cdeb 100644
--- a/kernel/trace/ftrace.c
+++ b/kernel/trace/ftrace.c
@@ -2538,6 +2538,14 @@ ftrace_graph_open(struct inode *inode, struct file *file)
 }
 
 static int
+ftrace_graph_release(struct inode *inode, struct file *file)
+{
+	if (file->f_mode & FMODE_READ)
+		seq_release(inode, file);
+	return 0;
+}
+
+static int
 ftrace_set_func(unsigned long *array, int *idx, char *buffer)
 {
 	struct dyn_ftrace *rec;
@@ -2660,9 +2668,10 @@ ftrace_graph_write(struct file *file, const char __user *ubuf,
 }
 
 static const struct file_operations ftrace_graph_fops = {
-	.open = ftrace_graph_open,
-	.read = seq_read,
-	.write = ftrace_graph_write,
+	.open		= ftrace_graph_open,
+	.read		= seq_read,
+	.write		= ftrace_graph_write,
+	.release	= ftrace_graph_release,
 };
 #endif /* CONFIG_FUNCTION_GRAPH_TRACER */
 
-- 
1.6.3


^ permalink raw reply related	[flat|nested] 8+ messages in thread

* [PATCH 3/3] tracing/stat: Fix seqfile memory leak
  2009-07-23  3:28 [PATCH 0/3] tracing: Fix seqfile memory leak for .31 Li Zefan
  2009-07-23  3:28 ` [PATCH 1/3] trace_stack: Fix seqfile memory leak Li Zefan
  2009-07-23  3:29 ` [PATCH 2/3] function-graph: " Li Zefan
@ 2009-07-23  3:29 ` Li Zefan
  2009-07-30 19:55   ` [tip:tracing/urgent] " tip-bot for Li Zefan
  2009-07-23  3:44 ` [PATCH 0/3] tracing: Fix seqfile memory leak for .31 Steven Rostedt
  3 siblings, 1 reply; 8+ messages in thread
From: Li Zefan @ 2009-07-23  3:29 UTC (permalink / raw)
  To: Steven Rostedt; +Cc: Ingo Molnar, Frederic Weisbecker, LKML

Every time we cat a trace_stat file, we leak memory allocated by
seq_open().

Also fix memory leak in a failure path in tracing_stat_open().

Signed-off-by: Li Zefan <lizf@cn.fujitsu.com>
---
 kernel/trace/trace_stat.c |   34 ++++++++++++++++++++++------------
 1 files changed, 22 insertions(+), 12 deletions(-)

diff --git a/kernel/trace/trace_stat.c b/kernel/trace/trace_stat.c
index f069461..07c60b0 100644
--- a/kernel/trace/trace_stat.c
+++ b/kernel/trace/trace_stat.c
@@ -76,7 +76,7 @@ static struct rb_node *release_next(struct tracer_stat *ts,
 	}
 }
 
-static void reset_stat_session(struct stat_session *session)
+static void __reset_stat_session(struct stat_session *session)
 {
 	struct rb_node *node = session->stat_root.rb_node;
 
@@ -86,10 +86,17 @@ static void reset_stat_session(struct stat_session *session)
 	session->stat_root = RB_ROOT;
 }
 
+static void reset_stat_session(struct stat_session *session)
+{
+	mutex_lock(&session->stat_mutex);
+	__reset_stat_session(session);
+	mutex_unlock(&session->stat_mutex);
+}
+
 static void destroy_session(struct stat_session *session)
 {
 	debugfs_remove(session->file);
-	reset_stat_session(session);
+	__reset_stat_session(session);
 	mutex_destroy(&session->stat_mutex);
 	kfree(session);
 }
@@ -153,7 +160,7 @@ static int stat_seq_init(struct stat_session *session)
 	int i;
 
 	mutex_lock(&session->stat_mutex);
-	reset_stat_session(session);
+	__reset_stat_session(session);
 
 	if (!ts->stat_cmp)
 		ts->stat_cmp = dummy_cmp;
@@ -186,7 +193,7 @@ exit:
 	return ret;
 
 exit_free_rbtree:
-	reset_stat_session(session);
+	__reset_stat_session(session);
 	mutex_unlock(&session->stat_mutex);
 	return ret;
 }
@@ -253,16 +260,21 @@ static const struct seq_operations trace_stat_seq_ops = {
 static int tracing_stat_open(struct inode *inode, struct file *file)
 {
 	int ret;
-
+	struct seq_file *m;
 	struct stat_session *session = inode->i_private;
 
+	ret = stat_seq_init(session);
+	if (ret)
+		return ret;
+
 	ret = seq_open(file, &trace_stat_seq_ops);
-	if (!ret) {
-		struct seq_file *m = file->private_data;
-		m->private = session;
-		ret = stat_seq_init(session);
+	if (ret) {
+		reset_stat_session(session);
+		return ret;
 	}
 
+	m = file->private_data;
+	m->private = session;
 	return ret;
 }
 
@@ -273,11 +285,9 @@ static int tracing_stat_release(struct inode *i, struct file *f)
 {
 	struct stat_session *session = i->i_private;
 
-	mutex_lock(&session->stat_mutex);
 	reset_stat_session(session);
-	mutex_unlock(&session->stat_mutex);
 
-	return 0;
+	return seq_release(i, f);
 }
 
 static const struct file_operations tracing_stat_fops = {
-- 
1.6.3


^ permalink raw reply related	[flat|nested] 8+ messages in thread

* Re: [PATCH 0/3] tracing: Fix seqfile memory leak for .31
  2009-07-23  3:28 [PATCH 0/3] tracing: Fix seqfile memory leak for .31 Li Zefan
                   ` (2 preceding siblings ...)
  2009-07-23  3:29 ` [PATCH 3/3] tracing/stat: " Li Zefan
@ 2009-07-23  3:44 ` Steven Rostedt
  3 siblings, 0 replies; 8+ messages in thread
From: Steven Rostedt @ 2009-07-23  3:44 UTC (permalink / raw)
  To: Li Zefan; +Cc: Ingo Molnar, Frederic Weisbecker, LKML


On Thu, 23 Jul 2009, Li Zefan wrote:

> I found some memory leak in tracing code, due to missing
> seq_release().
> 
> I think those fixes should be queued for .31.

Thanks Li!

I'll get these queued up tomorrow.

-- Steve

> 
> [PATCH 1/3] trace_stack: Fix seqfile memory leak
> [PATCH 2/3] function-graph: Fix seqfile memory leak
> [PATCH 3/3] tracing/stat: Fix seqfile memory leak
> ---
>  kernel/trace/ftrace.c      |   15 ++++++++++++---
>  kernel/trace/trace_stack.c |    7 ++-----
>  kernel/trace/trace_stat.c  |   34 ++++++++++++++++++++++------------
>  3 files changed, 36 insertions(+), 20 deletions(-)
> 
> 

^ permalink raw reply	[flat|nested] 8+ messages in thread

* [tip:tracing/urgent] trace_stack: Fix seqfile memory leak
  2009-07-23  3:28 ` [PATCH 1/3] trace_stack: Fix seqfile memory leak Li Zefan
@ 2009-07-30 19:54   ` tip-bot for Li Zefan
  0 siblings, 0 replies; 8+ messages in thread
From: tip-bot for Li Zefan @ 2009-07-30 19:54 UTC (permalink / raw)
  To: linux-tip-commits; +Cc: linux-kernel, hpa, mingo, rostedt, lizf, tglx

Commit-ID:  d8cc1ab793993c886c62abf77c93287df33ffd8b
Gitweb:     http://git.kernel.org/tip/d8cc1ab793993c886c62abf77c93287df33ffd8b
Author:     Li Zefan <lizf@cn.fujitsu.com>
AuthorDate: Thu, 23 Jul 2009 11:28:40 +0800
Committer:  Steven Rostedt <rostedt@goodmis.org>
CommitDate: Thu, 23 Jul 2009 09:52:09 -0400

trace_stack: Fix seqfile memory leak

Every time we cat stack_trace, we leak memory allocated by seq_open().

Signed-off-by: Li Zefan <lizf@cn.fujitsu.com>
LKML-Reference: <4A67D8E8.3020500@cn.fujitsu.com>
Signed-off-by: Steven Rostedt <rostedt@goodmis.org>


---
 kernel/trace/trace_stack.c |    7 ++-----
 1 files changed, 2 insertions(+), 5 deletions(-)

diff --git a/kernel/trace/trace_stack.c b/kernel/trace/trace_stack.c
index e644af9..6a2a9d4 100644
--- a/kernel/trace/trace_stack.c
+++ b/kernel/trace/trace_stack.c
@@ -301,17 +301,14 @@ static const struct seq_operations stack_trace_seq_ops = {
 
 static int stack_trace_open(struct inode *inode, struct file *file)
 {
-	int ret;
-
-	ret = seq_open(file, &stack_trace_seq_ops);
-
-	return ret;
+	return seq_open(file, &stack_trace_seq_ops);
 }
 
 static const struct file_operations stack_trace_fops = {
 	.open		= stack_trace_open,
 	.read		= seq_read,
 	.llseek		= seq_lseek,
+	.release	= seq_release,
 };
 
 int

^ permalink raw reply related	[flat|nested] 8+ messages in thread

* [tip:tracing/urgent] function-graph: Fix seqfile memory leak
  2009-07-23  3:29 ` [PATCH 2/3] function-graph: " Li Zefan
@ 2009-07-30 19:55   ` tip-bot for Li Zefan
  0 siblings, 0 replies; 8+ messages in thread
From: tip-bot for Li Zefan @ 2009-07-30 19:55 UTC (permalink / raw)
  To: linux-tip-commits; +Cc: linux-kernel, hpa, mingo, rostedt, lizf, tglx

Commit-ID:  87827111a5538633b18e5c641ced673c4c2bb6ce
Gitweb:     http://git.kernel.org/tip/87827111a5538633b18e5c641ced673c4c2bb6ce
Author:     Li Zefan <lizf@cn.fujitsu.com>
AuthorDate: Thu, 23 Jul 2009 11:29:11 +0800
Committer:  Steven Rostedt <rostedt@goodmis.org>
CommitDate: Thu, 23 Jul 2009 09:53:23 -0400

function-graph: Fix seqfile memory leak

Every time we cat set_graph_function, we leak memory allocated
by seq_open().

Signed-off-by: Li Zefan <lizf@cn.fujitsu.com>
LKML-Reference: <4A67D907.2010500@cn.fujitsu.com>
Signed-off-by: Steven Rostedt <rostedt@goodmis.org>


---
 kernel/trace/ftrace.c |   15 ++++++++++++---
 1 files changed, 12 insertions(+), 3 deletions(-)

diff --git a/kernel/trace/ftrace.c b/kernel/trace/ftrace.c
index 4521c77..1f3ec2a 100644
--- a/kernel/trace/ftrace.c
+++ b/kernel/trace/ftrace.c
@@ -2596,6 +2596,14 @@ ftrace_graph_open(struct inode *inode, struct file *file)
 }
 
 static int
+ftrace_graph_release(struct inode *inode, struct file *file)
+{
+	if (file->f_mode & FMODE_READ)
+		seq_release(inode, file);
+	return 0;
+}
+
+static int
 ftrace_set_func(unsigned long *array, int *idx, char *buffer)
 {
 	struct dyn_ftrace *rec;
@@ -2724,9 +2732,10 @@ ftrace_graph_write(struct file *file, const char __user *ubuf,
 }
 
 static const struct file_operations ftrace_graph_fops = {
-	.open = ftrace_graph_open,
-	.read = seq_read,
-	.write = ftrace_graph_write,
+	.open		= ftrace_graph_open,
+	.read		= seq_read,
+	.write		= ftrace_graph_write,
+	.release	= ftrace_graph_release,
 };
 #endif /* CONFIG_FUNCTION_GRAPH_TRACER */
 

^ permalink raw reply related	[flat|nested] 8+ messages in thread

* [tip:tracing/urgent] tracing/stat: Fix seqfile memory leak
  2009-07-23  3:29 ` [PATCH 3/3] tracing/stat: " Li Zefan
@ 2009-07-30 19:55   ` tip-bot for Li Zefan
  0 siblings, 0 replies; 8+ messages in thread
From: tip-bot for Li Zefan @ 2009-07-30 19:55 UTC (permalink / raw)
  To: linux-tip-commits; +Cc: linux-kernel, hpa, mingo, rostedt, lizf, tglx

Commit-ID:  636eacee3b0c76915151db37203cc624becb6d7b
Gitweb:     http://git.kernel.org/tip/636eacee3b0c76915151db37203cc624becb6d7b
Author:     Li Zefan <lizf@cn.fujitsu.com>
AuthorDate: Thu, 23 Jul 2009 11:29:47 +0800
Committer:  Steven Rostedt <rostedt@goodmis.org>
CommitDate: Thu, 23 Jul 2009 09:53:55 -0400

tracing/stat: Fix seqfile memory leak

Every time we cat a trace_stat file, we leak memory allocated by
seq_open().

Also fix memory leak in a failure path in tracing_stat_open().

Signed-off-by: Li Zefan <lizf@cn.fujitsu.com>
LKML-Reference: <4A67D92B.4060704@cn.fujitsu.com>
Signed-off-by: Steven Rostedt <rostedt@goodmis.org>


---
 kernel/trace/trace_stat.c |   34 ++++++++++++++++++++++------------
 1 files changed, 22 insertions(+), 12 deletions(-)

diff --git a/kernel/trace/trace_stat.c b/kernel/trace/trace_stat.c
index e66f5e4..aea321c 100644
--- a/kernel/trace/trace_stat.c
+++ b/kernel/trace/trace_stat.c
@@ -73,7 +73,7 @@ static struct rb_node *release_next(struct rb_node *node)
 	}
 }
 
-static void reset_stat_session(struct stat_session *session)
+static void __reset_stat_session(struct stat_session *session)
 {
 	struct rb_node *node = session->stat_root.rb_node;
 
@@ -83,10 +83,17 @@ static void reset_stat_session(struct stat_session *session)
 	session->stat_root = RB_ROOT;
 }
 
+static void reset_stat_session(struct stat_session *session)
+{
+	mutex_lock(&session->stat_mutex);
+	__reset_stat_session(session);
+	mutex_unlock(&session->stat_mutex);
+}
+
 static void destroy_session(struct stat_session *session)
 {
 	debugfs_remove(session->file);
-	reset_stat_session(session);
+	__reset_stat_session(session);
 	mutex_destroy(&session->stat_mutex);
 	kfree(session);
 }
@@ -150,7 +157,7 @@ static int stat_seq_init(struct stat_session *session)
 	int i;
 
 	mutex_lock(&session->stat_mutex);
-	reset_stat_session(session);
+	__reset_stat_session(session);
 
 	if (!ts->stat_cmp)
 		ts->stat_cmp = dummy_cmp;
@@ -183,7 +190,7 @@ exit:
 	return ret;
 
 exit_free_rbtree:
-	reset_stat_session(session);
+	__reset_stat_session(session);
 	mutex_unlock(&session->stat_mutex);
 	return ret;
 }
@@ -250,16 +257,21 @@ static const struct seq_operations trace_stat_seq_ops = {
 static int tracing_stat_open(struct inode *inode, struct file *file)
 {
 	int ret;
-
+	struct seq_file *m;
 	struct stat_session *session = inode->i_private;
 
+	ret = stat_seq_init(session);
+	if (ret)
+		return ret;
+
 	ret = seq_open(file, &trace_stat_seq_ops);
-	if (!ret) {
-		struct seq_file *m = file->private_data;
-		m->private = session;
-		ret = stat_seq_init(session);
+	if (ret) {
+		reset_stat_session(session);
+		return ret;
 	}
 
+	m = file->private_data;
+	m->private = session;
 	return ret;
 }
 
@@ -270,11 +282,9 @@ static int tracing_stat_release(struct inode *i, struct file *f)
 {
 	struct stat_session *session = i->i_private;
 
-	mutex_lock(&session->stat_mutex);
 	reset_stat_session(session);
-	mutex_unlock(&session->stat_mutex);
 
-	return 0;
+	return seq_release(i, f);
 }
 
 static const struct file_operations tracing_stat_fops = {

^ permalink raw reply related	[flat|nested] 8+ messages in thread

end of thread, other threads:[~2009-07-30 19:55 UTC | newest]

Thread overview: 8+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2009-07-23  3:28 [PATCH 0/3] tracing: Fix seqfile memory leak for .31 Li Zefan
2009-07-23  3:28 ` [PATCH 1/3] trace_stack: Fix seqfile memory leak Li Zefan
2009-07-30 19:54   ` [tip:tracing/urgent] " tip-bot for Li Zefan
2009-07-23  3:29 ` [PATCH 2/3] function-graph: " Li Zefan
2009-07-30 19:55   ` [tip:tracing/urgent] " tip-bot for Li Zefan
2009-07-23  3:29 ` [PATCH 3/3] tracing/stat: " Li Zefan
2009-07-30 19:55   ` [tip:tracing/urgent] " tip-bot for Li Zefan
2009-07-23  3:44 ` [PATCH 0/3] tracing: Fix seqfile memory leak for .31 Steven Rostedt

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox