Hello, I am using the latest yaffs2 release + Sergey's patch on Large page NAND. I got some data corruption on the yaffs2 filesystem when an application program overwrite data into the file. So I configured the yaffs2 code to check every page before it wrote on NAND flash. I also added code to stop the system if yaffs2 tried to write on Nand flash that wasn't erased in yaffs_WriteNewChunkWithTagsToNAND. I wrote a quick overwrite test program to test this problem. While running the test, this message was showed up. Chunk 87680 not erased **>> yaffs chunk 87680 was not erased It is easy to reproduce the problem if the size of file is larger than 60MB. I can reproduce the problem with this scenario. 1) flash_eraseall /dev/mtd/7 /* 64MB NAND partition */ 2) mount -t yaffs2 /dev/mtdblock/7 /tmp/yaffs -o sync,noatime 3) dd if=/dev/zero of=/tmp/yaffs/foo bs=1024k count=60 /* Problem showed up with around 9th run */ 4) for i in 1 2 3 4 5 6 7 8 9 10 do my_test /tmp/yaffs/foo 1048576 done where /tmp/yaffs/foo is the file to overwrite 1048576 is the write size. I turned on yaffs_traceMask to 0xffffffff from the step 3. The log file showed that some chunks were not erased. nandmtd2_ReadChunkWithTagsToNAND chunk 174114 data 00000000 tags c19ddc68 sed 1 obj 262 chunk26655 byte 2048 del 0 ser 0 seq 6914 Chunk 180352 not erased >>Block 2818 erasure supposedly OK, but chunk 0 not erased nandmtd2_ReadChunkWithTagsToNAND chunk 180289 data c2fe7000 tags c19ddb10 packed tags obj 262 chunk 26656 byte 2048 seq 6914 ext.tags eccres 0 blkbad 0 chused 1 obj 262 chunk26656 byte 2048 del 0 ser 0 seq 6 914 Chunk 180353 not erased >>Block 2818 erasure supposedly OK, but chunk 1 not erased nandmtd2_ReadChunkWithTagsToNAND chunk 180290 data c2fe7000 tags c19ddb10 packed tags obj 262 chunk 26657 byte 2048 seq 6914 ext.tags eccres 0 blkbad 0 chused 1 obj 262 chunk26657 byte 2048 del 0 ser 0 seq 6 914 =================================== This is my_test: #include #include #include #include int main(int argc, char **argv) { int outputlen, num_of_pages, i, writecnt; int total_writecnt=0; int offset, write_pagesize; int file_id = -1; unsigned char *writebuf; if (argc != 3) { printf("usage: %s [filename] [writesize]\n", argv[0]); exit(1); } file_id = open(argv[1], O_RDWR); if (file_id == -1) { printf("open %s failed\n", argv[1]); exit(1); } write_pagesize = strtol(argv[2], NULL, 0); writebuf = malloc(write_pagesize); if (writebuf == NULL) { printf("cannot get memory\n"); exit(1); } /* Find out the size of input file. */ outputlen = lseek(file_id, 0, SEEK_END); lseek(file_id, 0, SEEK_SET); /* Figure out the number of pages from the file. */ if (outputlen % write_pagesize) num_of_pages = (outputlen / write_pagesize) + 1; else num_of_pages = (outputlen / write_pagesize); memset(writebuf, 'a', write_pagesize); for (i=0; i < num_of_pages; i++) { offset = i * write_pagesize; lseek(file_id, offset, SEEK_SET); if ((writecnt = write(file_id, writebuf, write_pagesize)) != write_pagesize){ if (writecnt < 0) { printf("write_file: File I/O error on input file"); exit(1); } printf("write_file: partial write: %d, total writecnt=%d\n", writecnt, total_writecnt+writecnt); } total_writecnt += writecnt; } printf("Total write count: %d\n", total_writecnt); free(writebuf); close(file_id); exit(0); } =========================== Any idea what caused this problem? Thanks, Chung