Hi
The problem is more to do with the interactions between the VFS and yaffs.
I just updated cvs with a fix that seems to work pretty well. I have 4 CPUs
running fsx on the nandsim. One has been running for 3 hours and the other 3
for over an hour.
Previous to this fsx would typically fail within a few minutes.
-- Charles
On Monday 21 December 2009 23:53:09 JiSheng Zhang wrote:
> > For testing I have been running tests on a nandsim to get better speed
> > and not trash real flash. As follows:
> > $sudo -s
> > # linux-tests/initnandsim
> > # insmod yaffs2.ko
> > # mount -t yaffs2 /dev/mtdblock0 /mnt
> > # echo +os > /proc/yaffs
> > # cd /mnt
> > run fsx
>
> some findings: it seems that this is not related with vfs cache.
>
> I add the some source to printk the yaffs2 internal cache "miss" or
> "hit" and useful information such as in chunkInInode, tn, retVal in
> yaffs_FindChunkInFile
>
> firstly here is some fsx log:
> Seed set to 1596
> truncating to largest ever: 0x2cd11
> truncating to largest ever: 0x37ed2
> truncating to largest ever: 0x3a218
> truncating to largest ever: 0x3a7f8
> truncating to largest ever: 0x3c83b
> truncating to largest ever: 0x3d880
> truncating to largest ever: 0x3eec4
> truncating to largest ever: 0x3f9bf
> truncating to largest ever: 0x3fdba
> truncating to largest ever: 0x3fe70
> truncating to largest ever: 0x3fef4
> READ BAD DATA: offset = 0xac7d, size = 0xe681
> OFFSET GOOD BAD RANGE
> 0x1684b 000000 0xbe38 0x95
> ....
> 6569: 1261387577.480687 TRUNCATE DOWN from 0x294bc to 0x113d0 ******WWWW
> 6570: 1261387577.480789 READ 0xcbcd thru 0x113cf (0x4803 bytes)
> 6571: 1261387577.480812 TRUNCATE UP from 0x113d0 to 0x3db8b ******WWWW
> 6572: 1261387577.480938 WRITE 0xf492 thru 0xf5d7 (0x146 bytes)
> 6573: 1261387577.480960 MAPREAD 0x33ae6 thru 0x3db8a (0xa0a5 bytes)
> 6574: 1261387577.481220 READ 0xac7d thru 0x192fd (0xe681
> bytes) ***RRRR***
>
> here is some of the according kernel log:
> ...
> yaffs_setattr of object 261
> 35 df5d60f0 -1
> 35 df5d60f0 -1
> yaffs_setattr of object 261
> start yaffs_write_begin
> end yaffs_write_begin - ok
> yaffs_write_end addr cfe5e492 pos f492 nBytes 146
> yaffs_file_write about to write writing 146 bytesto object 105 at f492
> 31 df5d61b8 226434
> yaffs_file_write writing 146 bytes, 146 written at f492
> yaffs_readpage at 00023000, size 00001000
> 23000 47 0 800 miss
> 23800 48 0 800 miss
> yaffs_readpage done
> yaffs_readpage at 00024000, size 00001000
> 24000 49 0 800 miss
> 24800 4a 0 800 miss
> yaffs_readpage done
> yaffs_readpage at 00025000, size 00001000
> 25000 4b 0 800 miss
> 25800 4c 0 800 miss
> yaffs_readpage done
> yaffs_readpage at 00026000, size 00001000
> 26000 4d 0 800 miss
> 26800 4e 0 800 miss
> yaffs_readpage done
> yaffs_readpage at 00027000, size 00001000
> 27000 4f 0 800 miss
> 27800 50 0 800 miss
> yaffs_readpage done
> yaffs_readpage at 00028000, size 00001000
> 28000 51 0 800 miss
> 28800 52 0 800 miss
> yaffs_readpage done
> yaffs_readpage at 00029000, size 00001000
> 29000 53 0 800 miss
> 29800 54 0 800 miss
> yaffs_readpage done
> yaffs_readpage at 0002a000, size 00001000
> 2a000 55 0 800 miss
> 2a800 56 0 800 miss
> yaffs_readpage done
> yaffs_readpage at 0002b000, size 00001000
> 2b000 57 0 800 miss
> 2b800 58 0 800 miss
> yaffs_readpage done
> yaffs_readpage at 0002c000, size 00001000
> 2c000 59 0 800 miss
> 2c800 5a 0 800 miss
> yaffs_readpage done
> yaffs_readpage at 0002d000, size 00001000
> 2d000 5b 0 800 miss
> 2d800 5c 0 800 miss
> yaffs_readpage done
> yaffs_readpage at 0002e000, size 00001000
> 2e000 5d 0 800 miss
> 2e800 5e 0 800 miss
> yaffs_readpage done
> yaffs_readpage at 0002f000, size 00001000
> 2f000 5f 0 800 miss
> 2f800 60 0 800 miss
> yaffs_readpage done
> yaffs_readpage at 00030000, size 00001000
> 30000 61 0 800 miss
> 30800 62 0 800 miss
> yaffs_readpage done
> yaffs_readpage at 00031000, size 00001000
> 31000 63 0 800 miss
> 31800 64 0 800 miss
> yaffs_readpage done
> yaffs_readpage at 00032000, size 00001000
> 32000 65 0 800 miss
> 32800 66 0 800 miss
> yaffs_readpage done
> yaffs_readpage at 00033000, size 00001000
> 33000 67 0 800 miss
> 33800 68 0 800 miss
> yaffs_readpage done
> yaffs_readpage at 00034000, size 00001000
> 34000 69 0 800 miss
> 34800 6a 0 800 miss
> yaffs_readpage done
> yaffs_readpage at 00035000, size 00001000
> 35000 6b 0 800 miss
> 35800 6c 0 800 miss
> yaffs_readpage done
> yaffs_readpage at 00036000, size 00001000
> 36000 6d 0 800 miss
> 36800 6e 0 800 miss
> yaffs_readpage done
> yaffs_readpage at 00037000, size 00001000
> 37000 6f 0 800 miss
> 37800 70 0 800 miss
> yaffs_readpage done
> yaffs_readpage at 00038000, size 00001000
> 38000 71 0 800 miss
> 38800 72 0 800 miss
> yaffs_readpage done
> yaffs_readpage at 00039000, size 00001000
> 39000 73 0 800 miss
> 39800 74 0 800 miss
> yaffs_readpage done
> yaffs_readpage at 0003a000, size 00001000
> 3a000 75 0 800 miss
> 3a800 76 0 800 miss
> yaffs_readpage done
> yaffs_readpage at 0003b000, size 00001000
> 3b000 77 0 800 miss
> 3b800 78 0 800 miss
> yaffs_readpage done
> yaffs_readpage at 0003c000, size 00001000
> 3c000 79 0 800 miss
> 3c800 7a 0 800 miss
> yaffs_readpage done
> yaffs_readpage at 0003d000, size 00001000
> 3d000 7b 0 800 miss
> 3d800 7c 0 800 miss
> yaffs_readpage done
> yaffs_readpage at 00012000, size 00001000
> 12000 25 0 800 miss
> 37 df5d60f0 -1
> 12800 26 0 800 miss
> 38 df5d60f0 -1
> yaffs_readpage done
> yaffs_readpage at 00013000, size 00001000
> 13000 27 0 800 miss
> 39 df5d60f0 -1
> 13800 28 0 800 miss
> 40 df5d60f0 -1
> yaffs_readpage done
> yaffs_readpage at 00014000, size 00001000
> 14000 29 0 800 miss
> 41 df5d60f0 -1
> 14800 2a 0 800 miss
> 42 df5d60f0 -1
> yaffs_readpage done
> yaffs_readpage at 00015000, size 00001000
> 15000 2b 0 800 miss
> 43 df5d60f0 -1
> 15800 2c 0 800 miss
> 44 df5d60f0 -1
> yaffs_readpage done
> yaffs_readpage at 00016000, size 00001000
> 16000 2d 0 800 miss
> 45 df5d60f0 -1
> 16800 2e 0 800 miss
> 46 df5d60f0 226451
> yaffs_readpage done
> yaffs_readpage at 00017000, size 00001000
> 17000 2f 0 800 miss
> 47 df5d60f0 -1
> 17800 30 0 800 miss
> yaffs_readpage done
> yaffs_readpage at 00018000, size 00001000
> 18000 31 0 800 miss
> 18800 32 0 800 miss
> yaffs_readpage done
> yaffs_readpage at 00019000, size 00001000
> 19000 33 0 800 miss
> 19800 34 0 800 miss
> yaffs_readpage done
> yaffs_readpage at 0001a000, size 00001000
> 1a000 35 0 800 miss
> 1a800 36 0 800 miss
> yaffs_readpage done
> yaffs_readpage at 0001b000, size 00001000
> 1b000 37 0 800 miss
> 1b800 38 0 800 miss
> yaffs_readpage done
> yaffs_readpage at 0001c000, size 00001000
> 1c000 39 0 800 miss
> 1c800 3a 0 800 miss
> yaffs_readpage done
> yaffs_readpage at 0001d000, size 00001000
> 1d000 3b 0 800 miss
> 1d800 3c 0 800 miss
> yaffs_readpage done
> yaffs_readpage at 0001e000, size 00001000
> 1e000 3d 0 800 miss
> 1e800 3e 0 800 miss
> yaffs_readpage done
> yaffs_readpage at 0001f000, size 00001000
> 1f000 3f 0 800 miss
> 1f800 40 0 800 miss
> yaffs_readpage done
> yaffs_readpage at 00020000, size 00001000
> 20000 41 0 800 miss
> 20800 42 0 800 miss
> yaffs_readpage done
> yaffs_readpage at 00021000, size 00001000
> 21000 43 0 800 miss
> 21800 44 0 800 miss
> yaffs_readpage done
> yaffs_file_flush object 261 (dirty)
>
>
> As is shown above, when read one page at offset 16800,
> "16800 2e 0 800 miss"
> yaffs_ReadDataFromFile=>cache miss so =>
> yaffs_ReadChunkDataFromObject(chunInInode is 0x2e)=>
> yaffs_FindChunkInFile=>
> yaffs_FindChunkInGroup which return 226451 rather than -1
> so, yaffs_ReadChunkWithTagsFromNAND is called.
>
> IMHO, there may be some thing wrong with logical address=>
> physical address translation when handling hole.
>
>
> Cheers,
> Jisheng
>
> _______________________________________________
> yaffs mailing list
> yaffs@lists.aleph1.co.uk
> http://lists.aleph1.co.uk/cgi-bin/mailman/listinfo/yaffs