From 5abb324bb68dfc7608919497a725047956e70c14 Mon Sep 17 00:00:00 2001 From: Felix Morgner Date: Sun, 23 Aug 2026 15:23:28 +0200 Subject: kernel/fs: devfs: simplify implementation --- kernel/kernel/filesystem/devfs/filesystem.cpp | 37 ++++++++------------------- kernel/kernel/filesystem/devfs/filesystem.hpp | 9 +------ 2 files changed, 11 insertions(+), 35 deletions(-) (limited to 'kernel') diff --git a/kernel/kernel/filesystem/devfs/filesystem.cpp b/kernel/kernel/filesystem/devfs/filesystem.cpp index 3e94f2ac..640a01db 100644 --- a/kernel/kernel/filesystem/devfs/filesystem.cpp +++ b/kernel/kernel/filesystem/devfs/filesystem.cpp @@ -10,7 +10,6 @@ #include -#include #include #include #include @@ -51,16 +50,6 @@ namespace kernel::filesystem::devfs auto filesystem::mount(inode_ptr const &) -> kstd::result { m_root_inode = kstd::make_shared(); - - std::ranges::for_each(device_number_registry::get().all(), [&](auto const & numbered) { - if (auto device = numbered.device.lock()) - { - m_inodes.emplace(numbered.name, kstd::make_shared(device)); - } - }); - - device_number_registry::get().subscribe(shared_from_this()); - return mount_result{m_root_inode, nullptr}; } @@ -82,10 +71,17 @@ namespace kernel::filesystem::devfs return kstd::failure(vfs_errc::invalid_inode); } - auto found = std::ranges::find_if(m_inodes, [&](auto const & entry) { return entry.first == name; }); - if (found != m_inodes.end()) + auto entries = device_number_registry::get().all(); + auto found = std::ranges::find_if(entries, [&](auto const & entry) { return entry.name == name; }); + + if (found == entries.end()) + { + return kstd::failure(vfs_errc::no_such_file_or_directory); + } + + if (auto device = found->device.lock()) { - return found->second; + return kstd::make_shared(device); } return kstd::failure(vfs_errc::no_such_file_or_directory); @@ -97,17 +93,4 @@ namespace kernel::filesystem::devfs return kstd::failure(vfs_errc::read_only_file_system); } - auto filesystem::on_device_numbered(device_number_registry::entry const & numbered) -> void - { - if (auto device = numbered.device.lock()) - { - m_inodes.emplace(numbered.name, kstd::make_shared(device)); - } - } - - auto filesystem::on_device_unnumbered(device_number_registry::entry const & numbered) -> void - { - erase_if(m_inodes, [&](auto const & entry) { return entry.first == numbered.name; }); - } - } // namespace kernel::filesystem::devfs \ No newline at end of file diff --git a/kernel/kernel/filesystem/devfs/filesystem.hpp b/kernel/kernel/filesystem/devfs/filesystem.hpp index 7529cd28..147cb692 100644 --- a/kernel/kernel/filesystem/devfs/filesystem.hpp +++ b/kernel/kernel/filesystem/devfs/filesystem.hpp @@ -8,7 +8,6 @@ #include -#include #include #include #include @@ -26,9 +25,7 @@ namespace kernel::filesystem::devfs //! applications to interact with devices using standard file operations. The devfs filesystem dynamically creates //! inodes for devices registered in the system, enabling seamless access to device functionality through the //! filesystem interface. - struct filesystem : kernel::filesystem::filesystem, - kstd::enable_shared_from_this, - device_number_registry_observer + struct filesystem : kernel::filesystem::filesystem { auto mount(inode_ptr const & backing_inode) -> kstd::result override; @@ -43,11 +40,7 @@ namespace kernel::filesystem::devfs -> kstd::result override; private: - auto on_device_numbered(device_number_registry::entry const & numbered) -> void override; - auto on_device_unnumbered(device_number_registry::entry const & numbered) -> void override; - inode_ptr m_root_inode{}; - kstd::flat_map> m_inodes{}; }; } // namespace kernel::filesystem::devfs -- cgit v1.2.3