Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 22 Sep 2008 19:40:43 -0700
From:      Sean Bruno <sbruno@miralink.com>
To:        freebsd-drivers@freebsd.org
Cc:        =?ISO-8859-1?Q?dt?= <sos@FreeBSD.org>, =?ISO-8859-1?Q?S=F8ren_Schmi?=
Subject:   Re: [RELENG_6] ATARAID oddity
Message-ID:  <48D8572B.3060204@miralink.com>
In-Reply-To: <48D82921.3010904@miralink.com>
References:  <200809222203.WAA20882@sopwith.solgatos.com> <48D82921.3010904@miralink.com>

next in thread | previous in thread | raw e-mail | index | archive | help
This is a multi-part message in MIME format.
--------------000300030402010901040205
Content-Type: text/plain; charset=ISO-8859-1; format=flowed
Content-Transfer-Encoding: 7bit

Sean Bruno wrote:
> Dieter wrote:
>>> I.e. if you insert a drive that was part of a volume from an Adaptec 
>>> RAID controller into another system, the new system will attempt to 
>>> treat that disk as though it were associated with a HOST Raid 
>>> controller.
>>>
>>> I don't think that this is the desired behavior.  Even if the host 
>>> raid meta-data is detected, the system shouldn't attempt to treat 
>>> the disk as part of a HOST raid set without the appropriate 
>>> controller in the system.
>>>     
>>
>> Even if there *is* an appropriate controller in the system, 
>> presumably it
>> isn't going to work unless the disk is connected to that controller.
>>
>> We want the ability to migrate a disk from Adaptec to some other
>> controller without screwy things happening.
>> _______________________________________________
> Looking over the ata-raid.c code that controls the detection, it's 
> pretty obvious
> that it doesn't check to see if the disk belongs to a controller.  
> Moreover it
> blindly tries to use ANY drive in the system(LSI will do this as well) 
> if it detects
> meta data.
>
> I'm working on  a simple patch for this, but I need to figure out 
> which cards are
> using the Adaptec metadata format.  Any ideas where I should look?  I 
> seem to have
> 1 card available(3010S) that I can validate against.
>
>
Well, I tried out this little patch for my system.  This probably breaks 
a lot of stuff, but
it's the beginning of what I think is more correct behavior for Adaptec 
Host-RAID.

If anyone has Adaptec Host-RAID systems out there, please send me the 
PCI-IDs of your
boards before your try this patch.  I would assume that there are some 
Host RAID adapters
out there that don't conform to the pci-ids I have put in this patch.  
If you have one, let me know.

-- 
Sean Bruno
MiraLink Corporation
6015 NE 80th Ave, Ste 100
Portland, OR 97218
Cell 503-358-6832
Phone 503-621-5143
Fax 503-621-5199
MSN: sbruno@miralink.com
Google:  seanwbruno@gmail.com


--------------000300030402010901040205
Content-Type: text/x-patch;
 name="ata_adaptec.diff"
Content-Transfer-Encoding: 7bit
Content-Disposition: inline;
 filename="ata_adaptec.diff"

Index: ata-pci.c
===================================================================
--- ata-pci.c	(revision 5956)
+++ ata-pci.c	(working copy)
@@ -532,6 +532,7 @@
     switch (pci_get_vendor(dev)) {
     case ATA_ACARD_ID:          return "Acard";
     case ATA_ACER_LABS_ID:      return "AcerLabs";
+    case ATA_ADAPTEC_ID:        return "Adaptec";
     case ATA_AMD_ID:            return "AMD";
     case ATA_ATI_ID:            return "ATI";
     case ATA_CYRIX_ID:          return "Cyrix";
Index: ata-raid.c
===================================================================
--- ata-raid.c	(revision 5956)
+++ ata-raid.c	(working copy)
@@ -1304,6 +1304,12 @@
     /* prioritize vendor native metadata layout if possible */
     if (devclass == pci_devclass) {
 	switch (pci_get_vendor(GRANDPARENT(device_get_parent(subdisk)))) {
+	/* Adaptec HostRAID */
+	case ATA_ADAPTEC_ID:
+	    if (ata_raid_adaptec_read_meta(subdisk, ata_raid_arrays))
+		return 0;
+	    break;
+
 	case ATA_HIGHPOINT_ID: 
 	    if (ata_raid_hptv3_read_meta(subdisk, ata_raid_arrays))
 		return 0;
@@ -1358,10 +1364,6 @@
     /* handle controllers that have multiple layout possibilities */
     /* NOTE: the order of these are not insignificant */
 
-    /* Adaptec HostRAID */
-    if (ata_raid_adaptec_read_meta(subdisk, ata_raid_arrays))
-	return 0;
-
     /* LSILogic v3 and v2 */
     if (ata_raid_lsiv3_read_meta(subdisk, ata_raid_arrays))
 	return 0;
Index: ata-pci.h
===================================================================
--- ata-pci.h	(revision 5956)
+++ ata-pci.h	(working copy)
@@ -71,6 +71,8 @@
 };
 
 /* defines for known chipset PCI id's */
+#define ATA_ADAPTEC_ID		0x1044
+
 #define ATA_ACARD_ID            0x1191
 #define ATA_ATP850              0x00021191
 #define ATA_ATP850A             0x00041191

--------------000300030402010901040205--



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?48D8572B.3060204>