From 52a007ebee4e8ca284ec5767de01c311e9f1860e Mon Sep 17 00:00:00 2001 From: Lukas Oesch Date: Tue, 3 Mar 2026 10:15:20 +0100 Subject: implement major and minor analog to the linux kernel --- kernel/devices/src/storage/StorageManagement.cpp | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) (limited to 'kernel/devices/src/storage/StorageManagement.cpp') diff --git a/kernel/devices/src/storage/StorageManagement.cpp b/kernel/devices/src/storage/StorageManagement.cpp index cfc5239..58d8510 100644 --- a/kernel/devices/src/storage/StorageManagement.cpp +++ b/kernel/devices/src/storage/StorageManagement.cpp @@ -15,6 +15,9 @@ namespace devices::storage { namespace { + constexpr size_t static MINORS_PER_DEVICE = 16; + constinit size_t static next_free_major = 1; + constinit auto static active_storage_management = std::optional{}; constinit auto static active_ram_disk_controller = std::optional{}; } // namespace @@ -45,6 +48,7 @@ namespace devices::storage auto storage_management::add_controller(storage_controller * controller) -> void { + controller->set_ids(next_free_major++, MINORS_PER_DEVICE); m_controllers.at(0) = controller; // TODO BA-FS26 use push_back from kstd:vector } @@ -53,8 +57,12 @@ namespace devices::storage block_device * found = nullptr; std::ranges::find_if(m_controllers, [&](auto const controller) { - found = controller->device_by_major_minor(major, minor); - return found != nullptr; + if (controller != nullptr && controller->major() == major) + { + found = controller->device_by_major_minor(major, minor); + return found != nullptr; + } + return false; }); return found; -- cgit v1.2.3