PartitionDevice was inheriting the currentSize property from StorageDevice, but that uses partedDevice.getSize() which returns 1024 when called on extended partitions (as that is what the kernel reports). This causes _setTargetSize() to try and change the extended partition geometry even when called with the current extended partition geometry size, as currentSize was mis-reporting the extended partition size. Since we do end sector alignment now a days when changing the partition geometry, we could end up making the extended partition to small to hold the last logical partition resulting in a: PartitionException: Unable to satisfy all constraints on the partition. Error. This patch fixes this by adding a currentSize method to the PartitionDevice class, which properly reports the currentSize for extended partitions. --- storage/devices.py | 12 ++++++++++++ 1 files changed, 12 insertions(+), 0 deletions(-) diff --git a/storage/devices.py b/storage/devices.py index eee43e2..44b063a 100644 --- a/storage/devices.py +++ b/storage/devices.py @@ -926,6 +926,7 @@ class PartitionDevice(StorageDevice): self.partedFlags = {} self._partedPartition = None self._origPath = None + self._currentSize = 0 # FIXME: Validate size, but only if this is a new partition. # For existing partitions we will get the size from @@ -1231,6 +1232,7 @@ class PartitionDevice(StorageDevice): # this is in MB self._size = self.partedPartition.getSize() + self._currentSize = self._size self.targetSize = self._size self._partType = self.partedPartition.type @@ -1270,6 +1272,7 @@ class PartitionDevice(StorageDevice): self.partedPartition = self.disk.format.partedDisk.getPartitionByPath(self.path) self.exists = True + self._currentSize = self.partedPartition.getSize() self.setup() finally: if w: @@ -1313,6 +1316,7 @@ class PartitionDevice(StorageDevice): end=geometry.end) self.disk.format.commit() + self._currentSize = partition.getSize() def destroy(self): """ Destroy the device. """ @@ -1426,6 +1430,14 @@ class PartitionDevice(StorageDevice): else: return self.format.maxSize + @property + def currentSize(self): + """ The device's actual size. """ + if self.exists: + return self._currentSize + else: + return 0 + class DMDevice(StorageDevice): """ A device-mapper device """ -- 1.6.6.1 _______________________________________________ Anaconda-devel-list mailing list Anaconda-devel-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/anaconda-devel-list