aboutsummaryrefslogtreecommitdiffstats
path: root/kernel
diff options
context:
space:
mode:
Diffstat (limited to 'kernel')
-rw-r--r--kernel/trace/trace_events.c13
1 files changed, 9 insertions, 4 deletions
diff --git a/kernel/trace/trace_events.c b/kernel/trace/trace_events.c
index 285589354cb7..09782d623c93 100644
--- a/kernel/trace/trace_events.c
+++ b/kernel/trace/trace_events.c
@@ -838,7 +838,7 @@ enum {
838 838
839static void *f_next(struct seq_file *m, void *v, loff_t *pos) 839static void *f_next(struct seq_file *m, void *v, loff_t *pos)
840{ 840{
841 struct ftrace_event_call *call = m->private; 841 struct ftrace_event_call *call = event_file_data(m->private);
842 struct ftrace_event_field *field; 842 struct ftrace_event_field *field;
843 struct list_head *common_head = &ftrace_common_fields; 843 struct list_head *common_head = &ftrace_common_fields;
844 struct list_head *head = trace_get_fields(call); 844 struct list_head *head = trace_get_fields(call);
@@ -882,6 +882,11 @@ static void *f_start(struct seq_file *m, loff_t *pos)
882 loff_t l = 0; 882 loff_t l = 0;
883 void *p; 883 void *p;
884 884
885 /* ->stop() is called even if ->start() fails */
886 mutex_lock(&event_mutex);
887 if (!event_file_data(m->private))
888 return ERR_PTR(-ENODEV);
889
885 /* Start by showing the header */ 890 /* Start by showing the header */
886 if (!*pos) 891 if (!*pos)
887 return (void *)FORMAT_HEADER; 892 return (void *)FORMAT_HEADER;
@@ -896,7 +901,7 @@ static void *f_start(struct seq_file *m, loff_t *pos)
896 901
897static int f_show(struct seq_file *m, void *v) 902static int f_show(struct seq_file *m, void *v)
898{ 903{
899 struct ftrace_event_call *call = m->private; 904 struct ftrace_event_call *call = event_file_data(m->private);
900 struct ftrace_event_field *field; 905 struct ftrace_event_field *field;
901 const char *array_descriptor; 906 const char *array_descriptor;
902 907
@@ -947,6 +952,7 @@ static int f_show(struct seq_file *m, void *v)
947 952
948static void f_stop(struct seq_file *m, void *p) 953static void f_stop(struct seq_file *m, void *p)
949{ 954{
955 mutex_unlock(&event_mutex);
950} 956}
951 957
952static const struct seq_operations trace_format_seq_ops = { 958static const struct seq_operations trace_format_seq_ops = {
@@ -958,7 +964,6 @@ static const struct seq_operations trace_format_seq_ops = {
958 964
959static int trace_format_open(struct inode *inode, struct file *file) 965static int trace_format_open(struct inode *inode, struct file *file)
960{ 966{
961 struct ftrace_event_call *call = inode->i_private;
962 struct seq_file *m; 967 struct seq_file *m;
963 int ret; 968 int ret;
964 969
@@ -967,7 +972,7 @@ static int trace_format_open(struct inode *inode, struct file *file)
967 return ret; 972 return ret;
968 973
969 m = file->private_data; 974 m = file->private_data;
970 m->private = call; 975 m->private = file;
971 976
972 return 0; 977 return 0;
973} 978}