Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 22 Nov 2005 00:08:52 +0100
From:      Marcin Simonides <marcin@studio4plus.com>
To:        freebsd-hackers@freebsd.org
Subject:   VIA 6420 RAID 0 problem
Message-ID:  <43825384.1070807@studio4plus.com>

next in thread | raw e-mail | index | archive | help
I have (had?) two issues, perhaps connected:
(I posted a question to freebsd-questions about it some time ago. It 
contains some additional information: 
http://lists.freebsd.org/pipermail/freebsd-questions/2005-November/103991.html)

The first one is a problem with RAID 0, where ar0 device shows size of 
one disk instead of the whole array (others report the same problem):

atapci0: <VIA 6420 SATA150 controller> port 
0xec00-0xec07,0xe800-0xe803,0xe400-0xe407,0xe000-0xe003,0xdc00-0xdc0f,0xd800-0xd8ff 
irq 20 at device 15.0 on pci0
[...]
ad0: 29314MB <IBM DTLA-307030 TX4OA60A> at ata0-master UDMA100
ad4: 76319MB <WDC WD800JD-00HKA0 13.03G13> at ata2-master SATA150
ad6: 76319MB <WDC WD800JD-00HKA0 13.03G13> at ata3-master SATA150
ar0: 76319MB <VIA Tech V-RAID RAID0 (stripe 16 KB)> status: READY
ar0: disk0 READY using ad4 at ata2-master
ar0: disk1 READY using ad6 at ata3-master

I could not access slices that started past the first half of array.

After trying different things and settings with sysinstall and 
linux-fdisk port I inspected src/sys/dev/ata/ata-raid.c and in 
ata_raid_via_read_meta() changed a line:

switch (meta->type & VIA_T_MASK) {
case VIA_T_RAID0:
     raid->type = AR_T_RAID0;
     raid->width = meta->stripe_layout & VIA_L_MASK;
-   raid->total_sectors = meta->total_sectors;
+   raid->total_sectors = meta->total_sectors * raid->width;
     break;

to multiply the number of total_sectors by the number of disks (I guess 
that's what raid->width stands for). I don't know if it is the right 
thing to do, it just seemed a reasonable fix :)
It works fine for me. I can access (read-write) a FAT32 slice that 
starts near the end of the array and the data is ok, can be read in 
FreeBSD and Windows with VIA's drivers. A UFS2 partition at the 
beginning of the array which I use for /usr also works fine, as before 
the change in kernel, so I think I haven't broken anything, at least for 
my configuration.
Can anybody comment on it? Or maybe I just should send a PR?

The other, perhaps connected with this, issue is that I lost an extended 
partition while creating FreeBSD partition. It had happened before I 
started trying to fix the size problem described above.
After slicing the newly created RAID 0 array with sysinstall and 
installing Windows, formatting NTFS and FAT slices (with Windows) I 
created BSD partitions on the first slice and lost the extended 
partition (slice). (a more detailed description of what I did is in the 
original posting to freebsd-questions).
Today, after the change in kernel, I have removed FreeBSD partitions 
from the first slice and recreated them (with some differences). Nothing 
wrong happened.
Could this be connected with the bug in VIA ata raid driver? Or maybe it 
was just a coincidence and/or was entirely my fault?
-- 
Marcin Simonides



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