01:07.0 RAID bus controller: VIA Technologies, Inc. VT6421 IDE RAID Controller (rev 50)
A Samsung F3 1TB drive connected to my PCI SATA controller started giving me the followed error messages as soon as I had a drive connected.
[125192.884053] ata6: SATA link up 1.5 Gbps (SStatus 113 SControl 310)
[125192.900395] ata6.00: configured for UDMA/33
[125192.900414] ata6: EH complete
[125192.949404] ata6.00: exception Emask 0x12 SAct 0x0 SErr 0x1000500 action 0x6
[125192.952120] ata6.00: BMDMA stat 0x5
[125192.954609] ata6: SError: { UnrecovData Proto TrStaTrns }
[125192.957046] ata6.00: failed command: READ DMA EXT
[125192.959455] ata6.00: cmd 25/00:00:84:cd:ba/00:01:3e:00:00/e0 tag 0 dma 131072 in
[125192.959457] res 51/84:84:00:00:00/84:ce:00:00:00/e0 Emask 0x12 (ATA bus error)
[125192.964388] ata6.00: status: { DRDY ERR }
[125192.966883] ata6.00: error: { ICRC ABRT }
[125192.969389] ata6: hard resetting link
[125193.288054] ata6: SATA link up 1.5 Gbps (SStatus 113 SControl 310)
[125193.304393] ata6.00: configured for UDMA/33
The solution? I downloaded the latest stable kernel: 2.6.34.1
Update: The fix is now in the latest Debian squeeze kernel (linux-image-2.6.32-5-686 2.6.32-18), so I’m using the official Debian kernels once again. The following instructions could still be helpful if you want to compile a custom kernel on Debian.
Then I unpacked the file. To make the new kernel fit into my existing system, I copied the latest kernel configuration from /boot.
# cp /boot/config-2.6.32-5-686 .config
Using the old config, I ran the kernel configuration to make sure everything looked OK.
# make menuconfig
And finally, I compiled and installed the new kernel as a Debian package.
# make deb-pkg
# dpkg -i ../linux-image-2.6.34.1_2.6.34.1-1_i386.deb
It seems the newer kernel has a better driver for this particular controller. Now, the error messages are gone and some problems with disk speed I experienced earlier are gone.
Note: I had to do this two times. I use zfs-fuse, and when I changed to the new kernel I was told my pool was corrupted, even though I have two mirrored disks. When I changed back to the older kernel, I could reach them again. The second time, I exported the pool, changed the kernel and then imported the pool again.
# zpool export tank
(boot with new kernel)
# zpool import tank