diff --git a/Kernel/FileSystem/VirtualFileSystem.cpp b/Kernel/FileSystem/VirtualFileSystem.cpp index 925cb05a4c..2e76bc732f 100644 --- a/Kernel/FileSystem/VirtualFileSystem.cpp +++ b/Kernel/FileSystem/VirtualFileSystem.cpp @@ -267,15 +267,18 @@ ErrorOr VirtualFileSystem::unmount(Custody& mountpoint_custody) { auto& guest_inode = mountpoint_custody.inode(); auto custody_path = TRY(mountpoint_custody.try_serialize_absolute_path()); - dbgln("VirtualFileSystem: unmount called with inode {} on mountpoint {}", guest_inode.identifier(), custody_path->view()); + return unmount(guest_inode, custody_path->view()); +} +ErrorOr VirtualFileSystem::unmount(Inode& guest_inode, StringView custody_path) +{ return m_file_backed_file_systems_list.with_exclusive([&](auto& file_backed_fs_list) -> ErrorOr { TRY(m_mounts.with([&](auto& mounts) -> ErrorOr { for (auto& mount : mounts) { if (&mount.guest() != &guest_inode) continue; auto mountpoint_path = TRY(mount.absolute_path()); - if (custody_path->view() != mountpoint_path->view()) + if (custody_path != mountpoint_path->view()) continue; NonnullRefPtr fs = mount.guest_fs(); TRY(fs->prepare_to_unmount(mount.guest())); diff --git a/Kernel/FileSystem/VirtualFileSystem.h b/Kernel/FileSystem/VirtualFileSystem.h index 7491c8a82d..802b6f73c4 100644 --- a/Kernel/FileSystem/VirtualFileSystem.h +++ b/Kernel/FileSystem/VirtualFileSystem.h @@ -62,6 +62,7 @@ public: ErrorOr bind_mount(Custody& source, Custody& mount_point, int flags); ErrorOr remount(Custody& mount_point, int new_flags); ErrorOr unmount(Custody& mount_point); + ErrorOr unmount(Inode& guest_inode, StringView custody_path); ErrorOr> open(Credentials const&, StringView path, int options, mode_t mode, Custody& base, Optional = {}); ErrorOr> open(Process const&, Credentials const&, StringView path, int options, mode_t mode, Custody& base, Optional = {});