I've run into a problem using the latest YAFFS code on linux-2.6.28-rc8
using today's YAFFS CVS code.
First off I had to modify the code in yaffs_write_begin to only call
grab_cache_pages_write_begin if the kernel version is newer than 2.6.28
since 2.6.28-rc8 does *not* have __grab_cache_page whereas 2.6.28 proper
does:
#if LINUX_VERSION_CODE > KERNEL_VERSION(2, 6, 28)
pg = grab_cache_page_write_begin(mapping, index, flags);
#else
pg = __grab_cache_page(mapping, index);
#endif
Second I added "dev->nPageWrites++;" to
nandmtd2_ReadChunkWithTagsFromNAND and "dev->nPageReads++;" to
nandmtd2_WriteChunkWithTagsToNAND to track the number of page
read/writes.
With this code, I'm seeing 30MB files that are created have mismatching
checksums while running the attached test script. The output from the
test looks like:
OMAP-35x# . /media/mmcblk0p1/x
Create 30M file and get
md5sum
30720+0 records
in
30720+0 records
out
5b04790304a4221f1016a8c310da4746
somefile.1
**>> Block 710 needs
retiring
**>> yaffs write required 2
attempts
**>> Block 710
retired
Block 710 is in state 9 after gc, should be
erased
Calculate md5sums for copied
files
5b04790304a4221f1016a8c310da4746
somefile.1
5b04790304a4221f1016a8c310da4746
somefile.2
5b04790304a4221f1016a8c310da4746
somefile.3
8c8d5a7974d0b9da747bc59edd1991f6
somefile.4
execute sync and recalculate
md5sums
save exit: isCheckpointed
1
5b04790304a4221f1016a8c310da4746
somefile.1
5b04790304a4221f1016a8c310da4746
somefile.2
5b04790304a4221f1016a8c310da4746
somefile.3
5b04790304a4221f1016a8c310da4746
somefile.4
Delete one of the
files
5b04790304a4221f1016a8c310da4746
somefile.1
5b04790304a4221f1016a8c310da4746
somefile.3
3cb7668eb7760202d96970a6a9a3361f
somefile.4
recopy the deleted
file
f6dba6d5af7a7a89481da1849035a417
somefile.1
5b04790304a4221f1016a8c310da4746
somefile.3
5b04790304a4221f1016a8c310da4746
somefile.4
f6dba6d5af7a7a89481da1849035a417
somefile.7
Creating test folder and some junk files in that
folder
1+0 records
in
1+0 records
out
ae1028b8d6aef86d020c9edfae29ca3d
junk.1
md5sums of all files in test
folder
ae1028b8d6aef86d020c9edfae29ca3d
junk.1
ae1028b8d6aef86d020c9edfae29ca3d
junk.2
ae1028b8d6aef86d020c9edfae29ca3d
junk.3
ae1028b8d6aef86d020c9edfae29ca3d
junk.4
ae1028b8d6aef86d020c9edfae29ca3d
junk.5
ae1028b8d6aef86d020c9edfae29ca3d
junk.6
ae1028b8d6aef86d020c9edfae29ca3d
junk.7
ae1028b8d6aef86d020c9edfae29ca3d
junk.8
ae1028b8d6aef86d020c9edfae29ca3d
junk.9
execute sync and recalculate
md5sums
save exit: isCheckpointed
1
ae1028b8d6aef86d020c9edfae29ca3d
junk.1
ae1028b8d6aef86d020c9edfae29ca3d
junk.2
ae1028b8d6aef86d020c9edfae29ca3d
junk.3
ae1028b8d6aef86d020c9edfae29ca3d
junk.4
ae1028b8d6aef86d020c9edfae29ca3d
junk.5
ae1028b8d6aef86d020c9edfae29ca3d
junk.6
ae1028b8d6aef86d020c9edfae29ca3d
junk.7
ae1028b8d6aef86d020c9edfae29ca3d
junk.8
ae1028b8d6aef86d020c9edfae29ca3d
junk.9
Remove some files and recreate
them
Calculate md5sums for 30M files
again
f6dba6d5af7a7a89481da1849035a417
somefile.1
5b04790304a4221f1016a8c310da4746
somefile.3
5b04790304a4221f1016a8c310da4746
somefile.4
1fee3f481bfa5cf3403efe9e481a0374
somefile.7
execute sync and recalculate
md5sums
save exit: isCheckpointed
1
a7b6ccfa31115aa75a0fdca07073293d
somefile.1
5b04790304a4221f1016a8c310da4746
somefile.3
1abb3d578e2d129341df26916090b869
somefile.4
f6dba6d5af7a7a89481da1849035a417
somefile.7
OMAP-35x#
In the output, note that the md5sum of "somefile.*" should all match.
Anyone seen anything like this before? Test attached.