aboutsummaryrefslogtreecommitdiff
path: root/kernel
diff options
context:
space:
mode:
authorFelix Morgner <felix.morgner@ost.ch>2026-08-22 22:32:32 +0200
committerFelix Morgner <felix.morgner@ost.ch>2026-08-26 11:16:17 +0200
commit9c32495771901e5a8a668aa45801c89daacd5ec4 (patch)
treec6bc69f75e96ac4b26d0a481a690f3dd38a78597 /kernel
parent0967e2140eca2caa8dc4c3412218c6f593878471 (diff)
downloadkernel-9c32495771901e5a8a668aa45801c89daacd5ec4.tar.xz
kernel-9c32495771901e5a8a668aa45801c89daacd5ec4.zip
kernel/fs: prepare for driver state extraction
Diffstat (limited to 'kernel')
-rw-r--r--kernel/kernel/filesystem/devfs/filesystem.cpp5
-rw-r--r--kernel/kernel/filesystem/devfs/filesystem.hpp2
-rw-r--r--kernel/kernel/filesystem/devfs/filesystem.tests.cpp22
-rw-r--r--kernel/kernel/filesystem/ext2/filesystem.cpp6
-rw-r--r--kernel/kernel/filesystem/ext2/filesystem.hpp2
-rw-r--r--kernel/kernel/filesystem/ext2/mount_state.hpp23
-rw-r--r--kernel/kernel/filesystem/filesystem.hpp5
-rw-r--r--kernel/kernel/filesystem/mount.cpp19
-rw-r--r--kernel/kernel/filesystem/mount.hpp11
-rw-r--r--kernel/kernel/filesystem/mount.tests.cpp2
-rw-r--r--kernel/kernel/filesystem/rootfs/filesystem.cpp5
-rw-r--r--kernel/kernel/filesystem/rootfs/filesystem.hpp2
-rw-r--r--kernel/kernel/filesystem/rootfs/filesystem.tests.cpp6
-rw-r--r--kernel/kernel/filesystem/vfs.cpp23
-rw-r--r--kernel/kernel/test_support/filesystem/filesystem.cpp6
-rw-r--r--kernel/kernel/test_support/filesystem/filesystem.hpp2
16 files changed, 90 insertions, 51 deletions
diff --git a/kernel/kernel/filesystem/devfs/filesystem.cpp b/kernel/kernel/filesystem/devfs/filesystem.cpp
index 5d8ef7f2..60d174fe 100644
--- a/kernel/kernel/filesystem/devfs/filesystem.cpp
+++ b/kernel/kernel/filesystem/devfs/filesystem.cpp
@@ -48,8 +48,7 @@ namespace kernel::filesystem::devfs
[[gnu::used]]
constexpr auto registration = type_registration<type>{};
- auto filesystem::mount(kstd::shared_ptr<kernel::filesystem::inode> const &)
- -> kstd::result<kstd::shared_ptr<kernel::filesystem::inode>>
+ auto filesystem::mount(kstd::shared_ptr<kernel::filesystem::inode> const &) -> kstd::result<mount_result>
{
m_root_inode = kstd::make_shared<inode>();
@@ -62,7 +61,7 @@ namespace kernel::filesystem::devfs
device_number_registry::get().subscribe(shared_from_this());
- return m_root_inode;
+ return mount_result{m_root_inode, nullptr};
}
auto filesystem::lookup(kstd::shared_ptr<kernel::filesystem::inode> const & parent, std::string_view name) const
diff --git a/kernel/kernel/filesystem/devfs/filesystem.hpp b/kernel/kernel/filesystem/devfs/filesystem.hpp
index accc8a49..875f3957 100644
--- a/kernel/kernel/filesystem/devfs/filesystem.hpp
+++ b/kernel/kernel/filesystem/devfs/filesystem.hpp
@@ -31,7 +31,7 @@ namespace kernel::filesystem::devfs
device_number_registry_observer
{
auto mount(kstd::shared_ptr<kernel::filesystem::inode> const & backing_inode)
- -> kstd::result<kstd::shared_ptr<kernel::filesystem::inode>> override;
+ -> kstd::result<mount_result> override;
[[nodiscard]] auto lookup(kstd::shared_ptr<kernel::filesystem::inode> const & parent, std::string_view name) const
-> kstd::result<kstd::shared_ptr<kernel::filesystem::inode>> override;
diff --git a/kernel/kernel/filesystem/devfs/filesystem.tests.cpp b/kernel/kernel/filesystem/devfs/filesystem.tests.cpp
index 7a0de2d9..20523b71 100644
--- a/kernel/kernel/filesystem/devfs/filesystem.tests.cpp
+++ b/kernel/kernel/filesystem/devfs/filesystem.tests.cpp
@@ -34,14 +34,14 @@ SCENARIO_METHOD(kernel::tests::filesystem::storage_boot_module_fixture,
THEN("lookup on root finds ram0 device inode")
{
- auto inode = fs->lookup(*root, "ram0");
+ auto inode = fs->lookup(root->first, "ram0");
REQUIRE(inode);
REQUIRE(inode.value()->is_device());
}
THEN("lookup of an unknown device returns error")
{
- auto inode = fs->lookup(*root, "ram99");
+ auto inode = fs->lookup(root->first, "ram99");
REQUIRE(!inode);
}
@@ -51,13 +51,13 @@ SCENARIO_METHOD(kernel::tests::filesystem::storage_boot_module_fixture,
auto other_root = other_fs->mount(nullptr);
CHECK(other_root);
- auto inode = fs->lookup(*other_root, "ram0");
+ auto inode = fs->lookup(other_root->first, "ram0");
REQUIRE(!inode);
}
THEN("lookup with a non-directory parent returns error")
{
- auto non_directory_inode = fs->lookup(*root, "ram0");
+ auto non_directory_inode = fs->lookup(root->first, "ram0");
REQUIRE(non_directory_inode);
REQUIRE_FALSE(non_directory_inode.value()->is_directory());
@@ -67,7 +67,7 @@ SCENARIO_METHOD(kernel::tests::filesystem::storage_boot_module_fixture,
THEN("create_inode always returns an error")
{
- auto result = fs->create_inode(*root, "new_device", kapi::filesystem::file_type::regular);
+ auto result = fs->create_inode(root->first, "new_device", kapi::filesystem::file_type::regular);
REQUIRE(!result);
}
}
@@ -82,9 +82,9 @@ SCENARIO_METHOD(kernel::tests::filesystem::storage_boot_module_fixture,
THEN("lookup finds all generated RAM devices")
{
- REQUIRE(fs->lookup(*root, "ram0"));
- REQUIRE(fs->lookup(*root, "ram1"));
- REQUIRE(fs->lookup(*root, "ram2"));
+ REQUIRE(fs->lookup(root->first, "ram0"));
+ REQUIRE(fs->lookup(root->first, "ram1"));
+ REQUIRE(fs->lookup(root->first, "ram2"));
}
}
}
@@ -100,7 +100,7 @@ SCENARIO("Devfs filesystem updates", "[filesystem][devfs]")
auto bus = kstd::make_shared<kapi::devices::bus>("devfs_live_update_bus");
kapi::devices::get_root_bus()->add_child(bus);
- REQUIRE_FALSE(fs->lookup(*root, "devfs_live_update_device_node"));
+ REQUIRE_FALSE(fs->lookup(root->first, "devfs_live_update_device_node"));
WHEN("a device is attached, bound, and published")
{
@@ -113,7 +113,7 @@ SCENARIO("Devfs filesystem updates", "[filesystem][devfs]")
THEN("devfs finds it immediately")
{
- REQUIRE(fs->lookup(*root, "devfs_live_update_device_node"));
+ REQUIRE(fs->lookup(root->first, "devfs_live_update_device_node"));
}
WHEN("the device is detached")
@@ -122,7 +122,7 @@ SCENARIO("Devfs filesystem updates", "[filesystem][devfs]")
THEN("devfs does not find it anymore")
{
- REQUIRE_FALSE(fs->lookup(*root, "devfs_live_update_device_node"));
+ REQUIRE_FALSE(fs->lookup(root->first, "devfs_live_update_device_node"));
}
}
}
diff --git a/kernel/kernel/filesystem/ext2/filesystem.cpp b/kernel/kernel/filesystem/ext2/filesystem.cpp
index 115f6028..a0a0dbf1 100644
--- a/kernel/kernel/filesystem/ext2/filesystem.cpp
+++ b/kernel/kernel/filesystem/ext2/filesystem.cpp
@@ -5,6 +5,7 @@
#include <kernel/filesystem/ext2/error.hpp>
#include <kernel/filesystem/ext2/inode.hpp>
#include <kernel/filesystem/ext2/linked_directory_entry.hpp>
+#include <kernel/filesystem/ext2/mount_state.hpp>
#include <kernel/filesystem/ext2/superblock.hpp>
#include <kernel/filesystem/filesystem.hpp>
#include <kernel/filesystem/inode.hpp>
@@ -106,7 +107,7 @@ namespace kernel::filesystem::ext2
}
auto filesystem::mount(kstd::shared_ptr<kernel::filesystem::inode> const & backing_inode)
- -> kstd::result<kstd::shared_ptr<kernel::filesystem::inode>>
+ -> kstd::result<mount_result>
{
m_backing_inode = backing_inode;
@@ -146,7 +147,8 @@ namespace kernel::filesystem::ext2
return kstd::failure(ext2_errc::invalid_root_inode);
}
- return root;
+ return mount_result{*root,
+ kstd::make_shared<mount_state>(m_superblock, m_block_group_descriptors, m_backing_inode)};
}
auto filesystem::lookup(kstd::shared_ptr<kernel::filesystem::inode> const & parent, std::string_view name) const
diff --git a/kernel/kernel/filesystem/ext2/filesystem.hpp b/kernel/kernel/filesystem/ext2/filesystem.hpp
index 23629928..fd304c00 100644
--- a/kernel/kernel/filesystem/ext2/filesystem.hpp
+++ b/kernel/kernel/filesystem/ext2/filesystem.hpp
@@ -76,7 +76,7 @@ namespace kernel::filesystem::ext2
struct filesystem final : kernel::filesystem::filesystem
{
auto mount(kstd::shared_ptr<kernel::filesystem::inode> const & backing_inode)
- -> kstd::result<kstd::shared_ptr<kernel::filesystem::inode>> override;
+ -> kstd::result<mount_result> override;
[[nodiscard]] auto lookup(kstd::shared_ptr<kernel::filesystem::inode> const & parent, std::string_view name) const
-> kstd::result<kstd::shared_ptr<kernel::filesystem::inode>> override;
diff --git a/kernel/kernel/filesystem/ext2/mount_state.hpp b/kernel/kernel/filesystem/ext2/mount_state.hpp
new file mode 100644
index 00000000..b9c2d5f7
--- /dev/null
+++ b/kernel/kernel/filesystem/ext2/mount_state.hpp
@@ -0,0 +1,23 @@
+#ifndef TEACHOS_KERNEL_FILESYSTEM_EXT2_MOUNT_STATE_HPP
+#define TEACHOS_KERNEL_FILESYSTEM_EXT2_MOUNT_STATE_HPP
+
+#include <kernel/filesystem/ext2/block_group_descriptor.hpp>
+#include <kernel/filesystem/ext2/superblock.hpp>
+#include <kernel/filesystem/inode.hpp>
+
+#include <kstd/memory.hpp>
+#include <kstd/vector.hpp>
+
+namespace kernel::filesystem::ext2
+{
+
+ struct mount_state
+ {
+ struct superblock superblock;
+ kstd::vector<block_group_descriptor> block_group_descriptors;
+ kstd::shared_ptr<kernel::filesystem::inode> backing_inode;
+ };
+
+} // namespace kernel::filesystem::ext2
+
+#endif \ No newline at end of file
diff --git a/kernel/kernel/filesystem/filesystem.hpp b/kernel/kernel/filesystem/filesystem.hpp
index cae36967..83f9b54d 100644
--- a/kernel/kernel/filesystem/filesystem.hpp
+++ b/kernel/kernel/filesystem/filesystem.hpp
@@ -12,6 +12,7 @@
#include <optional>
#include <string_view>
+#include <utility>
namespace kernel::filesystem
{
@@ -21,6 +22,8 @@ namespace kernel::filesystem
//! Filesystem implementations must derive from this class.
struct filesystem
{
+ using mount_result = std::pair<kstd::shared_ptr<inode>, kstd::shared_ptr<void>>;
+
//! Virtual destructor enabling polymorphic destruction.
virtual ~filesystem() = default;
@@ -37,7 +40,7 @@ namespace kernel::filesystem
//!
//! @param backing_inode The inode to use as the backing inode for the filesystem.
//! @return The root inode of the mounted filesystem on success, and error otherwise.
- virtual auto mount(kstd::shared_ptr<inode> const & backing_inode) -> kstd::result<kstd::shared_ptr<inode>> = 0;
+ virtual auto mount(kstd::shared_ptr<inode> const & backing_inode) -> kstd::result<mount_result> = 0;
//! Find a child inode below the given parent inode with the specified name.
//!
diff --git a/kernel/kernel/filesystem/mount.cpp b/kernel/kernel/filesystem/mount.cpp
index 2f0e0d58..d808ff52 100644
--- a/kernel/kernel/filesystem/mount.cpp
+++ b/kernel/kernel/filesystem/mount.cpp
@@ -15,12 +15,13 @@
namespace kernel::filesystem
{
mount::mount(dentry_ptr const & mount_dentry, dentry_ptr const & root_dentry, filesystem_ptr const & fs,
- mount_ptr const & parent_mount, mount_ptr const & source_mount)
+ mount_ptr const & parent_mount, mount_ptr const & source_mount, kstd::shared_ptr<void> driver_data)
: m_mount_dentry(mount_dentry)
, m_root_dentry(root_dentry)
, m_filesystem(fs)
, m_parent_mount(parent_mount)
, m_source_mount(source_mount)
+ , m_driver_data(driver_data)
, m_ref_count(0)
{
if (!m_filesystem)
@@ -30,15 +31,15 @@ namespace kernel::filesystem
}
auto mount::attach(dentry_ptr const & mount_dentry, filesystem_ptr const & fs,
- kstd::shared_ptr<inode> const & root_inode, mount_ptr const & parent_mount,
- mount_ptr const & source_mount) -> mount_ptr
+ kstd::shared_ptr<inode> const & root_inode, kstd::shared_ptr<void> driver_data,
+ mount_ptr const & parent_mount, mount_ptr const & source_mount) -> mount_ptr
{
auto root_dentry = mount_dentry
? kstd::make_shared<dentry>(mount_dentry->parent(), root_inode, mount_dentry->name())
: kstd::make_shared<dentry>(nullptr, root_inode, "/");
auto instance = mount_ptr{
- new mount{mount_dentry, root_dentry, fs, parent_mount, source_mount}
+ new mount{mount_dentry, root_dentry, fs, parent_mount, source_mount, driver_data}
};
root_inode->set_owning_mount(instance);
@@ -55,13 +56,15 @@ namespace kernel::filesystem
kapi::system::panic("[OS:FS] Tried to mount a null filesystem!");
}
- auto root_inode = fs->mount(backing_inode);
- if (!root_inode)
+ auto mount_result = fs->mount(backing_inode);
+ if (!mount_result)
{
- return kstd::failure(root_inode.error());
+ return kstd::failure(mount_result.error());
}
- auto instance = attach(mount_dentry, fs, *root_inode, parent_mount, source_mount);
+ auto [root_inode, driver_data] = *mount_result;
+
+ auto instance = attach(mount_dentry, fs, root_inode, driver_data, parent_mount, source_mount);
instance->m_backing_inode = backing_inode;
return instance;
diff --git a/kernel/kernel/filesystem/mount.hpp b/kernel/kernel/filesystem/mount.hpp
index ac6dae21..e8d9cf6a 100644
--- a/kernel/kernel/filesystem/mount.hpp
+++ b/kernel/kernel/filesystem/mount.hpp
@@ -28,10 +28,12 @@ namespace kernel::filesystem
//! @param mount_dentry The directory entry where the filesystem is mounted.
//! @param fs The filesystem instance being mounted.
//! @param root_inode The backing inode for the filesystem, must not be null.
+ //! @param driver_data The filesystem specific driver data.
//! @param parent_mount The parent mount which contains the mount_dentry.
//! @param source_mount The mount that the filesystem originates from.
auto static attach(dentry_ptr const & mount_dentry, filesystem_ptr const & fs, inode_ptr const & root_inode,
- mount_ptr const & parent_mount, mount_ptr const & source_mount) -> mount_ptr;
+ kstd::shared_ptr<void> driver_data, mount_ptr const & parent_mount,
+ mount_ptr const & source_mount) -> mount_ptr;
//! Create a new mount with the given parameters.
//!
@@ -64,6 +66,9 @@ namespace kernel::filesystem
//! Get the source mount where this mount originates from.
[[nodiscard]] auto source_mount() const -> mount_ptr;
+ //! Get the data of the attached filesystem driver.
+ [[nodiscard]] auto driver_data() const -> kstd::shared_ptr<void>;
+
//! Increment the reference count for this mount.
auto increment_ref_count() -> void;
@@ -90,8 +95,9 @@ namespace kernel::filesystem
//! @param fs The filesystem instance being mounted.
//! @param parent_mount The parent mount which contains the mount_dentry.
//! @param source_mount The mount that the filesystem originates from.
+ //! @param driver_data The driver specific state data.
mount(dentry_ptr const & mount_dentry, dentry_ptr const & root_dentry, filesystem_ptr const & fs,
- mount_ptr const & parent_mount, mount_ptr const & source_mount);
+ mount_ptr const & parent_mount, mount_ptr const & source_mount, kstd::shared_ptr<void> driver_data);
dentry_ptr m_mount_dentry{};
dentry_ptr m_root_dentry{};
@@ -99,6 +105,7 @@ namespace kernel::filesystem
inode_ptr m_backing_inode{};
mount_ptr m_parent_mount{};
kstd::weak_ptr<mount> m_source_mount{};
+ kstd::shared_ptr<void> m_driver_data{};
std::atomic_size_t m_ref_count{0};
};
} // namespace kernel::filesystem
diff --git a/kernel/kernel/filesystem/mount.tests.cpp b/kernel/kernel/filesystem/mount.tests.cpp
index 2c67a7cb..a77134e5 100644
--- a/kernel/kernel/filesystem/mount.tests.cpp
+++ b/kernel/kernel/filesystem/mount.tests.cpp
@@ -22,7 +22,7 @@ SCENARIO("Mount construction", "[filesystem][mount]")
WHEN("attaching a mount with no mount point")
{
- auto mount = kernel::filesystem::mount::attach(nullptr, fs, root_inode, nullptr, nullptr);
+ auto mount = kernel::filesystem::mount::attach(nullptr, fs, root_inode, nullptr, nullptr, nullptr);
THEN("the mount has the correct filesystem, root dentry, mount dentry, and mount path")
{
diff --git a/kernel/kernel/filesystem/rootfs/filesystem.cpp b/kernel/kernel/filesystem/rootfs/filesystem.cpp
index e7a05d55..298e8c94 100644
--- a/kernel/kernel/filesystem/rootfs/filesystem.cpp
+++ b/kernel/kernel/filesystem/rootfs/filesystem.cpp
@@ -45,11 +45,10 @@ namespace kernel::filesystem::rootfs
[[gnu::used]]
constexpr auto registration = type_registration<type>{};
- auto filesystem::mount(kstd::shared_ptr<kernel::filesystem::inode> const &)
- -> kstd::result<kstd::shared_ptr<kernel::filesystem::inode>>
+ auto filesystem::mount(kstd::shared_ptr<kernel::filesystem::inode> const &) -> kstd::result<mount_result>
{
auto root = kstd::make_shared<inode>();
- return root;
+ return mount_result{root, nullptr};
}
auto filesystem::lookup(kstd::shared_ptr<kernel::filesystem::inode> const &, std::string_view) const
diff --git a/kernel/kernel/filesystem/rootfs/filesystem.hpp b/kernel/kernel/filesystem/rootfs/filesystem.hpp
index 5a2a93c0..9f609106 100644
--- a/kernel/kernel/filesystem/rootfs/filesystem.hpp
+++ b/kernel/kernel/filesystem/rootfs/filesystem.hpp
@@ -26,7 +26,7 @@ namespace kernel::filesystem::rootfs
{
//! @copydoc kernel::filesystem::filesystem::mount
auto mount(kstd::shared_ptr<kernel::filesystem::inode> const & backing_inode)
- -> kstd::result<kstd::shared_ptr<kernel::filesystem::inode>> override;
+ -> kstd::result<mount_result> override;
//! @copydoc kernel::filesystem::filesystem::lookup.
//! @return Always returns an error, as rootfs is always empty.
diff --git a/kernel/kernel/filesystem/rootfs/filesystem.tests.cpp b/kernel/kernel/filesystem/rootfs/filesystem.tests.cpp
index cbf8f744..b4297582 100644
--- a/kernel/kernel/filesystem/rootfs/filesystem.tests.cpp
+++ b/kernel/kernel/filesystem/rootfs/filesystem.tests.cpp
@@ -24,9 +24,9 @@ SCENARIO("Rootfs filesystem mount and lookup", "[filesystem][rootfs][filesystem]
THEN("looking up a non-existent directory returns an error")
{
- auto non_existent_inode_1 = fs.lookup(*root, "");
+ auto non_existent_inode_1 = fs.lookup(root->first, "");
REQUIRE(!non_existent_inode_1);
- auto non_existent_inode_2 = fs.lookup(*root, "nonexistent");
+ auto non_existent_inode_2 = fs.lookup(root->first, "nonexistent");
REQUIRE(!non_existent_inode_2);
}
@@ -38,7 +38,7 @@ SCENARIO("Rootfs filesystem mount and lookup", "[filesystem][rootfs][filesystem]
THEN("create_inode always returns an error")
{
- auto result = fs.create_inode(*root, "new_device", kapi::filesystem::file_type::directory);
+ auto result = fs.create_inode(root->first, "new_device", kapi::filesystem::file_type::directory);
REQUIRE(!result);
}
}
diff --git a/kernel/kernel/filesystem/vfs.cpp b/kernel/kernel/filesystem/vfs.cpp
index c39a28c4..6a15d211 100644
--- a/kernel/kernel/filesystem/vfs.cpp
+++ b/kernel/kernel/filesystem/vfs.cpp
@@ -60,13 +60,15 @@ namespace kernel::filesystem
}
auto root_fs = (*root_fs_descriptor)->make_instance();
- auto root_fs_root_inode = root_fs->mount(nullptr);
- if (!root_fs_root_inode)
+ auto root_mount_result = root_fs->mount(nullptr);
+ if (!root_mount_result)
{
- kapi::system::panic("[FILESYSTEM] failed to mount root FS", root_fs_root_inode.error());
+ kapi::system::panic("[FILESYSTEM] failed to mount root FS", root_mount_result.error());
}
- auto root_mount = mount::attach(nullptr, root_fs, *root_fs_root_inode, nullptr, nullptr);
+ auto [root_inode, root_state] = *root_mount_result;
+
+ auto root_mount = mount::attach(nullptr, root_fs, root_inode, root_state, nullptr, nullptr);
m_mount_table.add_mount(root_mount);
// mount devfs at /dev (inside rootfs, temporary, will be shadowed)
@@ -77,12 +79,13 @@ namespace kernel::filesystem
}
auto device_fs = (*device_fs_descriptor)->make_instance();
- auto device_fs_root_inode = device_fs->mount(nullptr);
- if (!device_fs_root_inode)
+ auto device_fs_mount_result = device_fs->mount(nullptr);
+ if (!device_fs_mount_result)
{
- kapi::system::panic("[FILESYSTEM] failed to mount device FS", device_fs_root_inode.error());
+ kapi::system::panic("[FILESYSTEM] failed to mount device FS", device_fs_mount_result.error());
}
- graft_persistent_device_fs(device_fs, *device_fs_root_inode);
+
+ graft_persistent_device_fs(device_fs, device_fs_mount_result->first);
// mount boot fs at / (shadows rootfs), re-graft devfs
auto [boot_device_dentry, boot_device_mount_context] =
@@ -100,7 +103,7 @@ namespace kernel::filesystem
kapi::system::panic("[OS:FS] failed to mount boot FS", mount.error());
}
m_mount_table.add_mount(*mount);
- graft_persistent_device_fs(device_fs, *device_fs_root_inode);
+ graft_persistent_device_fs(device_fs, device_fs_mount_result->first);
}
}
}
@@ -320,7 +323,7 @@ namespace kernel::filesystem
root_mount_point_dentry->add_child(dev_dentry);
}
- auto new_mount = mount::attach(dev_dentry, device_fs, root_inode, root_mount, nullptr);
+ auto new_mount = mount::attach(dev_dentry, device_fs, root_inode, nullptr, root_mount, nullptr);
m_mount_table.add_mount(new_mount);
}
}
diff --git a/kernel/kernel/test_support/filesystem/filesystem.cpp b/kernel/kernel/test_support/filesystem/filesystem.cpp
index 51ce1e9f..8bd46e3c 100644
--- a/kernel/kernel/test_support/filesystem/filesystem.cpp
+++ b/kernel/kernel/test_support/filesystem/filesystem.cpp
@@ -11,13 +11,13 @@
#include <optional>
#include <string_view>
+#include <utility>
namespace kernel::tests::filesystem
{
- auto filesystem::mount(kstd::shared_ptr<kernel::filesystem::inode> const &)
- -> kstd::result<kstd::shared_ptr<kernel::filesystem::inode>>
+ auto filesystem::mount(kstd::shared_ptr<kernel::filesystem::inode> const &) -> kstd::result<mount_result>
{
- return kstd::make_shared<inode>();
+ return std::pair{kstd::make_shared<inode>(), nullptr};
}
auto filesystem::lookup(kstd::shared_ptr<kernel::filesystem::inode> const &, std::string_view) const
diff --git a/kernel/kernel/test_support/filesystem/filesystem.hpp b/kernel/kernel/test_support/filesystem/filesystem.hpp
index fa03f176..d7f64883 100644
--- a/kernel/kernel/test_support/filesystem/filesystem.hpp
+++ b/kernel/kernel/test_support/filesystem/filesystem.hpp
@@ -20,7 +20,7 @@ namespace kernel::tests::filesystem
filesystem() = default;
auto mount(kstd::shared_ptr<kernel::filesystem::inode> const & backing_inode)
- -> kstd::result<kstd::shared_ptr<kernel::filesystem::inode>> override;
+ -> kstd::result<mount_result> override;
[[nodiscard]] auto lookup(kstd::shared_ptr<kernel::filesystem::inode> const & parent, std::string_view name) const
-> kstd::result<kstd::shared_ptr<kernel::filesystem::inode>> override;