[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]

[PATCH master] Check size limits on pre-existing partitions



When editing a pre-existing partition and changing its format type we
need to re-check the size limits. eg. mounting a partition on /boot/efi
needs to make sure it is <= 256M

Resolves: rhbz#684860
---
 pyanaconda/storage/__init__.py     |    8 ++++++
 pyanaconda/storage/devices.py      |   48 ++++++++++++++++++++++++++++++++++++
 pyanaconda/storage/partitioning.py |   12 +--------
 3 files changed, 57 insertions(+), 11 deletions(-)

diff --git a/pyanaconda/storage/__init__.py b/pyanaconda/storage/__init__.py
index a0cbdfa..b000573 100644
--- a/pyanaconda/storage/__init__.py
+++ b/pyanaconda/storage/__init__.py
@@ -1102,6 +1102,14 @@ class Storage(object):
                                 % {'mount': mount, 'size': size,
                                    'productName': productName})
 
+        for (mount, device) in filesystems.items():
+            problem = filesystems[mount].checkSize()
+            if problem:
+                errors.append(_("Your %s partition is too %s for %s formatting "
+                                "(allowable size is %d MB to %d MB)")
+                              % (mount, problem, device.format.name,
+                                 device.minSize, device.maxSize))
+
         usb_disks = []
         firewire_disks = []
         for disk in self.disks:
diff --git a/pyanaconda/storage/devices.py b/pyanaconda/storage/devices.py
index 80bb7be..303856b 100644
--- a/pyanaconda/storage/devices.py
+++ b/pyanaconda/storage/devices.py
@@ -932,6 +932,19 @@ class StorageDevice(Device):
                     break
         return grow
 
+    def checkSize(self):
+        """ Check to make sure the size of the device is allowed by the
+            format used.
+
+            return None is all is ok
+            return large or small depending on the problem
+        """
+        problem = None
+        if self.format.maxSize and self.size > self.format.maxSize:
+            problem = _("large")
+        elif self.format.minSize and self.size < self.format.minSize:
+            problem = _("small")
+        return problem
 
 class DiskDevice(StorageDevice):
     """ A disk """
@@ -1595,6 +1608,24 @@ class PartitionDevice(StorageDevice):
         return super(PartitionDevice, self).resizable and \
                self.disk.type != 'dasd'
 
+    def checkSize(self):
+        """ Check to make sure the size of the device is allowed by the
+            format used.
+
+            return None is all is ok
+            return large or small depending on the problem
+        """
+        problem = None
+        if self.format.maxSize and self.size > self.format.maxSize:
+            problem = _("large")
+        elif (self.format.minSize and
+              (not self.req_grow and
+               self.size < self.format.minSize) or
+              (self.req_grow and self.req_max_size and
+               self.req_max_size < self.format.minSize)):
+            problem = _("small")
+        return problem
+
 class DMDevice(StorageDevice):
     """ A device-mapper device """
     _type = "dm"
@@ -2553,6 +2584,23 @@ class LVMLogicalVolumeDevice(DMDevice):
         # is different (ofcourse)
         return "rd_LVM_LV=%s/%s" % (self.vg.name, self._name)
 
+    def checkSize(self):
+        """ Check to make sure the size of the device is allowed by the
+            format used.
+
+            return None is all is ok
+            return large or small depending on the problem
+        """
+        problem = None
+        if self.format.maxSize and self.size > self.format.maxSize:
+            problem = _("large")
+        elif (self.format.minSize and
+              (not self.req_grow and
+               self.size < self.format.minSize) or
+              (self.req_grow and self.req_max_size and
+               self.req_max_size < self.format.minSize)):
+            problem = _("small")
+        return problem
 
 class MDRaidArrayDevice(StorageDevice):
     """ An mdraid (Linux RAID) device. """
diff --git a/pyanaconda/storage/partitioning.py b/pyanaconda/storage/partitioning.py
index e8f3921..aebd7b8 100644
--- a/pyanaconda/storage/partitioning.py
+++ b/pyanaconda/storage/partitioning.py
@@ -1000,17 +1000,7 @@ def allocatePartitions(storage, disks, partitions, freespace, bootloader=None):
             if _part.req_grow:
                 current_free = None
 
-            problem = None
-            if _part.format.maxSize and _part.req_size > _part.format.maxSize:
-                problem = "large"
-            elif (_part.format.minSize and
-                  (not _part.req_grow and
-                   _part.req_size < _part.format.minSize) or
-                  (_part.req_grow and _part.req_max_size and
-                   _part.req_max_size < _part.format.minSize)):
-                # format max/min size also enforced in growPartitions
-                problem = "small"
-
+            problem = _part.checkSize()
             if problem:
                 raise PartitioningError("partition is too %s for %s formatting "
                                         "(allowable size is %d MB to %d MB)"
-- 
1.7.4


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]