[anaconda:rhel6] Make EFI.bootDevice() return best device for several calling contexts (#1145812)

Brian C. Lane bcl at redhat.com
Wed Nov 5 18:24:28 UTC 2014


On Wed, Nov 05, 2014 at 08:26:01AM -0500, mulhern wrote:
> Resolves: rhbz#1145812
> 
> Signed-off-by: mulhern <amulhern at redhat.com>
> ---
>  platform.py | 38 ++++++++++++++++++++++++++++++++------
>  1 file changed, 32 insertions(+), 6 deletions(-)
> 
> diff --git a/platform.py b/platform.py
> index 51e2e3f..59a782c 100644
> --- a/platform.py
> +++ b/platform.py
> @@ -248,14 +248,40 @@ class EFI(Platform):
>          Return the boot device. The bootloader.drivelist is used to
>          set the precedence in cases where multiple partitions are
>          available from multiple devices.
> +
> +        Return the first ESP with a mountpoint, if there is one.
> +        Otherwise, return the first ESP.
> +
> +        bootDevice() is called in a number of contexts, and the strategy
> +        above is supposed to be the best for all.
> +
> +        A boot device with a mountpoint set is always preferred, as it
> +        is assumed that that mountpoint will be valid to boot from,
> +        and that it was set deliberately by some sort of user intervention.
> +
> +        Only a subset of the contexts in which bootDevice() can be called
> +        require that the device's mountpoint be set for it to be useful.
> +        During sanity checking, which occurs shortly before execution of
> +        scheduled actions on storage, there are some conditions under which
> +        the mountpoint must be set to prevent failure when storage
> +        actions are executed.
>          """
>          drive = self.anaconda.id.bootloader.drivelist[0]
> -        for part in self.anaconda.id.storage.partitions:
> -           if part.disk and part.disk.name == drive \
> -               and part.format.type == "efi" \
> -               and self.validBootPartSize(part.size):
> -                return part
> -        return None
> +
> +        def _isESP(part):
> +            return part.disk and \
> +               part.disk.name == drive and \
> +               part.format.type == "efi" and \
> +               self.validBootPartSize(part.size)
> +        esps = (p for p in self.anaconda.id.storage.partitions if _isESP(p))
> +
> +        bootDevice = None
> +        for part in esps:
> +            if part.format.mountpoint:
> +                bootDevice = part
> +                break
> +            bootDevice = bootDevice or part
> +        return bootDevice
>  
>      def bootloaderChoices(self, bl):
>          bootDev = self.bootDevice()
> -- 
> 1.9.3

Looks good, ACK.

-- 
Brian C. Lane | Anaconda Team | IRC: bcl #anaconda | Port Orchard, WA (PST8PDT)


More information about the anaconda-patches mailing list