Hello, If we run the following C code: unshare(CLONE_NEWNS); int fd = open("/dev/loop0", O_RDONLY) unshare(CLONE_NEWNS); Then after the second unshare, the mount hierarchy created by the first unshare is fully dereferenced and gets torn down, leaving the file pointed to by fd with a broken dentry. Specifically, subsequent calls to d_path on its path resolve to "/loop0". I was able to confirm this with drgn, and it has caused an unexpected failure in mkosi/systemd-repart attempting to mount a btrfs filesystem through such an fd, since btrfs uses d_path to resolve the source device file path fully. I confirmed that this is definitely due to the first unshare mount namespace going away by: 1. printks/bpftrace the copy_root path in the kernel 2. rewriting my test program to fork after the first unshare to keep that namespace referenced. In this case, the fd is not broken after the second unshare. My question is: Is this expected behavior with respect to mount reference counts and namespace teardown? If I mount a filesystem and have a running program with an open file descriptor in that filesystem, I would expect unmounting that filesystem to fail with EBUSY, so it stands to reason that the automatic unmount that happens from tearing down the mount namespace of the first unshare should respect similar semantics and either return EBUSY or at least have the lazy umount behavior and not wreck the still referenced mount objects. If this behavior seems like a bug to people better versed in the expected behavior of namespaces, I would be happy to work on a fix. Thanks, Boris