When saving stacktraces, some frames are skipped because they correspond
to calls of internal functions of the tracing subsystem.

The number of frames to skip went out of sync with the current codebase,
leading to skipping some caller's frames. Fix that.

https://jira.sw.ru/browse/PSBM-92088
Signed-off-by: Nikita Yushchenko <[email protected]>
---
 kernel/trace/trace.c | 11 ++++++++++-
 1 file changed, 10 insertions(+), 1 deletion(-)

diff --git a/kernel/trace/trace.c b/kernel/trace/trace.c
index 94f2825f838f..4828f7cf4de6 100644
--- a/kernel/trace/trace.c
+++ b/kernel/trace/trace.c
@@ -1588,6 +1588,15 @@ __buffer_unlock_commit(struct ring_buffer *buffer, 
struct ring_buffer_event *eve
        ring_buffer_unlock_commit(buffer, event);
 }
 
+/*
+ * Skip 3:
+ *
+ *   __ftrace_trace_stack()
+ *   trace_buffer_unlock_commit()
+ *   ftrace_raw_event_xxx()
+ */
+#define STACK_SKIP 3
+
 static inline void
 __trace_buffer_unlock_commit(struct ring_buffer *buffer,
                             struct ring_buffer_event *event,
@@ -1595,7 +1604,7 @@ __trace_buffer_unlock_commit(struct ring_buffer *buffer,
 {
        __buffer_unlock_commit(buffer, event);
 
-       ftrace_trace_stack(buffer, flags, 6, pc);
+       ftrace_trace_stack(buffer, flags, STACK_SKIP, pc);
        ftrace_trace_userstack(buffer, flags, pc);
 }
 
-- 
2.20.1

_______________________________________________
Devel mailing list
[email protected]
https://lists.openvz.org/mailman/listinfo/devel

Reply via email to