mirror of
https://github.com/torvalds/linux.git
synced 2026-09-23 13:14:02 +02:00
function_graph: Use the saved entry's size when reprinting it
When a graph entry does not fit in the trace_seq, print_graph_entry()
saves it in the iterator's fgraph_data and reprints it on the next read.
The entry has already been consumed from the ring buffer by then, so the
copy is all that is left of it.
The copy is sized with iter->ent_size, which no longer describes the
saved entry but whatever entry the iterator has moved on to. The
argument count is derived from the same field, so a 72 byte entry saved
and then reprinted ahead of a 48 byte return entry loses its arguments.
Record the size next to the failure flag, so that the two are always set
together, and restore it before reprinting.
Cc: stable@vger.kernel.org
Fixes: ff5c9c576e ("ftrace: Add support for function argument to graph tracer")
Link: https://patch.msgid.link/20260906034406.1335316-1-donggeunyoo.kernel@gmail.com
Signed-off-by: Donggeun Yoo <donggeunyoo.kernel@gmail.com>
Signed-off-by: Steven Rostedt <rostedt@goodmis.org>
This commit is contained in:
parent
b228454870
commit
0701995aaf
|
|
@ -52,6 +52,7 @@ struct fgraph_data {
|
|||
};
|
||||
struct ftrace_graph_ret_entry ret;
|
||||
int failed;
|
||||
int ent_size;
|
||||
int cpu;
|
||||
};
|
||||
|
||||
|
|
@ -1274,6 +1275,7 @@ print_graph_entry(struct ftrace_graph_ent_entry *field, struct trace_seq *s,
|
|||
if (s->full) {
|
||||
data->failed = 1;
|
||||
data->cpu = cpu;
|
||||
data->ent_size = iter->ent_size;
|
||||
} else
|
||||
data->failed = 0;
|
||||
}
|
||||
|
|
@ -1457,6 +1459,7 @@ print_graph_function_flags(struct trace_iterator *iter, u32 flags)
|
|||
if (data && data->failed) {
|
||||
field = &data->ent.ent;
|
||||
iter->cpu = data->cpu;
|
||||
iter->ent_size = data->ent_size;
|
||||
ret = print_graph_entry(field, s, iter, flags);
|
||||
if (ret == TRACE_TYPE_HANDLED && iter->cpu != cpu) {
|
||||
per_cpu_ptr(data->cpu_data, iter->cpu)->ignore = 1;
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user