tracing: Apply trace filters on all output channels
The event filters are not applied on all of the output, which results in
the flood of printk when using tp_printk. Unfolding
event_trigger_unlock_commit_regs() into trace_event_buffer_commit(), so
the filters can be applied on every output.
Link: https://lkml.kernel.org/r/20210814034538.8428-1-kernelfans@gmail.com
Cc: stable@vger.kernel.org
Fixes: 0daa230296 ("tracing: Add tp_printk cmdline to have tracepoints go to printk()")
Signed-off-by: Pingfan Liu <kernelfans@gmail.com>
Signed-off-by: Steven Rostedt (VMware) <rostedt@goodmis.org>
This commit is contained in:
committed by
Steven Rostedt (VMware)
parent
5acce0bff2
commit
6c34df6f35
@@ -2897,14 +2897,26 @@ int tracepoint_printk_sysctl(struct ctl_table *table, int write,
|
|||||||
|
|
||||||
void trace_event_buffer_commit(struct trace_event_buffer *fbuffer)
|
void trace_event_buffer_commit(struct trace_event_buffer *fbuffer)
|
||||||
{
|
{
|
||||||
|
enum event_trigger_type tt = ETT_NONE;
|
||||||
|
struct trace_event_file *file = fbuffer->trace_file;
|
||||||
|
|
||||||
|
if (__event_trigger_test_discard(file, fbuffer->buffer, fbuffer->event,
|
||||||
|
fbuffer->entry, &tt))
|
||||||
|
goto discard;
|
||||||
|
|
||||||
if (static_key_false(&tracepoint_printk_key.key))
|
if (static_key_false(&tracepoint_printk_key.key))
|
||||||
output_printk(fbuffer);
|
output_printk(fbuffer);
|
||||||
|
|
||||||
if (static_branch_unlikely(&trace_event_exports_enabled))
|
if (static_branch_unlikely(&trace_event_exports_enabled))
|
||||||
ftrace_exports(fbuffer->event, TRACE_EXPORT_EVENT);
|
ftrace_exports(fbuffer->event, TRACE_EXPORT_EVENT);
|
||||||
event_trigger_unlock_commit_regs(fbuffer->trace_file, fbuffer->buffer,
|
|
||||||
fbuffer->event, fbuffer->entry,
|
trace_buffer_unlock_commit_regs(file->tr, fbuffer->buffer,
|
||||||
fbuffer->trace_ctx, fbuffer->regs);
|
fbuffer->event, fbuffer->trace_ctx, fbuffer->regs);
|
||||||
|
|
||||||
|
discard:
|
||||||
|
if (tt)
|
||||||
|
event_triggers_post_call(file, tt);
|
||||||
|
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL_GPL(trace_event_buffer_commit);
|
EXPORT_SYMBOL_GPL(trace_event_buffer_commit);
|
||||||
|
|
||||||
|
|||||||
@@ -1389,38 +1389,6 @@ event_trigger_unlock_commit(struct trace_event_file *file,
|
|||||||
event_triggers_post_call(file, tt);
|
event_triggers_post_call(file, tt);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* event_trigger_unlock_commit_regs - handle triggers and finish event commit
|
|
||||||
* @file: The file pointer associated with the event
|
|
||||||
* @buffer: The ring buffer that the event is being written to
|
|
||||||
* @event: The event meta data in the ring buffer
|
|
||||||
* @entry: The event itself
|
|
||||||
* @trace_ctx: The tracing context flags.
|
|
||||||
*
|
|
||||||
* This is a helper function to handle triggers that require data
|
|
||||||
* from the event itself. It also tests the event against filters and
|
|
||||||
* if the event is soft disabled and should be discarded.
|
|
||||||
*
|
|
||||||
* Same as event_trigger_unlock_commit() but calls
|
|
||||||
* trace_buffer_unlock_commit_regs() instead of trace_buffer_unlock_commit().
|
|
||||||
*/
|
|
||||||
static inline void
|
|
||||||
event_trigger_unlock_commit_regs(struct trace_event_file *file,
|
|
||||||
struct trace_buffer *buffer,
|
|
||||||
struct ring_buffer_event *event,
|
|
||||||
void *entry, unsigned int trace_ctx,
|
|
||||||
struct pt_regs *regs)
|
|
||||||
{
|
|
||||||
enum event_trigger_type tt = ETT_NONE;
|
|
||||||
|
|
||||||
if (!__event_trigger_test_discard(file, buffer, event, entry, &tt))
|
|
||||||
trace_buffer_unlock_commit_regs(file->tr, buffer, event,
|
|
||||||
trace_ctx, regs);
|
|
||||||
|
|
||||||
if (tt)
|
|
||||||
event_triggers_post_call(file, tt);
|
|
||||||
}
|
|
||||||
|
|
||||||
#define FILTER_PRED_INVALID ((unsigned short)-1)
|
#define FILTER_PRED_INVALID ((unsigned short)-1)
|
||||||
#define FILTER_PRED_IS_RIGHT (1 << 15)
|
#define FILTER_PRED_IS_RIGHT (1 << 15)
|
||||||
#define FILTER_PRED_FOLD (1 << 15)
|
#define FILTER_PRED_FOLD (1 << 15)
|
||||||
|
|||||||
Reference in New Issue
Block a user