From e7b870fd2e1443785a2b36c92c6c604fa3399108 Mon Sep 17 00:00:00 2001 From: Felix Morgner Date: Fri, 24 Jul 2026 08:38:38 +0200 Subject: kernel/devfs: re-key devfs storage --- kernel/kernel/filesystem/devfs/filesystem.cpp | 22 ++++++++-------------- kernel/kernel/filesystem/devfs/filesystem.hpp | 4 +++- .../kernel/filesystem/devfs/filesystem.tests.cpp | 2 -- 3 files changed, 11 insertions(+), 17 deletions(-) diff --git a/kernel/kernel/filesystem/devfs/filesystem.cpp b/kernel/kernel/filesystem/devfs/filesystem.cpp index e7874372..b97884e6 100644 --- a/kernel/kernel/filesystem/devfs/filesystem.cpp +++ b/kernel/kernel/filesystem/devfs/filesystem.cpp @@ -9,14 +9,14 @@ #include #include -#include #include +#include #include #include +#include #include -#include #include #include @@ -69,17 +69,10 @@ namespace kernel::filesystem::devfs return kstd::failure(vfs_errc::invalid_inode); } - auto it = std::ranges::find_if(m_inodes, [&](auto const & dev_node) { - if (auto device_inode_ptr = static_cast(dev_node.get())) - { - return device_inode_ptr->device()->name() == name; - } - return false; - }); - - if (it != m_inodes.end()) + auto found = m_inodes.find(kstd::string{name}); + if (found != m_inodes.end()) { - return *it; + return found->second; } return kstd::failure(vfs_errc::no_such_file_or_directory); @@ -94,13 +87,14 @@ namespace kernel::filesystem::devfs auto filesystem::build_device_inode_table() -> void { - m_inodes.clear(); + // TODO: implement clear on flat_map + m_inodes = kstd::flat_map>{}; for (auto const & entry : device_number_registry::get().all()) { if (auto device = entry.device.lock()) { - m_inodes.push_back(kstd::make_shared(device)); + m_inodes.emplace(entry.name, kstd::make_shared(device)); } } } diff --git a/kernel/kernel/filesystem/devfs/filesystem.hpp b/kernel/kernel/filesystem/devfs/filesystem.hpp index 7e58cd83..abc4975a 100644 --- a/kernel/kernel/filesystem/devfs/filesystem.hpp +++ b/kernel/kernel/filesystem/devfs/filesystem.hpp @@ -8,8 +8,10 @@ #include +#include #include #include +#include #include #include @@ -44,7 +46,7 @@ namespace kernel::filesystem::devfs private: auto build_device_inode_table() -> void; - kstd::vector> m_inodes{}; + kstd::flat_map> m_inodes{}; }; } // namespace kernel::filesystem::devfs diff --git a/kernel/kernel/filesystem/devfs/filesystem.tests.cpp b/kernel/kernel/filesystem/devfs/filesystem.tests.cpp index b37b3800..93805440 100644 --- a/kernel/kernel/filesystem/devfs/filesystem.tests.cpp +++ b/kernel/kernel/filesystem/devfs/filesystem.tests.cpp @@ -6,8 +6,6 @@ #include -#include - SCENARIO_METHOD(kernel::tests::filesystem::storage_boot_module_fixture, "Devfs filesystem lookup uses storage management devices", "[filesystem][devfs][filesystem]") { -- cgit v1.2.3