Date: Tue, 23 Sep 2008 08:43:23 +0200 From: =?ISO-8859-1?Q?S=F8ren_Schmidt?= <sos@FreeBSD.ORG> To: Sean Bruno <sbruno@miralink.com> Cc: freebsd-drivers@FreeBSD.ORG Subject: Re: [RELENG_6] ATARAID oddity Message-ID: <B9F3337E-85C1-4971-8AEA-D7EC8F249422@FreeBSD.ORG> In-Reply-To: <48D8572B.3060204@miralink.com> References: <200809222203.WAA20882@sopwith.solgatos.com> <48D82921.3010904@miralink.com> <48D8572B.3060204@miralink.com>
index | next in thread | previous in thread | raw e-mail
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@miralink.com
> Google: seanwbruno@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
help
Want to link to this message? Use this
URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?B9F3337E-85C1-4971-8AEA-D7EC8F249422>
