From 0d932a49ada8af6314cd3f20c3f597143f1f555d Mon Sep 17 00:00:00 2001 From: Fredrik Holmqvist Date: Sat, 8 Feb 2020 13:35:17 +0100 Subject: [PATCH] Revert "loader: fetch all potential boot partitions for boot device." This reverts commit e888217124fa9fb214ffa790e6a66dca3917f25e. Change-Id: I06be82ac863f615796d9edc86f5ef903b8123a9d Reviewed-on: https://review.haiku-os.org/c/haiku/+/2231 Reviewed-by: waddlesplash --- headers/private/kernel/boot/platform.h | 4 +- src/system/boot/loader/vfs.cpp | 41 ++++++++----------- .../boot/platform/amiga_m68k/devices.cpp | 4 +- .../boot/platform/atari_m68k/devices.cpp | 6 +-- .../boot/platform/bios_ia32/devices.cpp | 6 +-- src/system/boot/platform/efi/devices.cpp | 14 +++---- .../boot/platform/openfirmware/devices.cpp | 6 +-- src/system/boot/platform/pxe_ia32/devices.cpp | 6 +-- src/system/boot/platform/u-boot/devices.cpp | 6 +-- 9 files changed, 44 insertions(+), 49 deletions(-) diff --git a/headers/private/kernel/boot/platform.h b/headers/private/kernel/boot/platform.h index fa00157717..8cbae602a1 100644 --- a/headers/private/kernel/boot/platform.h +++ b/headers/private/kernel/boot/platform.h @@ -58,8 +58,8 @@ namespace boot { extern status_t platform_add_boot_device(struct stage2_args *args, NodeList *devicesList); extern status_t platform_add_block_devices(struct stage2_args *args, NodeList *devicesList); -extern status_t platform_get_boot_partitions(struct stage2_args *args, Node *bootDevice, - NodeList *partitions, NodeList *bootPartitions); +extern status_t platform_get_boot_partition(struct stage2_args *args, Node *bootDevice, + NodeList *partitions, boot::Partition **_partition); extern status_t platform_register_boot_device(Node *device); extern void platform_cleanup_devices(); diff --git a/src/system/boot/loader/vfs.cpp b/src/system/boot/loader/vfs.cpp index 88a3ba6a07..2a57686bde 100644 --- a/src/system/boot/loader/vfs.cpp +++ b/src/system/boot/loader/vfs.cpp @@ -659,33 +659,28 @@ get_boot_file_system(stage2_args* args, BootVolume& _bootVolume) if (error != B_OK) continue; - NodeList bootPartitions; - error = platform_get_boot_partitions(args, device, &gPartitions, &bootPartitions); + Partition *partition; + error = platform_get_boot_partition(args, device, &gPartitions, &partition); if (error != B_OK) continue; - NodeIterator partitionIterator = bootPartitions.GetIterator(); - while (partitionIterator.HasNext()) { - Partition *partition = (Partition*)partitionIterator.Next(); - - Directory *fileSystem; - error = partition->Mount(&fileSystem, true); - if (error != B_OK) { - // this partition doesn't contain any known file system; we - // don't need it anymore - gPartitions.Remove(partition); - delete partition; - continue; - } - - // init the BootVolume - error = _bootVolume.SetTo(fileSystem); - if (error != B_OK) - continue; - - sBootDevice = device; - return B_OK; + Directory *fileSystem; + error = partition->Mount(&fileSystem, true); + if (error != B_OK) { + // this partition doesn't contain any known file system; we + // don't need it anymore + gPartitions.Remove(partition); + delete partition; + continue; } + + // init the BootVolume + error = _bootVolume.SetTo(fileSystem); + if (error != B_OK) + continue; + + sBootDevice = device; + return B_OK; } return B_ERROR; diff --git a/src/system/boot/platform/amiga_m68k/devices.cpp b/src/system/boot/platform/amiga_m68k/devices.cpp index ef33682aff..c6edd40590 100644 --- a/src/system/boot/platform/amiga_m68k/devices.cpp +++ b/src/system/boot/platform/amiga_m68k/devices.cpp @@ -168,8 +168,8 @@ platform_add_boot_device(struct stage2_args *args, NodeList *devicesList) status_t -platform_get_boot_partitions(struct stage2_args *args, Node *bootDevice, - NodeList *list, NodeList *partitions) +platform_get_boot_partition(struct stage2_args *args, Node *bootDevice, + NodeList *list, boot::Partition **_partition) { //TODO diff --git a/src/system/boot/platform/atari_m68k/devices.cpp b/src/system/boot/platform/atari_m68k/devices.cpp index 5738e94369..6f9d95cc5d 100644 --- a/src/system/boot/platform/atari_m68k/devices.cpp +++ b/src/system/boot/platform/atari_m68k/devices.cpp @@ -1189,8 +1189,8 @@ platform_add_boot_device(struct stage2_args *args, NodeList *devicesList) status_t -platform_get_boot_partitions(struct stage2_args *args, Node *bootDevice, - NodeList *list, NodeList *partitionList) +platform_get_boot_partition(struct stage2_args *args, Node *bootDevice, + NodeList *list, boot::Partition **_partition) { BlockHandle *drive = static_cast(bootDevice); off_t offset = (off_t)gBootPartitionOffset * drive->BlockSize(); @@ -1205,7 +1205,7 @@ platform_get_boot_partitions(struct stage2_args *args, Node *bootDevice, // offset as reported by the BFS boot block if (offset >= partition->offset && offset < partition->offset + partition->size) { - partitionList->Insert(partition); + *_partition = partition; return B_OK; } } diff --git a/src/system/boot/platform/bios_ia32/devices.cpp b/src/system/boot/platform/bios_ia32/devices.cpp index 35a1b03d17..d06798226a 100644 --- a/src/system/boot/platform/bios_ia32/devices.cpp +++ b/src/system/boot/platform/bios_ia32/devices.cpp @@ -877,8 +877,8 @@ platform_add_boot_device(struct stage2_args *args, NodeList *devicesList) status_t -platform_get_boot_partitions(struct stage2_args *args, Node *bootDevice, - NodeList *list, NodeList *bootList) +platform_get_boot_partition(struct stage2_args *args, Node *bootDevice, + NodeList *list, boot::Partition **_partition) { BIOSDrive *drive = static_cast(bootDevice); off_t offset = (off_t)gBootPartitionOffset * drive->BlockSize(); @@ -893,7 +893,7 @@ platform_get_boot_partitions(struct stage2_args *args, Node *bootDevice, // offset as reported by the BFS boot block if (offset >= partition->offset && offset < partition->offset + partition->size) { - bootList->Insert(partition); + *_partition = partition; return B_OK; } } diff --git a/src/system/boot/platform/efi/devices.cpp b/src/system/boot/platform/efi/devices.cpp index d9dc5fe548..619cae9033 100644 --- a/src/system/boot/platform/efi/devices.cpp +++ b/src/system/boot/platform/efi/devices.cpp @@ -474,7 +474,7 @@ device_contains_partition(EfiDevice *device, boot::Partition *partition) } if ((partition->offset + partition->size) <= device->Size()) - return true; + return true; return false; } @@ -516,19 +516,19 @@ platform_add_block_devices(struct stage2_args *args, NodeList *devicesList) status_t -platform_get_boot_partitions(struct stage2_args *args, Node *bootDevice, - NodeList *partitions, NodeList *bootPartitions) +platform_get_boot_partition(struct stage2_args *args, Node *bootDevice, + NodeList *partitions, boot::Partition **_partition) { NodeIterator iterator = partitions->GetIterator(); boot::Partition *partition = NULL; - while ((partition = (boot::Partition*)iterator.Next()) != NULL) { + while ((partition = (boot::Partition *)iterator.Next()) != NULL) { if (device_contains_partition((EfiDevice*)bootDevice, partition)) { - iterator.Remove(); - bootPartitions->Insert(partition); + *_partition = partition; + return B_OK; } } - return bootPartitions->Count() > 0 ? B_OK : B_ENTRY_NOT_FOUND; + return B_ENTRY_NOT_FOUND; } diff --git a/src/system/boot/platform/openfirmware/devices.cpp b/src/system/boot/platform/openfirmware/devices.cpp index c46267604d..e177f0e86b 100644 --- a/src/system/boot/platform/openfirmware/devices.cpp +++ b/src/system/boot/platform/openfirmware/devices.cpp @@ -117,14 +117,14 @@ platform_add_boot_device(struct stage2_args *args, NodeList *devicesList) status_t -platform_get_boot_partitions(struct stage2_args *args, Node *device, - NodeList *list, NodeList *partitionList) +platform_get_boot_partition(struct stage2_args *args, Node *device, + NodeList *list, boot::Partition **_partition) { NodeIterator iterator = list->GetIterator(); boot::Partition *partition = NULL; while ((partition = (boot::Partition *)iterator.Next()) != NULL) { // ToDo: just take the first partition for now - partitionList->Insert(partition); + *_partition = partition; return B_OK; } diff --git a/src/system/boot/platform/pxe_ia32/devices.cpp b/src/system/boot/platform/pxe_ia32/devices.cpp index 696bf77d2e..2ffbcff042 100644 --- a/src/system/boot/platform/pxe_ia32/devices.cpp +++ b/src/system/boot/platform/pxe_ia32/devices.cpp @@ -118,15 +118,15 @@ platform_add_boot_device(struct stage2_args *args, NodeList *devicesList) status_t -platform_get_boot_partitions(struct stage2_args *args, Node *device, - NodeList *list, NodeList *partitionList) +platform_get_boot_partition(struct stage2_args *args, Node *device, + NodeList *list, boot::Partition **_partition) { TRACE("platform_get_boot_partition\n"); NodeIterator iterator = list->GetIterator(); boot::Partition *partition = NULL; while ((partition = (boot::Partition *)iterator.Next()) != NULL) { // ToDo: just take the first partition for now - partitionList->Insert(partition); + *_partition = partition; return B_OK; } diff --git a/src/system/boot/platform/u-boot/devices.cpp b/src/system/boot/platform/u-boot/devices.cpp index aaf5206d1b..140ed1e70a 100644 --- a/src/system/boot/platform/u-boot/devices.cpp +++ b/src/system/boot/platform/u-boot/devices.cpp @@ -48,8 +48,8 @@ platform_add_boot_device(struct stage2_args *args, NodeList *devicesList) status_t -platform_get_boot_partitions(struct stage2_args *args, Node *device, - NodeList *list, NodeList *partitionList) +platform_get_boot_partition(struct stage2_args *args, Node *device, + NodeList *list, boot::Partition **_partition) { TRACE("platform_get_boot_partition\n"); @@ -57,7 +57,7 @@ platform_get_boot_partitions(struct stage2_args *args, Node *device, boot::Partition *partition = NULL; while ((partition = (boot::Partition *)iterator.Next()) != NULL) { // ToDo: just take the first partition for now - partitionList->Insert(partition); + *_partition = partition; return B_OK; }