Skip to content

Commit

Permalink
Merge tag 'trace-v4.17-2' of git://git.kernel.org/pub/scm/linux/kerne…
Browse files Browse the repository at this point in the history
…l/git/rostedt/linux-trace

Pull tracing fixes from Steven Rostedt:
 "A few clean ups and bug fixes:

   - replace open coded "ARRAY_SIZE()" with macro

   - updates to uprobes

   - bug fix for perf event filter on error path"

* tag 'trace-v4.17-2' of git://git.kernel.org/pub/scm/linux/kernel/git/rostedt/linux-trace:
  tracing: Enforce passing in filter=NULL to create_filter()
  trace_uprobe: Simplify probes_seq_show()
  trace_uprobe: Use %lx to display offset
  tracing/uprobe: Add support for overlayfs
  tracing: Use ARRAY_SIZE() macro instead of open coding it
  • Loading branch information
torvalds committed Apr 13, 2018
2 parents ee9294d + 0b3dec0 commit affb028
Show file tree
Hide file tree
Showing 2 changed files with 15 additions and 34 deletions.
26 changes: 11 additions & 15 deletions kernel/trace/trace_events_filter.c
Original file line number Diff line number Diff line change
Expand Up @@ -1704,18 +1704,16 @@ static int create_filter(struct trace_event_call *call,
struct event_filter **filterp)
{
struct filter_parse_error *pe = NULL;
struct event_filter *filter = NULL;
int err;

err = create_filter_start(filter_string, set_str, &pe, &filter);
err = create_filter_start(filter_string, set_str, &pe, filterp);
if (err)
return err;

err = process_preds(call, filter_string, filter, pe);
err = process_preds(call, filter_string, *filterp, pe);
if (err && set_str)
append_filter_err(pe, filter);
append_filter_err(pe, *filterp);

*filterp = filter;
return err;
}

Expand All @@ -1739,32 +1737,30 @@ static int create_system_filter(struct trace_subsystem_dir *dir,
struct trace_array *tr,
char *filter_str, struct event_filter **filterp)
{
struct event_filter *filter = NULL;
struct filter_parse_error *pe = NULL;
int err;

err = create_filter_start(filter_str, true, &pe, &filter);
err = create_filter_start(filter_str, true, &pe, filterp);
if (!err) {
err = process_system_preds(dir, tr, pe, filter_str);
if (!err) {
/* System filters just show a default message */
kfree(filter->filter_string);
filter->filter_string = NULL;
kfree((*filterp)->filter_string);
(*filterp)->filter_string = NULL;
} else {
append_filter_err(pe, filter);
append_filter_err(pe, *filterp);
}
}
create_filter_finish(pe);

*filterp = filter;
return err;
}

/* caller must hold event_mutex */
int apply_event_filter(struct trace_event_file *file, char *filter_string)
{
struct trace_event_call *call = file->event_call;
struct event_filter *filter;
struct event_filter *filter = NULL;
int err;

if (!strcmp(strstrip(filter_string), "0")) {
Expand Down Expand Up @@ -1817,7 +1813,7 @@ int apply_subsystem_event_filter(struct trace_subsystem_dir *dir,
{
struct event_subsystem *system = dir->subsystem;
struct trace_array *tr = dir->tr;
struct event_filter *filter;
struct event_filter *filter = NULL;
int err = 0;

mutex_lock(&event_mutex);
Expand Down Expand Up @@ -2024,7 +2020,7 @@ int ftrace_profile_set_filter(struct perf_event *event, int event_id,
char *filter_str)
{
int err;
struct event_filter *filter;
struct event_filter *filter = NULL;
struct trace_event_call *call;

mutex_lock(&event_mutex);
Expand Down Expand Up @@ -2140,7 +2136,7 @@ static struct test_filter_data_t {
#undef YES
#undef NO

#define DATA_CNT (sizeof(test_filter_data)/sizeof(struct test_filter_data_t))
#define DATA_CNT ARRAY_SIZE(test_filter_data)

static int test_pred_visited;

Expand Down
23 changes: 4 additions & 19 deletions kernel/trace/trace_uprobe.c
Original file line number Diff line number Diff line change
Expand Up @@ -446,7 +446,7 @@ static int create_trace_uprobe(int argc, char **argv)
if (ret)
goto fail_address_parse;

inode = igrab(d_inode(path.dentry));
inode = igrab(d_real_inode(path.dentry));
path_put(&path);

if (!inode || !S_ISREG(inode->i_mode)) {
Expand Down Expand Up @@ -602,24 +602,9 @@ static int probes_seq_show(struct seq_file *m, void *v)
char c = is_ret_probe(tu) ? 'r' : 'p';
int i;

seq_printf(m, "%c:%s/%s", c, tu->tp.call.class->system,
trace_event_name(&tu->tp.call));
seq_printf(m, " %s:", tu->filename);

/* Don't print "0x (null)" when offset is 0 */
if (tu->offset) {
seq_printf(m, "0x%px", (void *)tu->offset);
} else {
switch (sizeof(void *)) {
case 4:
seq_printf(m, "0x00000000");
break;
case 8:
default:
seq_printf(m, "0x0000000000000000");
break;
}
}
seq_printf(m, "%c:%s/%s %s:0x%0*lx", c, tu->tp.call.class->system,
trace_event_name(&tu->tp.call), tu->filename,
(int)(sizeof(void *) * 2), tu->offset);

for (i = 0; i < tu->tp.nr_args; i++)
seq_printf(m, " %s=%s", tu->tp.args[i].name, tu->tp.args[i].comm);
Expand Down

0 comments on commit affb028

Please sign in to comment.