From: mulhern amulhern@redhat.com
Related: #56
Use it where appropriate.
Signed-off-by: mulhern amulhern@redhat.com --- blivet/formats/__init__.py | 23 ++++++++++++++++++++--- blivet/formats/fs.py | 2 +- 2 files changed, 21 insertions(+), 4 deletions(-)
diff --git a/blivet/formats/__init__.py b/blivet/formats/__init__.py index 7fa25cb..0a69ef8 100644 --- a/blivet/formats/__init__.py +++ b/blivet/formats/__init__.py @@ -359,6 +359,24 @@ def updateSizeInfo(self): """ pass
+ def _alignToResizeUnit(self, newsize, direction=ROUND_DOWN): + """ Returns a new size aligned to the units of the resize tool. + + :param :class:`~.Size` newsize: the proposed new size + :returns: newsize modified to yield an aligned size + :param direction: one of (decimal.ROUND_UP, decimal.ROUND_DOWN) + :rtype: :class:`~.Size` + + The default is to round down. + + If no resize unit available, returns newsize. + """ + try: + return newsize.roundToNearest(self._resizeTask.unit, rounding=direction) + except NotImplementedError: + log.warning("Trying to align size to resize unit, but no resize unit available.") + return newsize + def _deviceCheck(self, devspec): """ Verifies that device spec has a proper format.
@@ -600,12 +618,11 @@ def resize(self, **kwargs):
def _resize(self, **kwargs): """ Do generic resizing actions. """ - # Bump target size to nearest whole number of the resize tool's units. + # We always round down because the fs has to fit on whatever device # contains it. To round up would risk quietly setting a target size too # large for the device to hold. - rounded = self.targetSize.roundToNearest(self._resizeTask.unit, - rounding=ROUND_DOWN) + rounded = self._alignToResizeUnit(self.targetSize)
# 1. target size was between the min size and max size values prior to # rounding (see _setTargetSize) diff --git a/blivet/formats/fs.py b/blivet/formats/fs.py index f4547ca..bf23ba9 100644 --- a/blivet/formats/fs.py +++ b/blivet/formats/fs.py @@ -281,7 +281,7 @@ def _padSize(self, size):
# make sure the padded and rounded min size is not larger than # the current size - padded = min(padded.roundToNearest(self._resizeTask.unit, rounding=ROUND_UP), self.currentSize) + padded = min(self._alignToResizeUnit(padded, ROUND_UP), self.currentSize)
return padded