aboutsummaryrefslogtreecommitdiff
path: root/kernel/kernel/filesystem/filesystem.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'kernel/kernel/filesystem/filesystem.cpp')
-rw-r--r--kernel/kernel/filesystem/filesystem.cpp23
1 files changed, 8 insertions, 15 deletions
diff --git a/kernel/kernel/filesystem/filesystem.cpp b/kernel/kernel/filesystem/filesystem.cpp
index 84bbdef6..1d222888 100644
--- a/kernel/kernel/filesystem/filesystem.cpp
+++ b/kernel/kernel/filesystem/filesystem.cpp
@@ -8,11 +8,13 @@
#include <kstd/result.hpp>
#include <kstd/system_error.hpp>
+#include <utility>
+
namespace kernel::filesystem
{
auto filesystem::probe_and_mount(kstd::shared_ptr<inode> const & backing_inode)
- -> kstd::result<kstd::shared_ptr<filesystem>>
+ -> kstd::result<std::pair<kstd::shared_ptr<filesystem>, kstd::shared_ptr<inode>>>
{
for (auto & type : type_registry::get().all())
{
@@ -22,27 +24,18 @@ namespace kernel::filesystem
}
auto fs = type->make_instance();
-
- if (fs->mount(backing_inode))
+ auto root = fs->mount(backing_inode);
+ if (!root)
{
- return fs;
+ continue;
}
+
+ return std::pair{fs, *root};
}
return kstd::failure(vfs_errc::unsupported_filesystem);
}
- auto filesystem::mount(kstd::shared_ptr<inode> const & backing_inode) -> kstd::result<void>
- {
- m_backing_inode = backing_inode;
- return kstd::success();
- }
-
- auto filesystem::root_inode() const -> kstd::shared_ptr<inode> const &
- {
- return m_root_inode;
- }
-
auto filesystem::backing_inode() const -> kstd::shared_ptr<inode> const &
{
return m_backing_inode;