• Oleg Nesterov's avatar
    tracing: Change remove_event_file_dir() to clear "d_subdirs"->i_private · bf682c31
    Oleg Nesterov authored
    Change remove_event_file_dir() to clear ->i_private for every
    file we are going to remove.
    
    We need to check file->dir != NULL because event_create_dir()
    can fail. debugfs_remove_recursive(NULL) is fine but the patch
    moves it under the same check anyway for readability.
    
    spin_lock(d_lock) and "d_inode != NULL" check are not needed
    afaics, but I do not understand this code enough.
    
    tracing_open_generic_file() and tracing_release_generic_file()
    can go away, ftrace_enable_fops and ftrace_event_filter_fops()
    use tracing_open_generic() but only to check tracing_disabled.
    
    This fixes all races with event_remove() or instance_delete().
    f_op->read/write/whatever can never use the freed file/call,
    all event/* files were changed to check and use ->i_private
    under event_mutex.
    
    Note: this doesn't not fix other problems, event_remove() can
    destroy the active ftrace_event_call, we need more changes but
    those changes are completely orthogonal.
    
    Link: http://lkml.kernel.org/r/20130728183527.GB16723@redhat.comReviewed-by: default avatarMasami Hiramatsu <masami.hiramatsu.pt@hitachi.com>
    Signed-off-by: default avatarOleg Nesterov <oleg@redhat.com>
    Signed-off-by: default avatarSteven Rostedt <rostedt@goodmis.org>
    bf682c31
trace_events.c 61.8 KB