* [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; 9+ 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] 9+ 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; 9+ 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] 9+ 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; 9+ 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] 9+ 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; 9+ 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] 9+ 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; 9+ 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] 9+ messages in thread
* [PATCH 2/3] function-graph: Fix seqfile memory leak
2009-07-23 14:02 [GIT PULL][2.6.31] tracing: fix of memory leaks Steven Rostedt
@ 2009-07-23 14:03 ` Steven Rostedt
0 siblings, 0 replies; 9+ messages in thread
From: Steven Rostedt @ 2009-07-23 14:03 UTC (permalink / raw)
To: linux-kernel
Cc: Ingo Molnar, Andrew Morton, Li Zefan, Frederic Weisbecker,
Thomas Gleixner
[-- Attachment #1: 0002-function-graph-Fix-seqfile-memory-leak.patch --]
[-- Type: text/plain, Size: 1272 bytes --]
From: Li Zefan <lizf@cn.fujitsu.com>
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 */
--
1.6.3.3
--
^ permalink raw reply related [flat|nested] 9+ 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; 9+ 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] 9+ 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; 9+ 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] 9+ 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; 9+ 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] 9+ messages in thread
end of thread, other threads:[~2009-07-30 19:55 UTC | newest]
Thread overview: 9+ 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
-- strict thread matches above, loose matches on Subject: below --
2009-07-23 14:02 [GIT PULL][2.6.31] tracing: fix of memory leaks Steven Rostedt
2009-07-23 14:03 ` [PATCH 2/3] function-graph: Fix seqfile memory leak Steven Rostedt
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox