aboutsummaryrefslogtreecommitdiff
path: root/kernel
diff options
context:
space:
mode:
Diffstat (limited to 'kernel')
-rw-r--r--kernel/kernel/filesystem/devfs/filesystem.cpp7
-rw-r--r--kernel/kernel/filesystem/ext2/filesystem.cpp7
-rw-r--r--kernel/kernel/filesystem/vfs.cpp8
3 files changed, 20 insertions, 2 deletions
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<kernel::filesystem::inode> const & parent, std::string_view name) const
-> std::expected<kstd::shared_ptr<kernel::filesystem::inode>, 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<kernel::filesystem::inode> const & parent, std::string_view name) const
-> std::expected<kstd::shared_ptr<kernel::filesystem::inode>, 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<inode *>(parent.get());
auto const & inode_data = ext2_parent->data();
kstd::vector<uint8_t> 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};
}