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.