aboutsummaryrefslogtreecommitdiff
path: root/kernel
diff options
context:
space:
mode:
Diffstat (limited to 'kernel')
-rw-r--r--kernel/include/kernel/filesystem/vfs.hpp2
-rw-r--r--kernel/src/filesystem/vfs.cpp15
2 files changed, 13 insertions, 4 deletions
diff --git a/kernel/include/kernel/filesystem/vfs.hpp b/kernel/include/kernel/filesystem/vfs.hpp
index 01cd2ea..b6d4c4c 100644
--- a/kernel/include/kernel/filesystem/vfs.hpp
+++ b/kernel/include/kernel/filesystem/vfs.hpp
@@ -36,6 +36,8 @@ namespace filesystem
kstd::vector<std::optional<device_node_entry>> m_device_nodes; // TODO BA-FS26 remove again, use devtempfs
vfs() = default;
+ auto init_internal() -> void;
+
auto make_device_node(kstd::shared_ptr<devices::device> const & device) -> void;
[[nodiscard]] auto resolve_path(std::string_view path) -> std::optional<dentry>;
diff --git a/kernel/src/filesystem/vfs.cpp b/kernel/src/filesystem/vfs.cpp
index 2c4a4d5..ece3080 100644
--- a/kernel/src/filesystem/vfs.cpp
+++ b/kernel/src/filesystem/vfs.cpp
@@ -32,21 +32,28 @@ namespace filesystem
}
active_vfs.emplace(vfs{});
+ active_vfs->init_internal();
+ }
+ auto vfs::init_internal() -> void
+ {
auto storage_mgmt = devices::storage::storage_management::get();
// TODO BA-FS26 fix mounting boot_device
if (auto boot_device = storage_mgmt.determine_boot_device())
{
- active_vfs->m_root_fs = kstd::make_shared<ext2::ext2_filesystem>();
- active_vfs->m_root_dentry = kstd::make_shared<dentry>(nullptr, active_vfs->m_root_fs->root_inode());
- // if (active_vfs->do_mount("/", active_vfs->m_root_fs) != 0)
+ m_root_fs = kstd::make_shared<ext2::ext2_filesystem>();
+
+ m_root_fs->mount(boot_device);
+
+ m_root_dentry = kstd::make_shared<dentry>(nullptr, m_root_fs->root_inode());
+ // if (do_mount("/", m_root_fs) != 0)
// {
// kapi::system::panic("[FILESYSTEM] Failed to mount root filesystem.");
// }
// TODO BA-FS26 use do_mount when tempdevfs is implemented -> just call /dev/ with all devices in devtempfs
std::ranges::for_each(storage_mgmt.all_controllers(), [&](auto controller) {
- std::ranges::for_each(controller->all_devices(), [&](auto device) { active_vfs->make_device_node(device); });
+ std::ranges::for_each(controller->all_devices(), [&](auto device) { make_device_node(device); });
});
}
else