On Wed, Feb 17, Arvin Schnell wrote:

> On Wed, Feb 17, 2010 at 08:05:13PM +0100, Christian Ehrlicher wrote:
> > Hi,
> > 
> > We've a similar problem like described in bug #231221 ( 
> > https://bugzilla.novell.com/show_bug.cgi?id=231221 ). Yast can't create a 
> > logical volume and fails with error -4017 (LVM_PV_STILL_ADDED)
> > --> /dev/block/104:3 needs a mapping to /dev/cciss/c0d0p3
> > 
> > It's correctly detected:
> > "dev_names":["/dev/cciss/c0d0", "/dev/block/104:0", "/dev/disk/by-
> > id/cciss-3600508b1001052395359305442350500", "/dev/disk/by-
> > path/pci-0000:06:00.0", "/dev/disk/by-id/edd-int13_dev80"]
> > I can provide the full y2log - but it's huge and therefore I decided to 
> > only 
> > append the error part.
> > 
> > When I'm correct I need to add an additional check for /dev/cciss in 
> > Storage::findVolume() (Storage.cc:4830) - is this correct?
> 
> The normal way is to add "/dev/block/104:3" to the alt_names of
> the partition, e.g. in the constructor of Partition. Major and
> Minor number should already be read in the Volume constructor.
> 
> > If so - how can I add a modified libstorage to my install source (we're 
> > doing a 
> > network install)? We need to install 9 servers with this raid controller 
> > and 
> > our plan was to use autoyast for this...
> 
> You can make a new RPM of libstorage and add it as a driver
> update (dud) in linuxrc, see http://en.opensuse.org/Linuxrc.

Attached patch should fix your problem.
We will have a more robust solution for next openSuSE but this should
do for now.

Tschuess, 
        Thomas Fehr
-- 
  Thomas Fehr, SuSE Linux Products GmbH, Maxfeldstr. 5, 90409 Nuernberg, Germany
  GF: Markus Rex, HRB 16746 (AG Nürnberg)
  Tel: +49-911-74053-0,  Fax: +49-911-74053-482,  Email: [email protected]
  GPG public key available.
diff --git a/storage/Volume.cc b/storage/Volume.cc
index 712cb3c..b83fbdb 100644
--- a/storage/Volume.cc
+++ b/storage/Volume.cc
@@ -219,7 +219,17 @@ void Volume::init()
 	{
 	setNameDev();
 	if (!getStorage()->testmode() && cType()!=NFSC)
+	    {
 	    getMajorMinor();
+	    if( mjr!=0 )
+		{
+		std::ostringstream b;
+		classic(b);
+		b << "/dev/block/" << mjr << ':' << mnr;
+		alt_names.remove_if( string_contains("/block/") );
+		alt_names.push_back( b.str() );
+		}
+	    }
 	}
     if( !numeric )
 	num = 0;

Reply via email to