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;