tracing: Attempt to record other information even if some fail
In recent patches where we record comm and tgid at the same time, we skip continuing to record if any fail. Fix that by trying to record as many things as we can even if some couldn't be recorded. If any information isn't recorded, then we don't set trace_taskinfo_save as before. Link: http://lkml.kernel.org/r/20170706230023.17942-3-joelaf@google.com Cc: kernel-team@android.com Cc: Ingo Molnar <mingo@redhat.com> Signed-off-by: Joel Fernandes <joelaf@google.com> Signed-off-by: Steven Rostedt (VMware) <rostedt@goodmis.org>
This commit is contained in:
parent
bd45d34d25
commit
29b1a8ad7d
@ -2037,11 +2037,20 @@ static bool tracing_record_taskinfo_skip(int flags)
|
|||||||
*/
|
*/
|
||||||
void tracing_record_taskinfo(struct task_struct *task, int flags)
|
void tracing_record_taskinfo(struct task_struct *task, int flags)
|
||||||
{
|
{
|
||||||
|
bool done;
|
||||||
|
|
||||||
if (tracing_record_taskinfo_skip(flags))
|
if (tracing_record_taskinfo_skip(flags))
|
||||||
return;
|
return;
|
||||||
if ((flags & TRACE_RECORD_CMDLINE) && !trace_save_cmdline(task))
|
|
||||||
return;
|
/*
|
||||||
if ((flags & TRACE_RECORD_TGID) && !trace_save_tgid(task))
|
* Record as much task information as possible. If some fail, continue
|
||||||
|
* to try to record the others.
|
||||||
|
*/
|
||||||
|
done = !(flags & TRACE_RECORD_CMDLINE) || trace_save_cmdline(task);
|
||||||
|
done &= !(flags & TRACE_RECORD_TGID) || trace_save_tgid(task);
|
||||||
|
|
||||||
|
/* If recording any information failed, retry again soon. */
|
||||||
|
if (!done)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
__this_cpu_write(trace_taskinfo_save, false);
|
__this_cpu_write(trace_taskinfo_save, false);
|
||||||
@ -2058,15 +2067,22 @@ void tracing_record_taskinfo(struct task_struct *task, int flags)
|
|||||||
void tracing_record_taskinfo_sched_switch(struct task_struct *prev,
|
void tracing_record_taskinfo_sched_switch(struct task_struct *prev,
|
||||||
struct task_struct *next, int flags)
|
struct task_struct *next, int flags)
|
||||||
{
|
{
|
||||||
|
bool done;
|
||||||
|
|
||||||
if (tracing_record_taskinfo_skip(flags))
|
if (tracing_record_taskinfo_skip(flags))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if ((flags & TRACE_RECORD_CMDLINE) &&
|
/*
|
||||||
(!trace_save_cmdline(prev) || !trace_save_cmdline(next)))
|
* Record as much task information as possible. If some fail, continue
|
||||||
return;
|
* to try to record the others.
|
||||||
|
*/
|
||||||
|
done = !(flags & TRACE_RECORD_CMDLINE) || trace_save_cmdline(prev);
|
||||||
|
done &= !(flags & TRACE_RECORD_CMDLINE) || trace_save_cmdline(next);
|
||||||
|
done &= !(flags & TRACE_RECORD_TGID) || trace_save_tgid(prev);
|
||||||
|
done &= !(flags & TRACE_RECORD_TGID) || trace_save_tgid(next);
|
||||||
|
|
||||||
if ((flags & TRACE_RECORD_TGID) &&
|
/* If recording any information failed, retry again soon. */
|
||||||
(!trace_save_tgid(prev) || !trace_save_tgid(next)))
|
if (!done)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
__this_cpu_write(trace_taskinfo_save, false);
|
__this_cpu_write(trace_taskinfo_save, false);
|
||||||
|
Loading…
Reference in New Issue
Block a user