Bug 8120

Summary: SI3114 + Nvidia: Disk corruption - Content of large (>400mb) files changes when copying from one channel of SiI3114 to any of its other channels
Product: IO/Storage Reporter: Serge Druzhinin (drserge)
Component: Serial ATAAssignee: Jeff Garzik (jgarzik)
Status: REJECTED DUPLICATE    
Severity: high    
Priority: P2    
Hardware: i386   
OS: Linux   
Kernel Version: 2.6.20.1 Subsystem:
Regression: --- Bisected commit-id:

Description Serge Druzhinin 2007-03-03 14:56:59 UTC
Most recent kernel where this bug did *NOT* occur: none

Distribution: Gentoo 2006.1 (built from stage1)

Hardware Environment: Athlon-XP 2500+ Asus A7N8X (nForce2) 2x512M DDR400 
(2xSeagate ST3160827AS 2xSeagate ST3320620AS connected to add-on 
SiI3114) (ST340014A connected to nForce2 IDE controller)

Software Environment: glibc-2.5 openssl-0.9.8d coreutils-6.4 mc-4.6.1 gcc-4.1.1 
(no nvidia or other binary modules)

Problem Description:
Contents of large (>400mb) files changes when copying from HDD connected to one 
channel of SiI3114 to HDD connected to any of its other channels. Problem does 
*NOT* occur when copying such files from one partition to other within the same 
channel (HDD) and when copying such files from HDD connected to SiI3114 to HDD 
connected to other controller (onboard IDE or SATA). Tested with XFS and ext3 
filesystems, using programs cp/dd/mc, using two different SiI3114 add-on 
controllers with different BIOSes, in different PCI slots. In tests from 500 to 
3000 bytes were changed when copying 1Gb file.

Steps to reproduce:
mount /dev/sda1 /mnt/hdd1
mount /dev/sda2 /mnt/hdd2
mount /dev/sdb1 /mnt/hdd3
dd if=/dev/zero of=/mnt/hdd1/zero.test bs=1024 count=1048756
openssl sha1 /mnt/hdd1/zero.test
: SHA1(/mnt/hdd1/zero.test)= cb75bfcc214914b81005cdfadfe3e036d800f74e
cp --sparse=never /mnt/hdd1/zero.test /mnt/hdd2
openssl sha1 /mnt/hdd2/zero.test
: SHA1(/mnt/hdd2/zero.test)= cb75bfcc214914b81005cdfadfe3e036d800f74e
cp --sparse=never /mnt/hdd1/zero.test /mnt/hdd3
openssl sha1 /mnt/hdd2/zero.test
: SHA1(/mnt/hdd3/zero.test)= [real_sha1_hash_of_changed_file]
cp --sparse=never /mnt/hdd1/zero.test /mnt/hdd3
openssl sha1 /mnt/hdd2/zero.test
: SHA1(/mnt/hdd3/zero.test)= [another_real_sha1_hash_of_changed_file]
cmp -l /mnt/hdd1/zero.test /mnt/hdd3/zero.test >~/hdd1-hdd3.diff
cmp -l /mnt/hdd2/zero.test /mnt/hdd3/zero.test >~/hdd2-hdd3.diff
~/hdd1-hdd3.diff and ~/hdd2-hdd3.diff are identical files with found 
differences.
Comment 1 Serge Druzhinin 2007-03-11 14:46:49 UTC
The problem is disapearing when turning off software read-ahead (hdparm -a0 /
dev/sdc). Unfortunately it brings 7x performance loss.
Comment 2 Alan 2007-06-05 10:04:33 UTC

*** This bug has been marked as a duplicate of 6845 ***