• Tejun Heo's avatar
    kernfs: fix locking around kernfs_ops->release() callback · f83f3c51
    Tejun Heo authored
    The release callback may be called from two places - file release
    operation and kernfs open file draining.  kernfs_open_file->mutex is
    used to synchronize the two callsites.  This unfortunately leads to
    possible circular locking because of->mutex is used to protect the
    usual kernfs operations which may use locking constructs which are
    held while removing and thus draining kernfs files.
    
    @of->mutex is for synchronizing concurrent kernfs access operations
    and all we need here is synchronization between the releaes and drain
    paths.  As the drain path has to grab kernfs_open_file_mutex anyway,
    let's use the mutex to synchronize the release operation instead.
    Signed-off-by: default avatarTejun Heo <tj@kernel.org>
    Reported-and-tested-by: default avatarTony Lindgren <tony@atomide.com>
    Fixes: 0e67db2f ("kernfs: add kernfs_ops->open/release() callbacks")
    Acked-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
    f83f3c51
file.c 25.3 KB