aboutsummaryrefslogtreecommitdiff
path: root/kernel
diff options
context:
space:
mode:
authorFelix Morgner <felix.morgner@ost.ch>2026-08-23 15:23:28 +0200
committerFelix Morgner <felix.morgner@ost.ch>2026-08-26 11:16:17 +0200
commit5abb324bb68dfc7608919497a725047956e70c14 (patch)
tree0df4cf9d5e632acff12dcfaaba6666437ca9ad8f /kernel
parent65dc3bd125da94b7faa73e925ea886b617978cd9 (diff)
downloadkernel-5abb324bb68dfc7608919497a725047956e70c14.tar.xz
kernel-5abb324bb68dfc7608919497a725047956e70c14.zip
kernel/fs: devfs: simplify implementation
Diffstat (limited to 'kernel')
-rw-r--r--kernel/kernel/filesystem/devfs/filesystem.cpp37
-rw-r--r--kernel/kernel/filesystem/devfs/filesystem.hpp9
2 files changed, 11 insertions, 35 deletions
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 <kapi/filesystem.hpp>
-#include <kstd/flat_map.hpp>
#include <kstd/memory.hpp>
#include <kstd/result.hpp>
#include <kstd/system_error.hpp>
@@ -51,16 +50,6 @@ namespace kernel::filesystem::devfs
auto filesystem::mount(inode_ptr const &) -> kstd::result<mount_result>
{
m_root_inode = kstd::make_shared<inode>();
-
- 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_inode>(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_inode>(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_inode>(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 <kapi/filesystem.hpp>
-#include <kstd/flat_map.hpp>
#include <kstd/memory.hpp>
#include <kstd/result.hpp>
#include <kstd/string.hpp>
@@ -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<filesystem>,
- device_number_registry_observer
+ struct filesystem : kernel::filesystem::filesystem
{
auto mount(inode_ptr const & backing_inode) -> kstd::result<mount_result> override;
@@ -43,11 +40,7 @@ namespace kernel::filesystem::devfs
-> kstd::result<inode_ptr> 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<kstd::string, kstd::shared_ptr<device_inode>> m_inodes{};
};
} // namespace kernel::filesystem::devfs