aboutsummaryrefslogtreecommitdiff
path: root/kernel/devices/src/storage/StorageManagement.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'kernel/devices/src/storage/StorageManagement.cpp')
-rw-r--r--kernel/devices/src/storage/StorageManagement.cpp12
1 files changed, 10 insertions, 2 deletions
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<storage_management>{};
constinit auto static active_ram_disk_controller = std::optional<ram_disk::ram_disk_controller>{};
} // 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;