| From crosslonelyover@gmail.com Wed Apr 21 12:08:05 2010 |
| From: Wang Sheng-Hui <crosslonelyover@gmail.com> |
| Date: Tue, 13 Apr 2010 21:04:10 +0800 |
| Subject: trace: Fix inappropriate substraction on tracing_pages_allocated in trace_free_page() |
| To: Greg KH <greg@kroah.com> |
| Cc: stable@kernel.org |
| Message-ID: <i2g5a774f4c1004130604vbd24fc79y911d34408ff7e6f0@mail.gmail.com> |
| |
| From: Wang Sheng-Hui <crosslonelyover@gmail.com> |
| |
| [No matching upstream git commit id as it was fixed differently due to a |
| rewrite of the tracing code there.] |
| |
| For normal case, the code in trace_free_page() do once more substraction |
| on tracing_pages_allocated, but for CONFIG_TRACER_MAX_TRACE it doesn't |
| take the freed page into account. That's not consistent with |
| trace_alloc_page(). Well, for there are no message related with this, |
| so we cannot observe its incorrect state when the kernel doesn't define |
| "CONFIG_TRACER_MAX_TRACE". If you add some pr_info() as |
| trace_alloc_page(), you may notice it. |
| |
| Cc: Steven Rostedt <rostedt@goodmis.org> |
| Cc: Frederic Weisbecker <fweisbec@gmail.com> |
| Cc: Ingo Molnar <mingo@redhat.com> |
| Cc: Li Zefan <lizf@cn.fujitsu.com> |
| Signed-off-by: Wang Sheng-Hui <crosslonelyover@gmail.com> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> |
| |
| --- |
| kernel/trace/trace.c | 2 +- |
| 1 file changed, 1 insertion(+), 1 deletion(-) |
| |
| --- a/kernel/trace/trace.c |
| +++ b/kernel/trace/trace.c |
| @@ -3018,7 +3018,6 @@ static int trace_free_page(void) |
| ClearPageLRU(page); |
| list_del(&page->lru); |
| tracing_pages_allocated--; |
| - tracing_pages_allocated--; |
| __free_page(page); |
| |
| tracing_reset(data); |
| @@ -3036,6 +3035,7 @@ static int trace_free_page(void) |
| page = list_entry(p, struct page, lru); |
| ClearPageLRU(page); |
| list_del(&page->lru); |
| + tracing_pages_allocated--; |
| __free_page(page); |
| |
| tracing_reset(data); |