• Linus Torvalds's avatar
    eventfs: Get rid of dentry pointers without refcounts · 43aa6f97
    Linus Torvalds authored
    The eventfs inode had pointers to dentries (and child dentries) without
    actually holding a refcount on said pointer.  That is fundamentally
    broken, and while eventfs tried to then maintain coherence with dentries
    going away by hooking into the '.d_iput' callback, that doesn't actually
    work since it's not ordered wrt lookups.
    
    There were two reasonms why eventfs tried to keep a pointer to a dentry:
    
     - the creation of a 'events' directory would actually have a stable
       dentry pointer that it created with tracefs_start_creating().
    
       And it needed that dentry when tearing it all down again in
       eventfs_remove_events_dir().
    
       This use is actually ok, because the special top-level events
       directory dentries are actually stable, not just a temporary cache of
       the eventfs data structures.
    
     - the 'eventfs_inode' (aka ei) needs to stay around as long as there
       are dentries that refer to it.
    
       It then used these dentry pointers as a replacement for doing
       reference counting: it would try to make sure that there was only
       ever one dentry associated with an event_inode, and keep a child
       dentry array around to see which dentries might still refer to the
       parent ei.
    
    This gets rid of the invalid dentry pointer use, and renames the one
    valid case to a different name to make it clear that it's not just any
    random dentry.
    
    The magic child dentry array that is kind of a "reverse reference list"
    is simply replaced by having child dentries take a ref to the ei.  As
    does the directory dentries.  That makes the broken use case go away.
    
    Link: https://lore.kernel.org/linux-trace-kernel/202401291043.e62e89dc-oliver.sang@intel.com/
    Link: https://lore.kernel.org/linux-trace-kernel/20240131185513.280463000@goodmis.org
    
    Cc: stable@vger.kernel.org
    Cc: Masami Hiramatsu <mhiramat@kernel.org>
    Cc: Mark Rutland <mark.rutland@arm.com>
    Cc: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
    Cc: Christian Brauner <brauner@kernel.org>
    Cc: Al Viro <viro@ZenIV.linux.org.uk>
    Cc: Ajay Kaher <ajay.kaher@broadcom.com>
    Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Fixes: c1504e51 ("eventfs: Implement eventfs dir creation functions")
    Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
    Signed-off-by: default avatarSteven Rostedt (Google) <rostedt@goodmis.org>
    43aa6f97
internal.h 2.44 KB