We were resetting the parted flags for re-use of existing partitions in destroyFormat, but this assumes that the existing partition actually has a type in the partition table matching its current formatting, this has 2 problems: 1: If the partition has a type which needs to have flags reset to become the correct type for the new format (for example swap -> ext2), but it is not formatted, the flags wont get reset 2: If the partition has a type which does not match the formatting (for example type linux raid, formatting ext2), the flags won't get reset This patch moves the resetting of the flags to the creation of the new format, and resets all flags except for the one for the to be created format (and boot and lba which are special). For the F-12 branch this also has the benefit that the resetting of the flags happens at all, as there the resetting was happening on a deep copy of the device (and thus the label) and never actually got written to the disk. --- storage/deviceaction.py | 18 ++++++++++-------- 1 files changed, 10 insertions(+), 8 deletions(-) diff --git a/storage/deviceaction.py b/storage/deviceaction.py index a01ee41..1f8d5a7 100644 --- a/storage/deviceaction.py +++ b/storage/deviceaction.py @@ -28,6 +28,7 @@ from udev import * from devices import StorageDevice, PartitionDevice from formats import getFormat from errors import * +from parted import partitionFlag, PARTITION_BOOT, PARTITION_LBA import gettext _ = lambda x: gettext.ldgettext("anaconda", x) @@ -265,9 +266,17 @@ class ActionCreateFormat(DeviceAction): self.device.setup() if isinstance(self.device, PartitionDevice): + # Flags which are truely flags, not types, so we shouldn't reset + reallyFlags = [ PARTITION_BOOT, PARTITION_LBA ] + for flag in partitionFlag.keys(): + if flag in reallyFlags or flag == self.format.partedFlag: + continue + self.device.unsetFlag(flag) + if self.format.partedFlag is not None: self.device.setFlag(self.format.partedFlag) - self.device.disk.format.commitToDisk() + + self.device.disk.format.commitToDisk() self.device.format.create(intf=intf, device=self.device.path, @@ -310,13 +319,6 @@ class ActionDestroyFormat(DeviceAction): # since then (most notably, formats removed by this very # class' constructor) self._device.setup() - - if isinstance(self._device, PartitionDevice) and \ - self.origFormat.partedFlag is not None: - # unset partition flags and commit - self._device.unsetFlag(self.origFormat.partedFlag) - self._device.disk.format.commitToDisk() - self.origFormat.destroy() udev_settle() self._device.teardown() -- 1.6.5.rc2 _______________________________________________ Anaconda-devel-list mailing list Anaconda-devel-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/anaconda-devel-list