|
@@ -684,15 +684,25 @@ static ssize_t
|
|
|
event_enable_read(struct file *filp, char __user *ubuf, size_t cnt,
|
|
|
loff_t *ppos)
|
|
|
{
|
|
|
- struct ftrace_event_file *file = filp->private_data;
|
|
|
+ struct ftrace_event_file *file;
|
|
|
+ unsigned long flags;
|
|
|
char buf[4] = "0";
|
|
|
|
|
|
- if (file->flags & FTRACE_EVENT_FL_ENABLED &&
|
|
|
- !(file->flags & FTRACE_EVENT_FL_SOFT_DISABLED))
|
|
|
+ mutex_lock(&event_mutex);
|
|
|
+ file = event_file_data(filp);
|
|
|
+ if (likely(file))
|
|
|
+ flags = file->flags;
|
|
|
+ mutex_unlock(&event_mutex);
|
|
|
+
|
|
|
+ if (!file)
|
|
|
+ return -ENODEV;
|
|
|
+
|
|
|
+ if (flags & FTRACE_EVENT_FL_ENABLED &&
|
|
|
+ !(flags & FTRACE_EVENT_FL_SOFT_DISABLED))
|
|
|
strcpy(buf, "1");
|
|
|
|
|
|
- if (file->flags & FTRACE_EVENT_FL_SOFT_DISABLED ||
|
|
|
- file->flags & FTRACE_EVENT_FL_SOFT_MODE)
|
|
|
+ if (flags & FTRACE_EVENT_FL_SOFT_DISABLED ||
|
|
|
+ flags & FTRACE_EVENT_FL_SOFT_MODE)
|
|
|
strcat(buf, "*");
|
|
|
|
|
|
strcat(buf, "\n");
|
|
@@ -704,13 +714,10 @@ static ssize_t
|
|
|
event_enable_write(struct file *filp, const char __user *ubuf, size_t cnt,
|
|
|
loff_t *ppos)
|
|
|
{
|
|
|
- struct ftrace_event_file *file = filp->private_data;
|
|
|
+ struct ftrace_event_file *file;
|
|
|
unsigned long val;
|
|
|
int ret;
|
|
|
|
|
|
- if (!file)
|
|
|
- return -EINVAL;
|
|
|
-
|
|
|
ret = kstrtoul_from_user(ubuf, cnt, 10, &val);
|
|
|
if (ret)
|
|
|
return ret;
|
|
@@ -722,8 +729,11 @@ event_enable_write(struct file *filp, const char __user *ubuf, size_t cnt,
|
|
|
switch (val) {
|
|
|
case 0:
|
|
|
case 1:
|
|
|
+ ret = -ENODEV;
|
|
|
mutex_lock(&event_mutex);
|
|
|
- ret = ftrace_event_enable_disable(file, val);
|
|
|
+ file = event_file_data(filp);
|
|
|
+ if (likely(file))
|
|
|
+ ret = ftrace_event_enable_disable(file, val);
|
|
|
mutex_unlock(&event_mutex);
|
|
|
break;
|
|
|
|