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
 -----BEGIN PGP SIGNATURE-----
 
 iIoEABYIADIWIQRRSw7ePDh/lE+zeZMp5XQQmuv6qgUCWs+2YxQccm9zdGVkdEBn
 b29kbWlzLm9yZwAKCRAp5XQQmuv6qsRUAP9okqGRR/01bBLqNKiJ2j5YeBc9YlWl
 R2rC0xbwVBLgJQEAwpE5jxahqKutbgrBDalDeCmXmeTOhSbGRJaBxXqwzwE=
 =ZAuQ
 -----END PGP SIGNATURE-----

Merge tag 'trace-v4.17-2' of git://git.kernel.org/pub/scm/linux/kernel/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
This commit is contained in:
Linus Torvalds 2018-04-12 20:54:01 -07:00
commit affb028071
2 changed files with 15 additions and 34 deletions

View file

@ -1704,18 +1704,16 @@ static int create_filter(struct trace_event_call *call,
struct event_filter **filterp) struct event_filter **filterp)
{ {
struct filter_parse_error *pe = NULL; struct filter_parse_error *pe = NULL;
struct event_filter *filter = NULL;
int err; int err;
err = create_filter_start(filter_string, set_str, &pe, &filter); err = create_filter_start(filter_string, set_str, &pe, filterp);
if (err) if (err)
return err; return err;
err = process_preds(call, filter_string, filter, pe); err = process_preds(call, filter_string, *filterp, pe);
if (err && set_str) if (err && set_str)
append_filter_err(pe, filter); append_filter_err(pe, *filterp);
*filterp = filter;
return err; return err;
} }
@ -1739,24 +1737,22 @@ static int create_system_filter(struct trace_subsystem_dir *dir,
struct trace_array *tr, struct trace_array *tr,
char *filter_str, struct event_filter **filterp) char *filter_str, struct event_filter **filterp)
{ {
struct event_filter *filter = NULL;
struct filter_parse_error *pe = NULL; struct filter_parse_error *pe = NULL;
int err; int err;
err = create_filter_start(filter_str, true, &pe, &filter); err = create_filter_start(filter_str, true, &pe, filterp);
if (!err) { if (!err) {
err = process_system_preds(dir, tr, pe, filter_str); err = process_system_preds(dir, tr, pe, filter_str);
if (!err) { if (!err) {
/* System filters just show a default message */ /* System filters just show a default message */
kfree(filter->filter_string); kfree((*filterp)->filter_string);
filter->filter_string = NULL; (*filterp)->filter_string = NULL;
} else { } else {
append_filter_err(pe, filter); append_filter_err(pe, *filterp);
} }
} }
create_filter_finish(pe); create_filter_finish(pe);
*filterp = filter;
return err; return err;
} }
@ -1764,7 +1760,7 @@ static int create_system_filter(struct trace_subsystem_dir *dir,
int apply_event_filter(struct trace_event_file *file, char *filter_string) int apply_event_filter(struct trace_event_file *file, char *filter_string)
{ {
struct trace_event_call *call = file->event_call; struct trace_event_call *call = file->event_call;
struct event_filter *filter; struct event_filter *filter = NULL;
int err; int err;
if (!strcmp(strstrip(filter_string), "0")) { if (!strcmp(strstrip(filter_string), "0")) {
@ -1817,7 +1813,7 @@ int apply_subsystem_event_filter(struct trace_subsystem_dir *dir,
{ {
struct event_subsystem *system = dir->subsystem; struct event_subsystem *system = dir->subsystem;
struct trace_array *tr = dir->tr; struct trace_array *tr = dir->tr;
struct event_filter *filter; struct event_filter *filter = NULL;
int err = 0; int err = 0;
mutex_lock(&event_mutex); mutex_lock(&event_mutex);
@ -2024,7 +2020,7 @@ int ftrace_profile_set_filter(struct perf_event *event, int event_id,
char *filter_str) char *filter_str)
{ {
int err; int err;
struct event_filter *filter; struct event_filter *filter = NULL;
struct trace_event_call *call; struct trace_event_call *call;
mutex_lock(&event_mutex); mutex_lock(&event_mutex);
@ -2140,7 +2136,7 @@ static struct test_filter_data_t {
#undef YES #undef YES
#undef NO #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; static int test_pred_visited;

View file

@ -446,7 +446,7 @@ static int create_trace_uprobe(int argc, char **argv)
if (ret) if (ret)
goto fail_address_parse; goto fail_address_parse;
inode = igrab(d_inode(path.dentry)); inode = igrab(d_real_inode(path.dentry));
path_put(&path); path_put(&path);
if (!inode || !S_ISREG(inode->i_mode)) { if (!inode || !S_ISREG(inode->i_mode)) {
@ -602,24 +602,9 @@ static int probes_seq_show(struct seq_file *m, void *v)
char c = is_ret_probe(tu) ? 'r' : 'p'; char c = is_ret_probe(tu) ? 'r' : 'p';
int i; int i;
seq_printf(m, "%c:%s/%s", c, tu->tp.call.class->system, seq_printf(m, "%c:%s/%s %s:0x%0*lx", c, tu->tp.call.class->system,
trace_event_name(&tu->tp.call)); trace_event_name(&tu->tp.call), tu->filename,
seq_printf(m, " %s:", tu->filename); (int)(sizeof(void *) * 2), tu->offset);
/* 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;
}
}
for (i = 0; i < tu->tp.nr_args; i++) for (i = 0; i < tu->tp.nr_args; i++)
seq_printf(m, " %s=%s", tu->tp.args[i].name, tu->tp.args[i].comm); seq_printf(m, " %s=%s", tu->tp.args[i].name, tu->tp.args[i].comm);