diff options
author | Mike Fulbright <msf@redhat.com> | 2001-07-09 23:58:34 +0000 |
---|---|---|
committer | Mike Fulbright <msf@redhat.com> | 2001-07-09 23:58:34 +0000 |
commit | 3d05fd7dd11c0c8c58209975b75d4c9b2e6e414d (patch) | |
tree | 4cf9ff7e8290817d47bd95a3be41ba689a1d54a3 /autopart.py | |
parent | 3be65633923a40003786becef6ddb1bd669db8f6 (diff) | |
download | anaconda-3d05fd7dd11c0c8c58209975b75d4c9b2e6e414d.tar.gz anaconda-3d05fd7dd11c0c8c58209975b75d4c9b2e6e414d.tar.xz anaconda-3d05fd7dd11c0c8c58209975b75d4c9b2e6e414d.zip |
when we create an extended partition, need to find free space now remaining for the logical we are making
Diffstat (limited to 'autopart.py')
-rw-r--r-- | autopart.py | 42 |
1 files changed, 36 insertions, 6 deletions
diff --git a/autopart.py b/autopart.py index ed1b199b2..5f262be10 100644 --- a/autopart.py +++ b/autopart.py @@ -79,7 +79,6 @@ def findFreespace(diskset): part = disk.next_partition() while part: if part.type & parted.PARTITION_FREESPACE: -# print "found free", printFreespaceitem(part) free[drive].append(part) part = disk.next_partition(part) return free @@ -270,14 +269,18 @@ def fitSized(diskset, requests, primOnly = 0, newParts = None): # print "largestPart is",largestPart freespace = largestPart[1] + freeStartSec = freespace.geom.start + freeEndSec = freespace.geom.end + disk = freespace.geom.disk - startSec = freespace.geom.start + + startSec = freeStartSec endSec = startSec + long(((request.requestSize * 1024L * 1024L) / disk.dev.sector_size)) - 1 - if endSec > freespace.geom.end: - endSec = freespace.geom.end - if startSec < freespace.geom.start: - startSec = freespace.geom.start + if endSec > freeEndSec: + endSec = freeEndSec + if startSec < freeStartSec: + startSec = freeStartSec if freespace.type & parted.PARTITION_LOGICAL: partType = parted.PARTITION_LOGICAL @@ -296,12 +299,39 @@ def fitSized(diskset, requests, primOnly = 0, newParts = None): newParts.parts.append(newp) requests.nextUniqueID = requests.nextUniqueID + 1 partType = parted.PARTITION_LOGICAL + + # now need to update freespace since adding extended + # took some space + found = 0 + part = disk.next_partition() + while part: + if part.type & parted.PARTITION_FREESPACE: + if part.geom.start > freeStartSec and part.geom.end <= freeEndSec: + found = 1 + freeStartSec = part.geom.start + freeEndSec = part.geom.end + break + + part = disk.next_partition(part) + + if not found: + raise PartitioningError, "Could not find free space after making new extended partition" + + startSec = freeStartSec + endSec = startSec + long(((request.requestSize * 1024L * 1024L) / disk.dev.sector_size)) - 1 + + if endSec > freeEndSec: + endSec = freeEndSec + if startSec < freeStartSec: + startSec = freeStartSec + else: # shouldn't get here raise PartitioningError, "Impossible partition to create" fsType = request.fstype.getPartedFileSystemType() newp = disk.partition_new (partType, fsType, startSec, endSec) constraint = disk.constraint_any () + try: disk.add_partition (newp, constraint) except parted.error, msg: |