diff options
author | Steven Rostedt <srostedt@redhat.com> | 2008-11-14 16:21:19 -0800 |
---|---|---|
committer | Ingo Molnar <mingo@elte.hu> | 2008-11-16 07:30:17 +0100 |
commit | 918c115410c6cc57033835b6a401e57697f9ea4f (patch) | |
tree | 62d4f9d5c76f022f59cdb2a58e95d55c9c233799 | |
parent | b17e8a37a13d0e87165054714434534bb7e69f2d (diff) | |
download | linux-918c115410c6cc57033835b6a401e57697f9ea4f.tar.gz linux-918c115410c6cc57033835b6a401e57697f9ea4f.tar.bz2 linux-918c115410c6cc57033835b6a401e57697f9ea4f.zip |
ftrace: do not process freed records
Impact: keep from converting freed records
When the tracer is started or stopped, it converts all code pointed
to by the saved records into callers to ftrace or nops. When modules
are unloaded, their records are freed, but they still exist within
the record pages.
This patch changes the code to skip over freed records.
Signed-off-by: Steven Rostedt <srostedt@redhat.com>
Signed-off-by: Ingo Molnar <mingo@elte.hu>
-rw-r--r-- | kernel/trace/ftrace.c | 8 |
1 files changed, 6 insertions, 2 deletions
diff --git a/kernel/trace/ftrace.c b/kernel/trace/ftrace.c index d5bd21f39524..3940c71ac2a2 100644 --- a/kernel/trace/ftrace.c +++ b/kernel/trace/ftrace.c @@ -488,8 +488,12 @@ static void ftrace_replace_code(int enable) for (i = 0; i < pg->index; i++) { rec = &pg->records[i]; - /* don't modify code that has already faulted */ - if (rec->flags & FTRACE_FL_FAILED) + /* + * Skip over free records and records that have + * failed. + */ + if (rec->flags & FTRACE_FL_FREE || + rec->flags & FTRACE_FL_FAILED) continue; /* ignore updates to this record's mcount site */ |