summaryrefslogtreecommitdiffstats
path: root/kernel
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@linux-foundation.org>2018-04-12 23:54:01 -0400
committerLinus Torvalds <torvalds@linux-foundation.org>2018-04-12 23:54:01 -0400
commitaffb028071492048ce1d8fa37e5e4236152b02cc (patch)
tree1452ac1a442fa1384580b2683caec0ec0d39a158 /kernel
parentee9294d6ddbd418807ae49f4ab4e6441c9da2a18 (diff)
parent0b3dec05dbbce023f4f25aba975b5d253c313ebb (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.c26
-rw-r--r--kernel/trace/trace_uprobe.c23
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,
1764int apply_event_filter(struct trace_event_file *file, char *filter_string) 1760int 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
2145static int test_pred_visited; 2141static 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);