From 59ee5b50957e001e837b5c96200c2319b37f9f90 Mon Sep 17 00:00:00 2001 From: David Lehman Date: Thu, 9 Aug 2012 12:12:09 -0500 Subject: [PATCH 10/21] Track requested sizes of btrfs subvols. This is just so that removing a subvol in the custom ui has the expected result of shrinking the container to just large enough to hold the remaining subvolumes. --- pyanaconda/storage/__init__.py | 1 - pyanaconda/storage/partitioning.py | 26 ++++++++++++++++++++++++-- 2 files changed, 24 insertions(+), 3 deletions(-) diff --git a/pyanaconda/storage/__init__.py b/pyanaconda/storage/__init__.py index f73ee58..455bc17 100644 --- a/pyanaconda/storage/__init__.py +++ b/pyanaconda/storage/__init__.py @@ -1192,7 +1192,6 @@ class Storage(object): fmt_args["mountopts"] = "subvol=%s" % name kwargs.pop("metaDataLevel", None) kwargs.pop("dataLevel", None) - kwargs.pop("size", None) else: dev_class = BTRFSVolumeDevice # set up the volume label, using hostname if necessary diff --git a/pyanaconda/storage/partitioning.py b/pyanaconda/storage/partitioning.py index 66e903c..9edb580 100644 --- a/pyanaconda/storage/partitioning.py +++ b/pyanaconda/storage/partitioning.py @@ -263,6 +263,7 @@ def _scheduleVolumes(storage, devs): "singlePV": request.singlePV}) else: kwargs.update({"parents": [container], + "size": request.size, "subvol": True}) dev = new_volume(**kwargs) @@ -321,6 +322,8 @@ def doAutoPartition(storage, data): # grow LVs growLVM(storage) + + growBTRFS(storage) except PartitioningWarning as e: log.warning(str(e)) if errorHandler.cb(e) == ERROR_RAISE: @@ -1080,13 +1083,14 @@ class Request(object): self.device = device self.growth = 0 # growth in sectors self.max_growth = 0 # max growth in sectors - self.done = not device.req_grow # can we grow this request more? + self.done = not getattr(device, "req_grow", True) # can we grow this + # request more? self.base = 0 # base sectors @property def growable(self): """ True if this request is growable. """ - return self.device.req_grow + return getattr(self.device, "req_grow", True) @property def id(self): @@ -1918,3 +1922,21 @@ def growLVM(storage): # initial size. req.device.size = chunk.lengthToSize(req.base + req.growth) +def growBTRFS(storage): + """ Set up relative sizes for subvolumes after autopart for custom ui. """ + for vol in storage.btrfsVolumes: + if vol.exists: + continue + + requests = [] + for subvol in vol.subvolumes: + request = Request(subvol) + request.base = subvol._size + requests.append(request) + + chunk = Chunk(int(vol.size), requests=requests) + chunk.path = "btrfs %s" % vol.name + chunk.growRequests() + + for req in chunk.requests: + req.device._size = chunk.lengthToSize(req.base + req.growth) -- 1.7.7.6