• Miklos Szeredi's avatar
    vfs: check unlinked ancestors before mount · eed81007
    Miklos Szeredi authored
    We check submounts before doing d_drop() on a non-empty directory dentry in
    NFS (have_submounts()), but we do not exclude a racing mount.  Nor do we
    prevent mounts to be added to the disconnected subtree using relative paths
    after the d_drop().
    
    This patch fixes these issues by checking for unlinked (unhashed, non-root)
    ancestors before proceeding with the mount.  This is done with rename
    seqlock taken for write and with ->d_lock grabbed on each ancestor in turn,
    including our dentry itself.  This ensures that the only one of
    check_submounts_and_drop() or has_unlinked_ancestor() can succeed.
    Signed-off-by: default avatarMiklos Szeredi <miklos@szeredi.hu>
    Signed-off-by: default avatarAl Viro <viro@zeniv.linux.org.uk>
    eed81007
dcache.c 80.2 KB