From 21a5d0ae7afa0345936fb5124518c679efe3df2a Mon Sep 17 00:00:00 2001 From: Felix Morgner Date: Mon, 13 Jul 2026 22:35:22 +0200 Subject: kernel/fs: separate out checks --- kernel/kernel/filesystem/devfs/filesystem.cpp | 7 ++++++- kernel/kernel/filesystem/ext2/filesystem.cpp | 7 ++++++- kernel/kernel/filesystem/vfs.cpp | 8 ++++++++ 3 files changed, 20 insertions(+), 2 deletions(-) (limited to 'kernel') diff --git a/kernel/kernel/filesystem/devfs/filesystem.cpp b/kernel/kernel/filesystem/devfs/filesystem.cpp index 59a1ae9c..d91ee1e4 100644 --- a/kernel/kernel/filesystem/devfs/filesystem.cpp +++ b/kernel/kernel/filesystem/devfs/filesystem.cpp @@ -51,11 +51,16 @@ namespace kernel::filesystem::devfs auto filesystem::lookup(kstd::shared_ptr const & parent, std::string_view name) const -> std::expected, kstd::error_code> { - if (!parent || !parent->is_directory()) + if (!parent) { return std::unexpected{vfs_errc::invalid_inode}; } + if (!parent->is_directory()) + { + return std::unexpected{vfs_errc::not_a_directory}; + } + if (parent.get() != m_root_inode.get()) { return std::unexpected{vfs_errc::invalid_inode}; diff --git a/kernel/kernel/filesystem/ext2/filesystem.cpp b/kernel/kernel/filesystem/ext2/filesystem.cpp index 78a8aead..7aa2bd2d 100644 --- a/kernel/kernel/filesystem/ext2/filesystem.cpp +++ b/kernel/kernel/filesystem/ext2/filesystem.cpp @@ -81,11 +81,16 @@ namespace kernel::filesystem::ext2 auto filesystem::lookup(kstd::shared_ptr const & parent, std::string_view name) const -> std::expected, kstd::error_code> { - if (!parent || !parent->is_directory()) + if (!parent) { return std::unexpected{vfs_errc::invalid_inode}; } + if (!parent->is_directory()) + { + return std::unexpected{vfs_errc::not_a_directory}; + } + auto * ext2_parent = static_cast(parent.get()); auto const & inode_data = ext2_parent->data(); kstd::vector buffer(block_size()); diff --git a/kernel/kernel/filesystem/vfs.cpp b/kernel/kernel/filesystem/vfs.cpp index e0e79094..31b9e4d0 100644 --- a/kernel/kernel/filesystem/vfs.cpp +++ b/kernel/kernel/filesystem/vfs.cpp @@ -158,6 +158,14 @@ namespace kernel::filesystem { return std::unexpected{vfs_errc::mount_point_not_found}; } + else if (remove_result == mount_table::operation_result::cannot_be_unmounted) + { + return std::unexpected{vfs_errc::mount_busy}; + } + else if (remove_result == mount_table::operation_result::has_child_mounts) + { + return std::unexpected{vfs_errc::has_child_mounts}; + } return std::unexpected{vfs_errc::unmount_failed}; } -- cgit v1.2.3