• Christian Brauner's avatar
    fs: properly document __lookup_mnt() · 104026c2
    Christian Brauner authored
    The comment on top of __lookup_mnt() states that it finds the first
    mount implying that there could be multiple mounts mounted at the same
    dentry with the same parent.
    
    On older kernels "shadow mounts" could be created during mount
    propagation. So if a mount @M in the destination propagation tree
    already had a child mount @p mounted at @mp then any mount @n we
    propagated to @M at the same @mp would be appended after the preexisting
    mount @p in @mount_hashtable. This was a completely direct way of
    creating shadow mounts.
    
    That direct way is gone but there are still subtle ways to create shadow
    mounts. For example, when attaching a source mnt @mnt to a shared mount.
    The root of the source mnt @mnt might be overmounted by a mount @o after
    we finished path lookup but before we acquired the namespace semaphore
    to copy the source mount tree @mnt.
    
    After we acquired the namespace lock @mnt is copied including @o
    covering it. After we attach @mnt to a shared mount @dest_mnt we end up
    propagation it to all it's peer and slaves @d. If @d already has a mount
    @n mounted on top of it we tuck @mnt beneath @n. This means, we mount
    @mnt at @d and mount @n on @mnt. Now we have both @o and @n mounted on
    the same mountpoint at @mnt.
    
    Explain this in the documentation as this is pretty subtle.
    Reviewed-by: default avatarSeth Forshee (DigitalOcean) <sforshee@kernel.org>
    Message-Id: <20230202-fs-move-mount-replace-v4-2-98f3d80d7eaa@kernel.org>
    Signed-off-by: default avatarChristian Brauner <brauner@kernel.org>
    104026c2
namespace.c 115 KB