It may be worth a discussion of whether linkat() could be given a flag to allow the destination to be replaced or if a new syscall should be made for this - or whether it should be disallowed entirely. A set of patches has been posted by Omar Sandoval that makes this possible: https://lore.kernel.org/linux-fsdevel/cover.1524549513.git.osandov@xxxxxx/ though it only includes filesystem support for btrfs. This could be useful for cachefiles: https://lore.kernel.org/linux-fsdevel/3326.1579019665@xxxxxxxxxxxxxxxxxxxxxx/ and overlayfs. David