From abc1eaff369ffdde73388fcca7f5cf4b19fecdaf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?kleines=20Filmr=C3=B6llchen?= Date: Sat, 17 Jun 2023 17:48:10 +0200 Subject: [PATCH] Kernel/VirtualFileSystem: Count bind mounts towards normal FS mountcount This is correct since unmount doesn't treat bind mounts specially. If we don't do this, unmounting bind mounts will call prepare_for_last_unmount() on the guest FS much too early, which will most likely fail due to a busy file system. --- Kernel/FileSystem/VirtualFileSystem.cpp | 3 +++ 1 file changed, 3 insertions(+) diff --git a/Kernel/FileSystem/VirtualFileSystem.cpp b/Kernel/FileSystem/VirtualFileSystem.cpp index 8199c80b07..925cb05a4c 100644 --- a/Kernel/FileSystem/VirtualFileSystem.cpp +++ b/Kernel/FileSystem/VirtualFileSystem.cpp @@ -217,6 +217,9 @@ ErrorOr VirtualFileSystem::bind_mount(Custody& source, Custody& mount_poin return EBUSY; } + // A bind mount also counts as a normal mount from the perspective of unmount(), + // so we need to keep track of it in order for prepare_to_clear_last_mount() to work properly. + new_mount->guest_fs().mounted_count({}).with([&](auto& count) { count++; }); // NOTE: Leak the mount pointer so it can be added to the mount list, but it won't be // deleted after being added. mounts.append(*new_mount.leak_ptr());