• Al Viro's avatar
    fix EBUSY on umount() from MNT_SHRINKABLE · 81b6b061
    Al Viro authored
    We need the parents of victims alive until namespace_unlock() gets to
    dput() of the (ex-)mountpoints.  However, that screws up the "is it
    busy" checks in case when we have shrinkable mounts that need to be
    killed.  Solution: go ahead and decrement refcounts of parents right
    in umount_tree(), increment them again just before dropping rwsem in
    namespace_unlock() (and let the loop in the end of namespace_unlock()
    finally drop those references for good, as we do now).  Parents can't
    get freed until we drop rwsem - at least one reference is kept until
    then, both in case when parent is among the victims and when it is
    not.  So they'll still be around when we get to namespace_unlock().
    
    Cc: stable@vger.kernel.org # 3.12+
    Signed-off-by: default avatarAl Viro <viro@zeniv.linux.org.uk>
    81b6b061
namespace.c 74.2 KB