summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMike Fulbright <msf@redhat.com>2001-07-09 23:58:34 +0000
committerMike Fulbright <msf@redhat.com>2001-07-09 23:58:34 +0000
commit3d05fd7dd11c0c8c58209975b75d4c9b2e6e414d (patch)
tree4cf9ff7e8290817d47bd95a3be41ba689a1d54a3
parent3be65633923a40003786becef6ddb1bd669db8f6 (diff)
downloadanaconda-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
-rw-r--r--autopart.py42
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: