diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2018-04-12 23:54:01 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2018-04-12 23:54:01 -0400 |
commit | affb028071492048ce1d8fa37e5e4236152b02cc (patch) | |
tree | 1452ac1a442fa1384580b2683caec0ec0d39a158 /kernel | |
parent | ee9294d6ddbd418807ae49f4ab4e6441c9da2a18 (diff) | |
parent | 0b3dec05dbbce023f4f25aba975b5d253c313ebb (diff) |
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
Diffstat (limited to 'kernel')
-rw-r--r-- | kernel/trace/trace_events_filter.c | 26 | ||||
-rw-r--r-- | kernel/trace/trace_uprobe.c | 23 |
2 files changed, 15 insertions, 34 deletions
diff --git a/kernel/trace/trace_events_filter.c b/kernel/trace/trace_events_filter.c index 1bda4ec95e18..9b4716bb8bb0 100644 --- a/kernel/trace/trace_events_filter.c +++ b/kernel/trace/trace_events_filter.c | |||
@@ -1704,18 +1704,16 @@ static int create_filter(struct trace_event_call *call, | |||
1704 | struct event_filter **filterp) | 1704 | struct event_filter **filterp) |
1705 | { | 1705 | { |
1706 | struct filter_parse_error *pe = NULL; | 1706 | struct filter_parse_error *pe = NULL; |
1707 | struct event_filter *filter = NULL; | ||
1708 | int err; | 1707 | int err; |
1709 | 1708 | ||
1710 | err = create_filter_start(filter_string, set_str, &pe, &filter); | 1709 | err = create_filter_start(filter_string, set_str, &pe, filterp); |
1711 | if (err) | 1710 | if (err) |
1712 | return err; | 1711 | return err; |
1713 | 1712 | ||
1714 | err = process_preds(call, filter_string, filter, pe); | 1713 | err = process_preds(call, filter_string, *filterp, pe); |
1715 | if (err && set_str) | 1714 | if (err && set_str) |
1716 | append_filter_err(pe, filter); | 1715 | append_filter_err(pe, *filterp); |
1717 | 1716 | ||
1718 | *filterp = filter; | ||
1719 | return err; | 1717 | return err; |
1720 | } | 1718 | } |
1721 | 1719 | ||
@@ -1739,24 +1737,22 @@ static int create_system_filter(struct trace_subsystem_dir *dir, | |||
1739 | struct trace_array *tr, | 1737 | struct trace_array *tr, |
1740 | char *filter_str, struct event_filter **filterp) | 1738 | char *filter_str, struct event_filter **filterp) |
1741 | { | 1739 | { |
1742 | struct event_filter *filter = NULL; | ||
1743 | struct filter_parse_error *pe = NULL; | 1740 | struct filter_parse_error *pe = NULL; |
1744 | int err; | 1741 | int err; |
1745 | 1742 | ||
1746 | err = create_filter_start(filter_str, true, &pe, &filter); | 1743 | err = create_filter_start(filter_str, true, &pe, filterp); |
1747 | if (!err) { | 1744 | if (!err) { |
1748 | err = process_system_preds(dir, tr, pe, filter_str); | 1745 | err = process_system_preds(dir, tr, pe, filter_str); |
1749 | if (!err) { | 1746 | if (!err) { |
1750 | /* System filters just show a default message */ | 1747 | /* System filters just show a default message */ |
1751 | kfree(filter->filter_string); | 1748 | kfree((*filterp)->filter_string); |
1752 | filter->filter_string = NULL; | 1749 | (*filterp)->filter_string = NULL; |
1753 | } else { | 1750 | } else { |
1754 | append_filter_err(pe, filter); | 1751 | append_filter_err(pe, *filterp); |
1755 | } | 1752 | } |
1756 | } | 1753 | } |
1757 | create_filter_finish(pe); | 1754 | create_filter_finish(pe); |
1758 | 1755 | ||
1759 | *filterp = filter; | ||
1760 | return err; | 1756 | return err; |
1761 | } | 1757 | } |
1762 | 1758 | ||
@@ -1764,7 +1760,7 @@ static int create_system_filter(struct trace_subsystem_dir *dir, | |||
1764 | int apply_event_filter(struct trace_event_file *file, char *filter_string) | 1760 | int apply_event_filter(struct trace_event_file *file, char *filter_string) |
1765 | { | 1761 | { |
1766 | struct trace_event_call *call = file->event_call; | 1762 | struct trace_event_call *call = file->event_call; |
1767 | struct event_filter *filter; | 1763 | struct event_filter *filter = NULL; |
1768 | int err; | 1764 | int err; |
1769 | 1765 | ||
1770 | if (!strcmp(strstrip(filter_string), "0")) { | 1766 | if (!strcmp(strstrip(filter_string), "0")) { |
@@ -1817,7 +1813,7 @@ int apply_subsystem_event_filter(struct trace_subsystem_dir *dir, | |||
1817 | { | 1813 | { |
1818 | struct event_subsystem *system = dir->subsystem; | 1814 | struct event_subsystem *system = dir->subsystem; |
1819 | struct trace_array *tr = dir->tr; | 1815 | struct trace_array *tr = dir->tr; |
1820 | struct event_filter *filter; | 1816 | struct event_filter *filter = NULL; |
1821 | int err = 0; | 1817 | int err = 0; |
1822 | 1818 | ||
1823 | mutex_lock(&event_mutex); | 1819 | mutex_lock(&event_mutex); |
@@ -2024,7 +2020,7 @@ int ftrace_profile_set_filter(struct perf_event *event, int event_id, | |||
2024 | char *filter_str) | 2020 | char *filter_str) |
2025 | { | 2021 | { |
2026 | int err; | 2022 | int err; |
2027 | struct event_filter *filter; | 2023 | struct event_filter *filter = NULL; |
2028 | struct trace_event_call *call; | 2024 | struct trace_event_call *call; |
2029 | 2025 | ||
2030 | mutex_lock(&event_mutex); | 2026 | mutex_lock(&event_mutex); |
@@ -2140,7 +2136,7 @@ static struct test_filter_data_t { | |||
2140 | #undef YES | 2136 | #undef YES |
2141 | #undef NO | 2137 | #undef NO |
2142 | 2138 | ||
2143 | #define DATA_CNT (sizeof(test_filter_data)/sizeof(struct test_filter_data_t)) | 2139 | #define DATA_CNT ARRAY_SIZE(test_filter_data) |
2144 | 2140 | ||
2145 | static int test_pred_visited; | 2141 | static int test_pred_visited; |
2146 | 2142 | ||
diff --git a/kernel/trace/trace_uprobe.c b/kernel/trace/trace_uprobe.c index 2014f4351ae0..469ba7ecd14b 100644 --- a/kernel/trace/trace_uprobe.c +++ b/kernel/trace/trace_uprobe.c | |||
@@ -446,7 +446,7 @@ static int create_trace_uprobe(int argc, char **argv) | |||
446 | if (ret) | 446 | if (ret) |
447 | goto fail_address_parse; | 447 | goto fail_address_parse; |
448 | 448 | ||
449 | inode = igrab(d_inode(path.dentry)); | 449 | inode = igrab(d_real_inode(path.dentry)); |
450 | path_put(&path); | 450 | path_put(&path); |
451 | 451 | ||
452 | if (!inode || !S_ISREG(inode->i_mode)) { | 452 | if (!inode || !S_ISREG(inode->i_mode)) { |
@@ -602,24 +602,9 @@ static int probes_seq_show(struct seq_file *m, void *v) | |||
602 | char c = is_ret_probe(tu) ? 'r' : 'p'; | 602 | char c = is_ret_probe(tu) ? 'r' : 'p'; |
603 | int i; | 603 | int i; |
604 | 604 | ||
605 | seq_printf(m, "%c:%s/%s", c, tu->tp.call.class->system, | 605 | seq_printf(m, "%c:%s/%s %s:0x%0*lx", c, tu->tp.call.class->system, |
606 | trace_event_name(&tu->tp.call)); | 606 | trace_event_name(&tu->tp.call), tu->filename, |
607 | seq_printf(m, " %s:", tu->filename); | 607 | (int)(sizeof(void *) * 2), tu->offset); |
608 | |||
609 | /* Don't print "0x (null)" when offset is 0 */ | ||
610 | if (tu->offset) { | ||
611 | seq_printf(m, "0x%px", (void *)tu->offset); | ||
612 | } else { | ||
613 | switch (sizeof(void *)) { | ||
614 | case 4: | ||
615 | seq_printf(m, "0x00000000"); | ||
616 | break; | ||
617 | case 8: | ||
618 | default: | ||
619 | seq_printf(m, "0x0000000000000000"); | ||
620 | break; | ||
621 | } | ||
622 | } | ||
623 | 608 | ||
624 | for (i = 0; i < tu->tp.nr_args; i++) | 609 | for (i = 0; i < tu->tp.nr_args; i++) |
625 | seq_printf(m, " %s=%s", tu->tp.args[i].name, tu->tp.args[i].comm); | 610 | seq_printf(m, " %s=%s", tu->tp.args[i].name, tu->tp.args[i].comm); |