[PATCH 1/4] check disklabels when calculating free space (#863892)

David Lehman dlehman at redhat.com
Mon Oct 29 19:15:18 UTC 2012


On Thu, 2012-10-25 at 13:04 -0700, Brian C. Lane wrote:
> From: "Brian C. Lane" <bcl at redhat.com>
> 
> You need at least one of the platform's disklabels in order for the free
> space on the disk to be useful. If none of the disks labels will work we
> set the free space to 0 and allow the resize dialog to be used to remove
> all the partitions which will relabel the disk.

I have some minor reservations about the case where there is at least
one valid disklabel but it isn't on the boot disk, but I think the
sanityCheck will catch that. This is certainly an improvement over
what's there now. ACK.

> ---
>  pyanaconda/ui/gui/spokes/storage.py | 20 ++++++++++++++++----
>  1 file changed, 16 insertions(+), 4 deletions(-)
> 
> diff --git a/pyanaconda/ui/gui/spokes/storage.py b/pyanaconda/ui/gui/spokes/storage.py
> index 14ea404..7aab762 100644
> --- a/pyanaconda/ui/gui/spokes/storage.py
> +++ b/pyanaconda/ui/gui/spokes/storage.py
> @@ -644,10 +644,22 @@ class StorageSpoke(NormalSpoke, StorageChecker):
>          disks = [d for d in self.disks if d.name in self.selected_disks]
>          disks_size = sum(Size(spec="%f MB" % d.size) for d in disks)
>  
> -        free_space = self.storage.getFreeSpace(disks=disks,
> -                                               clearPartType=CLEARPART_TYPE_NONE)
> -        disk_free = sum([f[0] for f in free_space.itervalues()])
> -        fs_free = sum([f[1] for f in free_space.itervalues()])
> +        # Figure out if the existing disk labels will work on this platform
> +        # you need to have at least one of the platform's labels in order for
> +        # any of the free space to be useful.
> +        disk_labels = set([disk.format.labelType for disk in self.disks \
> +                                                 if hasattr(disk.format, "labelType")])
> +        platform_labels = set(self.storage.platform.diskLabelTypes)
> +        if disk_labels and platform_labels.isdisjoint(disk_labels):
> +            disk_free = 0
> +            fs_free = 0
> +            log.debug("Need disklabel: %s have: %s" % (", ".join(platform_labels),
> +                                                       ", ".join(disk_labels)))
> +        else:
> +            free_space = self.storage.getFreeSpace(disks=disks,
> +                                                   clearPartType=CLEARPART_TYPE_NONE)
> +            disk_free = sum([f[0] for f in free_space.itervalues()])
> +            fs_free = sum([f[1] for f in free_space.itervalues()])
>  
>          required_space = self.payload.spaceRequired
>          log.debug("disk free: %s  fs free: %s  sw needs: %s" % (disk_free,




More information about the anaconda-patches mailing list