From: Vladimir 'phcoder' Serbinenko Date: Thu, 7 Jun 2012 19:55:55 +0000 (+0200) Subject: * grub-core/disk/efi/efidisk.c (name_devices): Don't make disks X-Git-Tag: 2.00~100 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=3d2de9a7ba0887009e107bac8266f8475ae68582;p=thirdparty%2Fgrub.git * grub-core/disk/efi/efidisk.c (name_devices): Don't make disks out of partitions containing other partitions. --- diff --git a/ChangeLog b/ChangeLog index 3d47ebf57..f1091ba9f 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +2012-06-07 Vladimir Serbinenko + + * grub-core/disk/efi/efidisk.c (name_devices): Don't make disks + out of partitions containing other partitions. + 2012-06-07 Vladimir Serbinenko Pass PCIINFO on BIOS to OpenBSD since otherwise it fails to boot diff --git a/grub-core/disk/efi/efidisk.c b/grub-core/disk/efi/efidisk.c index 779f2a624..883385aba 100644 --- a/grub-core/disk/efi/efidisk.c +++ b/grub-core/disk/efi/efidisk.c @@ -271,31 +271,47 @@ name_devices (struct grub_efidisk_data *devices) /* Fall through by intention. */ case GRUB_EFI_CDROM_DEVICE_PATH_SUBTYPE: { - struct grub_efidisk_data *parent; + struct grub_efidisk_data *parent, *parent2; parent = find_parent_device (devices, d); - if (parent) + if (!parent) { - if (is_hard_drive) - { #if 0 - grub_printf ("adding a hard drive by a partition: "); - grub_print_device_path (parent->device_path); + grub_printf ("skipping orphaned partition: "); + grub_efi_print_device_path (parent->device_path); #endif - add_device (&hd_devices, parent); - } - else - { + break; + } + parent2 = find_parent_device (devices, parent); + if (parent2) + { #if 0 - grub_printf ("adding a cdrom by a partition: "); - grub_print_device_path (parent->device_path); + grub_printf ("skipping subpartition: "); + grub_efi_print_device_path (parent->device_path); #endif - add_device (&cd_devices, parent); - } - - /* Mark the parent as used. */ - parent->last_device_path = 0; + /* Mark itself as used. */ + d->last_device_path = 0; + break; + } + if (is_hard_drive) + { +#if 0 + grub_printf ("adding a hard drive by a partition: "); + grub_efi_print_device_path (parent->device_path); +#endif + add_device (&hd_devices, parent); + } + else + { +#if 0 + grub_printf ("adding a cdrom by a partition: "); + grub_efi_print_device_path (parent->device_path); +#endif + add_device (&cd_devices, parent); } + + /* Mark the parent as used. */ + parent->last_device_path = 0; } /* Mark itself as used. */ d->last_device_path = 0; @@ -325,7 +341,7 @@ name_devices (struct grub_efidisk_data *devices) is a floppy drive. */ #if 0 grub_printf ("adding a floppy by guessing: "); - grub_print_device_path (d->device_path); + grub_efi_print_device_path (d->device_path); #endif add_device (&fd_devices, d); } @@ -335,7 +351,7 @@ name_devices (struct grub_efidisk_data *devices) CDROM drive. */ #if 0 grub_printf ("adding a cdrom by guessing: "); - grub_print_device_path (d->device_path); + grub_efi_print_device_path (d->device_path); #endif add_device (&cd_devices, d); } @@ -344,7 +360,7 @@ name_devices (struct grub_efidisk_data *devices) /* The default is a hard drive. */ #if 0 grub_printf ("adding a hard drive by guessing: "); - grub_print_device_path (d->device_path); + grub_efi_print_device_path (d->device_path); #endif add_device (&hd_devices, d); }