diff options
Diffstat (limited to 'kernel/trace/trace_events.c')
-rw-r--r-- | kernel/trace/trace_events.c | 19 |
1 files changed, 16 insertions, 3 deletions
diff --git a/kernel/trace/trace_events.c b/kernel/trace/trace_events.c index 7da1dfeb322e..c4de47fc5cca 100644 --- a/kernel/trace/trace_events.c +++ b/kernel/trace/trace_events.c | |||
@@ -494,8 +494,8 @@ static void remove_event_file_dir(struct ftrace_event_file *file) | |||
494 | if (dir) { | 494 | if (dir) { |
495 | spin_lock(&dir->d_lock); /* probably unneeded */ | 495 | spin_lock(&dir->d_lock); /* probably unneeded */ |
496 | list_for_each_entry(child, &dir->d_subdirs, d_child) { | 496 | list_for_each_entry(child, &dir->d_subdirs, d_child) { |
497 | if (child->d_inode) /* probably unneeded */ | 497 | if (d_really_is_positive(child)) /* probably unneeded */ |
498 | child->d_inode->i_private = NULL; | 498 | d_inode(child)->i_private = NULL; |
499 | } | 499 | } |
500 | spin_unlock(&dir->d_lock); | 500 | spin_unlock(&dir->d_lock); |
501 | 501 | ||
@@ -565,6 +565,7 @@ static int __ftrace_set_clr_event(struct trace_array *tr, const char *match, | |||
565 | static int ftrace_set_clr_event(struct trace_array *tr, char *buf, int set) | 565 | static int ftrace_set_clr_event(struct trace_array *tr, char *buf, int set) |
566 | { | 566 | { |
567 | char *event = NULL, *sub = NULL, *match; | 567 | char *event = NULL, *sub = NULL, *match; |
568 | int ret; | ||
568 | 569 | ||
569 | /* | 570 | /* |
570 | * The buf format can be <subsystem>:<event-name> | 571 | * The buf format can be <subsystem>:<event-name> |
@@ -590,7 +591,13 @@ static int ftrace_set_clr_event(struct trace_array *tr, char *buf, int set) | |||
590 | event = NULL; | 591 | event = NULL; |
591 | } | 592 | } |
592 | 593 | ||
593 | return __ftrace_set_clr_event(tr, match, sub, event, set); | 594 | ret = __ftrace_set_clr_event(tr, match, sub, event, set); |
595 | |||
596 | /* Put back the colon to allow this to be called again */ | ||
597 | if (buf) | ||
598 | *(buf - 1) = ':'; | ||
599 | |||
600 | return ret; | ||
594 | } | 601 | } |
595 | 602 | ||
596 | /** | 603 | /** |
@@ -1753,6 +1760,8 @@ static void update_event_printk(struct ftrace_event_call *call, | |||
1753 | ptr++; | 1760 | ptr++; |
1754 | /* Check for alpha chars like ULL */ | 1761 | /* Check for alpha chars like ULL */ |
1755 | } while (isalnum(*ptr)); | 1762 | } while (isalnum(*ptr)); |
1763 | if (!*ptr) | ||
1764 | break; | ||
1756 | /* | 1765 | /* |
1757 | * A number must have some kind of delimiter after | 1766 | * A number must have some kind of delimiter after |
1758 | * it, and we can ignore that too. | 1767 | * it, and we can ignore that too. |
@@ -1779,12 +1788,16 @@ static void update_event_printk(struct ftrace_event_call *call, | |||
1779 | do { | 1788 | do { |
1780 | ptr++; | 1789 | ptr++; |
1781 | } while (isalnum(*ptr) || *ptr == '_'); | 1790 | } while (isalnum(*ptr) || *ptr == '_'); |
1791 | if (!*ptr) | ||
1792 | break; | ||
1782 | /* | 1793 | /* |
1783 | * If what comes after this variable is a '.' or | 1794 | * If what comes after this variable is a '.' or |
1784 | * '->' then we can continue to ignore that string. | 1795 | * '->' then we can continue to ignore that string. |
1785 | */ | 1796 | */ |
1786 | if (*ptr == '.' || (ptr[0] == '-' && ptr[1] == '>')) { | 1797 | if (*ptr == '.' || (ptr[0] == '-' && ptr[1] == '>')) { |
1787 | ptr += *ptr == '.' ? 1 : 2; | 1798 | ptr += *ptr == '.' ? 1 : 2; |
1799 | if (!*ptr) | ||
1800 | break; | ||
1788 | goto skip_more; | 1801 | goto skip_more; |
1789 | } | 1802 | } |
1790 | /* | 1803 | /* |