[RELENG_6] ATARAID oddity

Søren Schmidt sos at FreeBSD.ORG
Tue Sep 23 07:20:14 UTC 2008


Hi

Just the short version:

Since this is softraids and the different vendors use different chips,  
there is no 1 to 1 relation between raid type and controller PCI id.  
Its a puzzle you cannot solve without loosing a good percentage of the  
systems out there.

-Søren

On 23Sep, 2008, at 4:40 , Sean Bruno wrote:

> 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 at miralink.com
> Google:  seanwbruno at gmail.com
>
> 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

-Søren








More information about the freebsd-drivers mailing list