From 0b5084780e4a89dcaccbda5823495c9cdd62b006 Mon Sep 17 00:00:00 2001 From: "marcel.braun" Date: Mon, 30 Mar 2026 20:52:25 +0200 Subject: Rename devfs filesystem files --- kernel/src/filesystem/devfs/filesystem.cpp | 58 ++++++++++++++++++++++++++++++ 1 file changed, 58 insertions(+) create mode 100644 kernel/src/filesystem/devfs/filesystem.cpp (limited to 'kernel/src/filesystem/devfs/filesystem.cpp') diff --git a/kernel/src/filesystem/devfs/filesystem.cpp b/kernel/src/filesystem/devfs/filesystem.cpp new file mode 100644 index 0000000..e7d0e13 --- /dev/null +++ b/kernel/src/filesystem/devfs/filesystem.cpp @@ -0,0 +1,58 @@ +#include "kernel/filesystem/devfs/filesystem.hpp" + +#include "kernel/devices/device.hpp" +#include "kernel/devices/storage/storage_management.hpp" +#include "kernel/filesystem/devfs/inode.hpp" +#include "kernel/filesystem/device_inode.hpp" +#include "kernel/filesystem/inode.hpp" + +#include + +#include +#include + +namespace kernel::filesystem::devfs +{ + auto filesystem::mount(kstd::shared_ptr const &) -> int + { + m_root_inode = kstd::make_shared(); + build_device_inode_table(); + + return 0; + } + + auto filesystem::lookup(kstd::shared_ptr const & parent, std::string_view name) + -> kstd::shared_ptr + { + if (!parent || !parent->is_directory()) + { + return nullptr; + } + + if (parent.get() != m_root_inode.get()) + { + return nullptr; + } + + auto it = std::ranges::find_if(m_inodes, [&](auto const & dev_node) { + auto device_inode_ptr = static_cast(dev_node.get()); + if (!device_inode_ptr) + { + return false; + } + return device_inode_ptr->device()->name() == name; + }); + return (it != m_inodes.end()) ? *it : nullptr; + } + + auto filesystem::build_device_inode_table() -> void + { + m_inodes.clear(); + + auto storage_mgmt = devices::storage::storage_management::get(); + std::ranges::for_each(storage_mgmt.all_controllers(), [&](auto const & controller) { + std::ranges::for_each(controller->all_devices(), + [&](auto const & device) { m_inodes.push_back(kstd::make_shared(device)); }); + }); + } +} // namespace kernel::filesystem::devfs \ No newline at end of file -- cgit v1.2.3 From 846135ba5cdfa545124b97c74182f5eada9a403a Mon Sep 17 00:00:00 2001 From: "marcel.braun" Date: Mon, 30 Mar 2026 21:20:25 +0200 Subject: Rename ram_disk and storage files --- kernel/src/filesystem/devfs/filesystem.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'kernel/src/filesystem/devfs/filesystem.cpp') diff --git a/kernel/src/filesystem/devfs/filesystem.cpp b/kernel/src/filesystem/devfs/filesystem.cpp index e7d0e13..94c9b05 100644 --- a/kernel/src/filesystem/devfs/filesystem.cpp +++ b/kernel/src/filesystem/devfs/filesystem.cpp @@ -1,7 +1,7 @@ #include "kernel/filesystem/devfs/filesystem.hpp" #include "kernel/devices/device.hpp" -#include "kernel/devices/storage/storage_management.hpp" +#include "kernel/devices/storage/management.hpp" #include "kernel/filesystem/devfs/inode.hpp" #include "kernel/filesystem/device_inode.hpp" #include "kernel/filesystem/inode.hpp" @@ -49,7 +49,7 @@ namespace kernel::filesystem::devfs { m_inodes.clear(); - auto storage_mgmt = devices::storage::storage_management::get(); + auto storage_mgmt = devices::storage::management::get(); std::ranges::for_each(storage_mgmt.all_controllers(), [&](auto const & controller) { std::ranges::for_each(controller->all_devices(), [&](auto const & device) { m_inodes.push_back(kstd::make_shared(device)); }); -- cgit v1.2.3 From 9e85f9d1f34d08213a918d9c1b0845c179e323af Mon Sep 17 00:00:00 2001 From: Lukas Oesch Date: Tue, 31 Mar 2026 08:56:17 +0200 Subject: move device into kapi --- kernel/src/filesystem/devfs/filesystem.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'kernel/src/filesystem/devfs/filesystem.cpp') diff --git a/kernel/src/filesystem/devfs/filesystem.cpp b/kernel/src/filesystem/devfs/filesystem.cpp index 94c9b05..9043ac5 100644 --- a/kernel/src/filesystem/devfs/filesystem.cpp +++ b/kernel/src/filesystem/devfs/filesystem.cpp @@ -1,6 +1,6 @@ #include "kernel/filesystem/devfs/filesystem.hpp" -#include "kernel/devices/device.hpp" +#include "kapi/devices/device.hpp" #include "kernel/devices/storage/management.hpp" #include "kernel/filesystem/devfs/inode.hpp" #include "kernel/filesystem/device_inode.hpp" @@ -13,7 +13,7 @@ namespace kernel::filesystem::devfs { - auto filesystem::mount(kstd::shared_ptr const &) -> int + auto filesystem::mount(kstd::shared_ptr const &) -> int { m_root_inode = kstd::make_shared(); build_device_inode_table(); -- cgit v1.2.3 From 2793770dc6eba30b73b4a4993618d2cbe184790e Mon Sep 17 00:00:00 2001 From: Lukas Oesch Date: Wed, 8 Apr 2026 15:21:10 +0200 Subject: implement unmount, improve error codes --- kernel/src/filesystem/devfs/filesystem.cpp | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) (limited to 'kernel/src/filesystem/devfs/filesystem.cpp') diff --git a/kernel/src/filesystem/devfs/filesystem.cpp b/kernel/src/filesystem/devfs/filesystem.cpp index 9043ac5..03b4218 100644 --- a/kernel/src/filesystem/devfs/filesystem.cpp +++ b/kernel/src/filesystem/devfs/filesystem.cpp @@ -1,6 +1,7 @@ #include "kernel/filesystem/devfs/filesystem.hpp" #include "kapi/devices/device.hpp" + #include "kernel/devices/storage/management.hpp" #include "kernel/filesystem/devfs/inode.hpp" #include "kernel/filesystem/device_inode.hpp" @@ -13,12 +14,12 @@ namespace kernel::filesystem::devfs { - auto filesystem::mount(kstd::shared_ptr const &) -> int + auto filesystem::mount(kstd::shared_ptr const &) -> operation_result { m_root_inode = kstd::make_shared(); build_device_inode_table(); - return 0; + return operation_result::success; } auto filesystem::lookup(kstd::shared_ptr const & parent, std::string_view name) -- cgit v1.2.3 From 5e183b418b0e65dcdffa02a43702a0d6deb43b04 Mon Sep 17 00:00:00 2001 From: Marcel Braun Date: Mon, 13 Apr 2026 21:17:50 +0200 Subject: Back filesystem by inode and not device --- kernel/src/filesystem/devfs/filesystem.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'kernel/src/filesystem/devfs/filesystem.cpp') diff --git a/kernel/src/filesystem/devfs/filesystem.cpp b/kernel/src/filesystem/devfs/filesystem.cpp index 03b4218..dd60c5d 100644 --- a/kernel/src/filesystem/devfs/filesystem.cpp +++ b/kernel/src/filesystem/devfs/filesystem.cpp @@ -14,7 +14,7 @@ namespace kernel::filesystem::devfs { - auto filesystem::mount(kstd::shared_ptr const &) -> operation_result + auto filesystem::mount(kstd::shared_ptr const &) -> operation_result { m_root_inode = kstd::make_shared(); build_device_inode_table(); -- cgit v1.2.3 From 2d8fed40bd0d0f8144783b6b344dc79944291b72 Mon Sep 17 00:00:00 2001 From: Felix Morgner Date: Thu, 23 Apr 2026 13:31:17 +0200 Subject: chore: organize includes --- kernel/src/filesystem/devfs/filesystem.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'kernel/src/filesystem/devfs/filesystem.cpp') diff --git a/kernel/src/filesystem/devfs/filesystem.cpp b/kernel/src/filesystem/devfs/filesystem.cpp index dd60c5d..76b9489 100644 --- a/kernel/src/filesystem/devfs/filesystem.cpp +++ b/kernel/src/filesystem/devfs/filesystem.cpp @@ -1,12 +1,12 @@ #include "kernel/filesystem/devfs/filesystem.hpp" -#include "kapi/devices/device.hpp" - #include "kernel/devices/storage/management.hpp" #include "kernel/filesystem/devfs/inode.hpp" #include "kernel/filesystem/device_inode.hpp" #include "kernel/filesystem/inode.hpp" +#include "kapi/devices/device.hpp" + #include #include -- cgit v1.2.3 From f6f10575f75ac23d06e1d94f7861611503daa7af Mon Sep 17 00:00:00 2001 From: Felix Morgner Date: Thu, 23 Apr 2026 14:03:28 +0200 Subject: chore: banish relative includes --- kernel/src/filesystem/devfs/filesystem.cpp | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) (limited to 'kernel/src/filesystem/devfs/filesystem.cpp') diff --git a/kernel/src/filesystem/devfs/filesystem.cpp b/kernel/src/filesystem/devfs/filesystem.cpp index 76b9489..96e40a8 100644 --- a/kernel/src/filesystem/devfs/filesystem.cpp +++ b/kernel/src/filesystem/devfs/filesystem.cpp @@ -1,11 +1,11 @@ -#include "kernel/filesystem/devfs/filesystem.hpp" +#include -#include "kernel/devices/storage/management.hpp" -#include "kernel/filesystem/devfs/inode.hpp" -#include "kernel/filesystem/device_inode.hpp" -#include "kernel/filesystem/inode.hpp" +#include +#include +#include +#include -#include "kapi/devices/device.hpp" +#include #include -- cgit v1.2.3 From 3b2f36d242eb895fd893ec7a674ff608f44f69ac Mon Sep 17 00:00:00 2001 From: Lukas Oesch Date: Sat, 16 May 2026 16:12:36 +0200 Subject: refactoring --- kernel/src/filesystem/devfs/filesystem.cpp | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) (limited to 'kernel/src/filesystem/devfs/filesystem.cpp') diff --git a/kernel/src/filesystem/devfs/filesystem.cpp b/kernel/src/filesystem/devfs/filesystem.cpp index 96e40a8..f0d8bf7 100644 --- a/kernel/src/filesystem/devfs/filesystem.cpp +++ b/kernel/src/filesystem/devfs/filesystem.cpp @@ -1,5 +1,6 @@ #include +#include "kernel/filesystem/filesystem.hpp" #include #include #include @@ -22,7 +23,7 @@ namespace kernel::filesystem::devfs return operation_result::success; } - auto filesystem::lookup(kstd::shared_ptr const & parent, std::string_view name) + auto filesystem::lookup(kstd::shared_ptr const & parent, std::string_view name) const -> kstd::shared_ptr { if (!parent || !parent->is_directory()) @@ -36,12 +37,11 @@ namespace kernel::filesystem::devfs } auto it = std::ranges::find_if(m_inodes, [&](auto const & dev_node) { - auto device_inode_ptr = static_cast(dev_node.get()); - if (!device_inode_ptr) + if (auto device_inode_ptr = static_cast(dev_node.get())) { - return false; + return device_inode_ptr->device()->name() == name; } - return device_inode_ptr->device()->name() == name; + return false; }); return (it != m_inodes.end()) ? *it : nullptr; } -- cgit v1.2.3 From dc9bd3b44cbbd0235a176f05c27eb15ff31f5e09 Mon Sep 17 00:00:00 2001 From: Felix Morgner Date: Fri, 22 May 2026 20:18:05 +0200 Subject: kernel/vfs: prepare fs type registration support --- kernel/src/filesystem/devfs/filesystem.cpp | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) (limited to 'kernel/src/filesystem/devfs/filesystem.cpp') diff --git a/kernel/src/filesystem/devfs/filesystem.cpp b/kernel/src/filesystem/devfs/filesystem.cpp index f0d8bf7..c61a3d0 100644 --- a/kernel/src/filesystem/devfs/filesystem.cpp +++ b/kernel/src/filesystem/devfs/filesystem.cpp @@ -5,6 +5,7 @@ #include #include #include +#include #include @@ -15,6 +16,27 @@ namespace kernel::filesystem::devfs { + struct type final : kernel::filesystem::type + { + [[nodiscard]] auto name() const noexcept -> std::string_view override + { + return "devfs"; + } + + [[nodiscard]] auto requires_device() const noexcept -> bool override + { + return false; + } + + [[nodiscard]] auto make_instance() const -> kstd::shared_ptr override + { + return kstd::make_shared(); + } + } const constinit type_instance{}; + + [[gnu::section(".vfs_type_descriptors"), gnu::used]] + auto const * const type_descriptor_pointer = static_cast(&type_instance); + auto filesystem::mount(kstd::shared_ptr const &) -> operation_result { m_root_inode = kstd::make_shared(); -- cgit v1.2.3 From 86170be29f6cb72b29865db0975de09bec89f854 Mon Sep 17 00:00:00 2001 From: Felix Morgner Date: Mon, 1 Jun 2026 10:40:39 +0200 Subject: kernel/vfs: rename type descriptor section --- kernel/src/filesystem/devfs/filesystem.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'kernel/src/filesystem/devfs/filesystem.cpp') diff --git a/kernel/src/filesystem/devfs/filesystem.cpp b/kernel/src/filesystem/devfs/filesystem.cpp index c61a3d0..1aaa0d1 100644 --- a/kernel/src/filesystem/devfs/filesystem.cpp +++ b/kernel/src/filesystem/devfs/filesystem.cpp @@ -34,7 +34,7 @@ namespace kernel::filesystem::devfs } } const constinit type_instance{}; - [[gnu::section(".vfs_type_descriptors"), gnu::used]] + [[gnu::section("vfs_type_descriptors"), gnu::used]] auto const * const type_descriptor_pointer = static_cast(&type_instance); auto filesystem::mount(kstd::shared_ptr const &) -> operation_result -- cgit v1.2.3 From d2d4fa3330a09f421b8658c077166cc493532b9e Mon Sep 17 00:00:00 2001 From: Felix Morgner Date: Tue, 2 Jun 2026 10:54:17 +0200 Subject: kernel/vfs: extract fs type registry --- kernel/src/filesystem/devfs/filesystem.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'kernel/src/filesystem/devfs/filesystem.cpp') diff --git a/kernel/src/filesystem/devfs/filesystem.cpp b/kernel/src/filesystem/devfs/filesystem.cpp index 1aaa0d1..ce887ff 100644 --- a/kernel/src/filesystem/devfs/filesystem.cpp +++ b/kernel/src/filesystem/devfs/filesystem.cpp @@ -32,10 +32,10 @@ namespace kernel::filesystem::devfs { return kstd::make_shared(); } - } const constinit type_instance{}; + }; - [[gnu::section("vfs_type_descriptors"), gnu::used]] - auto const * const type_descriptor_pointer = static_cast(&type_instance); + [[gnu::used]] + constexpr auto registration = type_registration{}; auto filesystem::mount(kstd::shared_ptr const &) -> operation_result { -- cgit v1.2.3