static inline struct event_filter *event_filter(struct trace_event_file *file)
 {
-       return file->filter;
+       return rcu_dereference_protected(file->filter,
+                                        lockdep_is_held(&event_mutex));
+
 }
 
 /* caller must hold event_mutex */
 static inline void __remove_filter(struct trace_event_file *file)
 {
        filter_disable(file);
-       remove_filter_string(file->filter);
+       remove_filter_string(event_filter(file));
 }
 
 static void filter_free_subsystem_preds(struct trace_subsystem_dir *dir,
 
 static inline void __free_subsystem_filter(struct trace_event_file *file)
 {
-       __free_filter(file->filter);
+       __free_filter(event_filter(file));
        file->filter = NULL;
 }
 
        list_for_each_entry(file, &tr->events, list) {
                if (file->system != dir || !file->filter)
                        continue;
-               __free_filter(file->filter);
+               __free_subsystem_filter(file);
        }
        __free_filter(filter);
 }