[yast-commit] r50145 - in /branches/tmp/aschnell/multipath/libstorage/src: Disk.h DmPartCo.h Storage.cc
Author: aschnell Date: Sun Aug 17 18:43:08 2008 New Revision: 50145 URL: http://svn.opensuse.org/viewcvs/yast?rev=50145&view=rev Log: - backup commit Modified: branches/tmp/aschnell/multipath/libstorage/src/Disk.h branches/tmp/aschnell/multipath/libstorage/src/DmPartCo.h branches/tmp/aschnell/multipath/libstorage/src/Storage.cc Modified: branches/tmp/aschnell/multipath/libstorage/src/Disk.h URL: http://svn.opensuse.org/viewcvs/yast/branches/tmp/aschnell/multipath/libstorage/src/Disk.h?rev=50145&r1=50144&r2=50145&view=diff ============================================================================== --- branches/tmp/aschnell/multipath/libstorage/src/Disk.h (original) +++ branches/tmp/aschnell/multipath/libstorage/src/Disk.h Sun Aug 17 18:43:08 2008 @@ -41,7 +41,7 @@ unsigned long numMinor() const { return range; } unsigned long cylSizeB() const { return byte_cyl; } unsigned maxPrimary() const { return max_primary; } - bool extendedPossible() const { return ext_possible; }; + bool extendedPossible() const { return ext_possible; } unsigned maxLogical() const { return max_logical; } const string& labelName() const { return label; } const string& udevPath() const { return udev_path; } @@ -221,11 +221,11 @@ string sysfs_dir; unsigned max_primary; bool ext_possible; + unsigned max_logical; bool init_disk; bool iscsi; bool dmp_slave; bool gpt_enlarge; - unsigned max_logical; unsigned long byte_cyl; unsigned long range; mutable storage::DiskInfo info; Modified: branches/tmp/aschnell/multipath/libstorage/src/DmPartCo.h URL: http://svn.opensuse.org/viewcvs/yast/branches/tmp/aschnell/multipath/libstorage/src/DmPartCo.h?rev=50145&r1=50144&r2=50145&view=diff ============================================================================== --- branches/tmp/aschnell/multipath/libstorage/src/DmPartCo.h (original) +++ branches/tmp/aschnell/multipath/libstorage/src/DmPartCo.h Sun Aug 17 18:43:08 2008 @@ -54,9 +54,18 @@ int resizeVolume( Volume* v, unsigned long long newSize ); int removeVolume( Volume* v ); int removeDmPart(); - void getUnusedSpace( std::list<Region>& free, bool all=true, - bool logical=false ); - bool hasExtended() const; + + unsigned maxPrimary() const { return disk->maxPrimary(); } + bool extendedPossible() const { return disk->extendedPossible(); } + unsigned maxLogical() const { return disk->maxLogical(); } + + unsigned int numPrimary() const { return disk->numPrimary(); } + bool hasExtended() const { return disk->hasExtended(); } + unsigned int numLogical() const { return disk->numLogical(); } + + void getUnusedSpace(std::list<Region>& free, bool all = true, bool logical = false) + { disk->getUnusedSpace(free, all, logical); } + unsigned long long cylinderToKb( unsigned long val ) const { return disk->cylinderToKb( val ); } unsigned long kbToCylinder( unsigned long long val ) const Modified: branches/tmp/aschnell/multipath/libstorage/src/Storage.cc URL: http://svn.opensuse.org/viewcvs/yast/branches/tmp/aschnell/multipath/libstorage/src/Storage.cc?rev=50145&r1=50144&r2=50145&view=diff ============================================================================== --- branches/tmp/aschnell/multipath/libstorage/src/Storage.cc (original) +++ branches/tmp/aschnell/multipath/libstorage/src/Storage.cc Sun Aug 17 18:43:08 2008 @@ -1609,22 +1609,66 @@ int ret = 0; slots.clear(); assertInit(); - DiskIterator i = findDisk( disk ); - if( i != dEnd() ) + + // TODO: don't have code below twice + + DiskIterator i1 = findDisk( disk ); + DmPartCoIterator i2 = findDmPartCo( disk ); + + if (i1 != dEnd()) { // maxPrimary() and maxLogical() include limits from partition table type and // minor number range - // TODO: check these restrictions + bool primaryPossible = i1->numPrimary() + (i1->hasExtended() ? 1 : 0) < i1->maxPrimary(); + bool extendedPossible = primaryPossible && i1->extendedPossible() && !i1->hasExtended(); + bool logicalPossible = i1->hasExtended() && i1->numLogical() < (i1->maxLogical() - i1->maxPrimary()); - bool primaryPossible = i->numPrimary() + (i->hasExtended() ? 1 : 0) < i->maxPrimary(); - bool extendedPossible = primaryPossible && i->extendedPossible() && !i->hasExtended(); - bool logicalPossible = i->hasExtended() && i->numLogical() < (i->maxLogical() - i->maxPrimary()); + list<Region> regions; + + i1->getUnusedSpace(regions, false, false); + for (list<Region>::const_iterator region=regions.begin(); region!=regions.end(); region++) + { + PartitionSlotInfo slot; + slot.cylStart = region->start(); + slot.cylSize = region->len(); + slot.primarySlot = true; + slot.primaryPossible = primaryPossible; + slot.extendedSlot = true; + slot.extendedPossible = extendedPossible; + slot.logicalSlot = false; + slot.logicalPossible = false; + slots.push_back(slot); + } + + i1->getUnusedSpace(regions, false, true); + for (list<Region>::const_iterator region=regions.begin(); region!=regions.end(); region++) + { + PartitionSlotInfo slot; + slot.cylStart = region->start(); + slot.cylSize = region->len(); + slot.primarySlot = false; + slot.primaryPossible = false; + slot.extendedSlot = false; + slot.extendedPossible = false; + slot.logicalSlot = true; + slot.logicalPossible = logicalPossible; + slots.push_back(slot); + } + } + else if (i2 != dmpCoEnd()) + { + // maxPrimary() and maxLogical() include limits from partition table type and + // minor number range + + bool primaryPossible = i2->numPrimary() + (i2->hasExtended() ? 1 : 0) < i2->maxPrimary(); + bool extendedPossible = primaryPossible && i2->extendedPossible() && !i2->hasExtended(); + bool logicalPossible = i2->hasExtended() && i2->numLogical() < (i2->maxLogical() - i2->maxPrimary()); list<Region> regions; - i->getUnusedSpace(regions, false, false); - for( list<Region>::const_iterator region=regions.begin(); region!=regions.end(); region++ ) + i2->getUnusedSpace(regions, false, false); + for (list<Region>::const_iterator region=regions.begin(); region!=regions.end(); region++) { PartitionSlotInfo slot; slot.cylStart = region->start(); @@ -1638,8 +1682,8 @@ slots.push_back(slot); } - i->getUnusedSpace(regions, false, true); - for( list<Region>::const_iterator region=regions.begin(); region!=regions.end(); region++ ) + i2->getUnusedSpace(regions, false, true); + for (list<Region>::const_iterator region=regions.begin(); region!=regions.end(); region++) { PartitionSlotInfo slot; slot.cylStart = region->start(); @@ -1657,7 +1701,7 @@ { ret = STORAGE_DISK_NOT_FOUND; } - y2milestone( "ret:%d", ret ); + y2mil("ret:" << ret); return ret; } -- To unsubscribe, e-mail: yast-commit+unsubscribe@opensuse.org For additional commands, e-mail: yast-commit+help@opensuse.org
participants (1)
-
aschnell@svn.opensuse.org