diff --git a/Kernel/Devices/Storage/StorageManagement.cpp b/Kernel/Devices/Storage/StorageManagement.cpp index 6e333e0dce..4a7d9c8a5d 100644 --- a/Kernel/Devices/Storage/StorageManagement.cpp +++ b/Kernel/Devices/Storage/StorageManagement.cpp @@ -81,6 +81,13 @@ u32 StorageManagement::generate_relative_sd_controller_id(Badge> StorageManagement::try_to_initialize_partition_table(StorageDevice& device) const +ErrorOr> StorageManagement::try_to_initialize_partition_table(StorageDevice& device) const { auto mbr_table_or_error = Partition::MBRPartitionTable::try_to_initialize(device); if (!mbr_table_or_error.is_error()) @@ -205,21 +212,23 @@ UNMAP_AFTER_INIT ErrorOr> StorageManage return TRY(Partition::GUIDPartitionTable::try_to_initialize(device)); } +ErrorOr StorageManagement::enumerate_device_partitions(StorageDevice& device) +{ + auto partition_table = TRY(try_to_initialize_partition_table(device)); + for (auto partition_metadata : partition_table->partitions()) { + auto disk_partition = DiskPartition::create(device, generate_partition_minor_number(), partition_metadata); + device.add_partition(disk_partition); + } + + return {}; +} + UNMAP_AFTER_INIT void StorageManagement::enumerate_disk_partitions() { VERIFY(!m_storage_devices.is_empty()); for (auto& device : m_storage_devices) { - auto partition_table_or_error = try_to_initialize_partition_table(device); - if (partition_table_or_error.is_error()) - continue; - auto partition_table = partition_table_or_error.release_value(); - for (size_t partition_index = 0; partition_index < partition_table->partitions_count(); partition_index++) { - auto partition_metadata = partition_table->partition(partition_index); - if (!partition_metadata.has_value()) - continue; - auto disk_partition = DiskPartition::create(device, generate_partition_minor_number(), partition_metadata.value()); - device.add_partition(disk_partition); - } + // FIXME: Maybe handle this error in some way shape or form + (void)enumerate_device_partitions(device); } } diff --git a/Kernel/Devices/Storage/StorageManagement.h b/Kernel/Devices/Storage/StorageManagement.h index 832f16ddff..9f2d1fc261 100644 --- a/Kernel/Devices/Storage/StorageManagement.h +++ b/Kernel/Devices/Storage/StorageManagement.h @@ -40,11 +40,13 @@ public: static u32 generate_relative_ata_controller_id(Badge); static u32 generate_relative_sd_controller_id(Badge); + void add_device(StorageDevice&); void remove_device(StorageDevice&); private: void enumerate_pci_controllers(bool force_pio, bool nvme_poll); void enumerate_storage_devices(); + ErrorOr enumerate_device_partitions(StorageDevice&); void enumerate_disk_partitions(); void determine_boot_device();