[Yaffs] Why tags->sequenceNumber is not 0xffffffff when the chunk is deleted ???

Zhen Feng feng8310 at 126.com
Tue Sep 27 02:21:12 BST 2005


I operated my nand flash(128Mb,2k bytes * 64 pages = 128Kb/block) as follows:

[root at PMPBoard /]# flash_eraseall /dev/mtd/4
Erasing 128 Kibyte @ xxxxx --  xx % complete
.....

[root at PMPBoard /]# mount -t yaffs2 /dev/mtdblock/4 /mnt
yaffs: dev is 7940 name is "1f:04"
yaffs: Attempting MTD mount on 31.4, "1f:04"
yaffs: yaffs_GutsInitialise()
yaffs: yaffs_GutsInitialise() done.

[root at PMPBoard /mnt]# df
Filesystem           1k-blocks      Used Available Use% Mounted on
...
/dev/mtdblock/4          80384       768     79616   1% /mnt

[root at PMPBoard /mnt]# cp /zImage ./

....
//Object Header Block 1 chunk 0

Allocated block 1, seq  4097, 627 left
nandmtd2_ReadChunkWithTagsToNAND chunk 0 data c039b800 tags c3f5dc40 //check bad
packed tags obj -1 chunk -1 byte -1 seq -1
ext.tags eccres 0 blkbad 0 chused 0 obj 0 chunk0 byte 0 del 0 ser 0 seq 0
Writing chunk 0 tags 261 0
nandmtd2_WriteChunkWithTagsToNAND chunk 0 data c000e000 tags c3f5dddc
packed tags obj 268435717 chunk -2147483647 byte 0 seq 4097  
ext.tags eccres 0 blkbad 0 chused 1 obj 261 chunk0 byte 0 del 0 ser 1 seq 4097

//data chunk 1
nandmtd2_ReadChunkWithTagsToNAND chunk 1 data c000e000 tags c3f5dd18
packed tags obj -1 chunk -1 byte -1 seq -1
ext.tags eccres 0 blkbad 0 chused 0 obj 0 chunk0 byte 0 del 0 ser 0 seq 0
Writing chunk 1 tags 261 1
nandmtd2_WriteChunkWithTagsToNAND chunk 1 data c3df3000 tags c3f5ddb0
packed tags obj 261 chunk 1 byte 2048 seq 4097
ext.tags eccres 0 blkbad 0 chused 1 obj 261 chunk1 byte 2048 del 0 ser 1 seq 4097
nandmtd2_ReadChunkWithTagsToNAND chunk 2 data c000e000 tags c3f5dd18
packed tags obj -1 chunk -1 byte -1 seq -1
ext.tags eccres 0 blkbad 0 chused 0 obj 0 chunk0 byte 0 del 0 ser 0 seq 

....
//Block 2,
Allocated block 2, seq  4098, 626 left
nandmtd2_ReadChunkWithTagsToNAND chunk 64 data c000e000 tags c3f5dd18
packed tags obj -1 chunk -1 byte -1 seq -1
ext.tags eccres 0 blkbad 0 chused 0 obj 0 chunk0 byte 0 del 0 ser 0 seq 0
Writing chunk 64 tags 261 64
nandmtd2_WriteChunkWithTagsToNAND chunk 64 data c3d84800 tags c3f5ddb0
packed tags obj 261 chunk 64 byte 2048 seq 4098
ext.tags eccres 0 blkbad 0 chused 1 obj 261 chunk64 byte 2048 del 0 ser 1 seq 4098

....//Block 3,4,5,6

//Block 7, The last one
Allocated block 7, seq  4103, 621 left
nandmtd2_ReadChunkWithTagsToNAND chunk 384 data c000e000 tags c3f5dd18
packed tags obj -1 chunk -1 byte -1 seq -1
ext.tags eccres 0 blkbad 0 chused 0 obj 0 chunk0 byte 0 del 0 ser 0 seq 0
Writing chunk 384 tags 261 384
nandmtd2_WriteChunkWithTagsToNAND chunk 384 data c3c67800 tags c3f5ddb0
packed tags obj 261 chunk 384 byte 2048 seq 4103
ext.tags eccres 0 blkbad 0 chused 1 obj 261 chunk384 byte 2048 del 0 ser 1 seq 410

 ....
Writing chunk 414 tags 261 0
nandmtd2_WriteChunkWithTagsToNAND chunk 414 data c000e000 tags c3f5decc
packed tags obj 268435717 chunk -2147483647 byte 844056 seq 4103
ext.tags eccres 0 blkbad 0 chused 1 obj 261 chunk0 byte 0 del 0 ser 2 seq 4103
line 2863 delete of chunk 64.
//finished

[root at PMPBoard /mnt]# df
...
/dev/mtdblock/4          80384      1596     78788   2% /mnt

[root at PMPBoard /mnt]# cat /proc/yaffs

$Id: yaffs_fs.c,v 1.29 2005/08/11 01:07:43 marty Exp $
$Id: yaffs_guts.c,v 1.18 2005/08/16 02:28:04 charles Exp $

Device 0 "U-Disk"
startBlock......... 0
endBlock........... 627
chunkGroupBits..... 0
chunkGroupSize..... 1
nErasedBlocks...... 621
nTnodesCreated..... 100
nFreeTnodes........ 69
nObjectsCreated.... 100
nFreeObjects....... 95
nFreeChunks........ 39778
nPageWrites........ 0
nPageReads......... 0
nBlockErasures..... 0
nGCCopies.......... 0
garbageCollections. 0
passiveGCs......... 0
nRetriedWrites..... 0
nRetireBlocks...... 0
eccFixed........... 0
eccUnfixed......... 0
tagsEccFixed....... 0
tagsEccUnfixed..... 0
cacheHits.......... 0
nDeletedFiles...... 0
nUnlinkedFiles..... 0
nBackgroudDeletions 0
useNANDECC......... 1
isYaffs2........... 1

[root at PMPBoard /mnt]# rm -rf zImage

nandmtd2_ReadChunkWithTagsToNAND chunk 414 data c000e000 tags 00000000
nandmtd2_ReadChunkWithTagsToNAND chunk 415 data c039b800 tags c3f5dba0
packed tags obj -1 chunk -1 byte -1 seq -1
ext.tags eccres 0 blkbad 0 chused 0 obj 0 chunk0 byte 0 del 0 ser 0 seq 0
Writing chunk 415 tags 261 0

//Update object header
nandmtd2_WriteChunkWithTagsToNAND chunk 415 data c000e000 tags c3f5dd3c
packed tags obj 268435717 chunk -2147483645 byte 0 seq 4103
ext.tags eccres 0 blkbad 0 chused 1 obj 261 chunk0 byte 0 del 0 ser 3 seq 4103
line 2863 delete of chunk 478
yaffs_put_inode: ino 261, count 1
yaffs_delete_inode: ino 261, count 0 object exists
soft delete chunk 477
soft delete chunk 476
....
soft delete chunk 66
soft delete chunk 65
yaffs_clear_inode: ino 261, count 0 object exists


[root at PMPBoard /]# umount /mnt/
[root at PMPBoard /]# mount -t yaffs2 /dev/mtdblock/4 /mnt
....
yaffs: yaffs_GutsInitialise()
//Scan the last page of all the block
nandmtd2_QueryNANDBlock 0
nandmtd2_ReadChunkWithTagsToNAND chunk 0 data 00000000 tags c3f5dd24
packed tags obj 268435717 chunk -2147483647 byte 0 seq 4097
ext.tags eccres 0 blkbad 0 chused 1 obj 261 chunk0 byte 0 del 0 ser 0 seq 4097
block is bad seq 4097 state 2
nandmtd2_QueryNANDBlock 1
nandmtd2_ReadChunkWithTagsToNAND chunk 64 data 00000000 tags c3f5dd24
packed tags obj 261 chunk 64 byte 2048 seq 4098
ext.tags eccres 0 blkbad 0 chused 1 obj 261 chunk64 byte 2048 del 0 ser 0 seq 4098
block is bad seq 4098 state 2
nandmtd2_QueryNANDBlock 2
nandmtd2_ReadChunkWithTagsToNAND chunk 128 data 00000000 tags c3f5dd24
packed tags obj 261 chunk 128 byte 2048 seq 4099
ext.tags eccres 0 blkbad 0 chused 1 obj 261 chunk128 byte 2048 del 0 ser 0 seq 4099
block is bad seq 4099 state 2
nandmtd2_QueryNANDBlock 3
nandmtd2_ReadChunkWithTagsToNAND chunk 192 data 00000000 tags c3f5dd24
packed tags obj 261 chunk 192 byte 2048 seq 4100
ext.tags eccres 0 blkbad 0 chused 1 obj 261 chunk192 byte 2048 del 0 ser 0 seq 4100
block is bad seq 4100 state 2
nandmtd2_QueryNANDBlock 4
nandmtd2_ReadChunkWithTagsToNAND chunk 256 data 00000000 tags c3f5dd24
packed tags obj 261 chunk 256 byte 2048 seq 4101
ext.tags eccres 0 blkbad 0 chused 1 obj 261 chunk256 byte 2048 del 0 ser 0 seq 4101
block is bad seq 4101 state 2
nandmtd2_QueryNANDBlock 5
nandmtd2_ReadChunkWithTagsToNAND chunk 320 data 00000000 tags c3f5dd24
packed tags obj 261 chunk 320 byte 2048 seq 4102
ext.tags eccres 0 blkbad 0 chused 1 obj 261 chunk320 byte 2048 del 0 ser 0 seq 4102
block is bad seq 4102 state 2
nandmtd2_QueryNANDBlock 6
nandmtd2_ReadChunkWithTagsToNAND chunk 384 data 00000000 tags c3f5dd24
packed tags obj 261 chunk 384 byte 2048 seq 4103
ext.tags eccres 0 blkbad 0 chused 1 obj 261 chunk384 byte 2048 del 0 ser 0 seq 4103
block is bad seq 4103 state 2
nandmtd2_QueryNANDBlock 7
nandmtd2_ReadChunkWithTagsToNAND chunk 448 data 00000000 tags c3f5dd24
packed tags obj -1 chunk -1 byte -1 seq -1
ext.tags eccres 0 blkbad 0 chused 0 obj 0 chunk0 byte 0 del 0 ser 0 seq 0
block is bad seq 0 state 3
....

//scan all YAFFS_BLOCK_STATE_NEEDS_SCANNING marked blocks (that is, block 7- block 0)
nandmtd2_ReadChunkWithTagsToNAND chunk 447 data 00000000 tags c3f5ddb0
packed tags obj -1 chunk -1 byte -1 seq -1
ext.tags eccres 0 blkbad 0 chused 0 obj 0 chunk0 byte 0 del 0 ser 0 seq 0
nandmtd2_ReadChunkWithTagsToNAND chunk 446 data 00000000 tags c3f5ddb0
packed tags obj -1 chunk -1 byte -1 seq -1
ext.tags eccres 0 blkbad 0 chused 0 obj 0 chunk0 byte 0 del 0 ser 0 seq 0
....

//Object Header
nandmtd2_ReadChunkWithTagsToNAND chunk 415 data 00000000 tags c3f5ddb0
packed tags obj 268435717 chunk -2147483645 byte 0 seq 4103
ext.tags eccres 0 blkbad 0 chused 1 obj 261 chunk0 byte 0 del 0 ser 0 seq 4103
yaffs: Tnodes added
nandmtd2_ReadChunkWithTagsToNAND chunk 415 data c000e000 tags 00000000
nandmtd2_ReadChunkWithTagsToNAND chunk 414 data 00000000 tags c3f5ddb0
packed tags obj 268435717 chunk -2147483647 byte 844056 seq 4103
ext.tags eccres 0 blkbad 0 chused 1 obj 261 chunk0 byte 0 del 0 ser 0 seq 4103
line 4661 delete of chunk 478

//data chunks
nandmtd2_ReadChunkWithTagsToNAND chunk 413 data 00000000 tags c3f5ddb0
packed tags obj 261 chunk 413 byte 280 seq 4103
ext.tags eccres 0 blkbad 0 chused 1 obj 261 chunk413 byte 280 del 0 ser 0 seq 4103
nandmtd2_ReadChunkWithTagsToNAND chunk 412 data 00000000 tags c3f5ddb0
packed tags obj 261 chunk 412 byte 2048 seq 4103
ext.tags eccres 0 blkbad 0 chused 1 obj 261 chunk412 byte 2048 del 0 ser 0 seq 4103
nandmtd2_ReadChunkWithTagsToNAND chunk 411 data 00000000 tags c3f5ddb0
packed tags obj 261 chunk 411 byte 2048 seq 4103
ext.tags eccres 0 blkbad 0 chused 1 obj 261 chunk411 byte 2048 del 0 ser 0 seq 4103
....
nandmtd2_ReadChunkWithTagsToNAND chunk 2 data 00000000 tags c3f5ddb0
packed tags obj 261 chunk 2 byte 2048 seq 4097
ext.tags eccres 0 blkbad 0 chused 1 obj 261 chunk2 byte 2048 del 0 ser 0 seq 4097
nandmtd2_ReadChunkWithTagsToNAND chunk 1 data 00000000 tags c3f5ddb0
packed tags obj 261 chunk 1 byte 2048 seq 4097
ext.tags eccres 0 blkbad 0 chused 1 obj 261 chunk1 byte 2048 del 0 ser 0 seq 4097
nandmtd2_ReadChunkWithTagsToNAND chunk 0 data 00000000 tags c3f5ddb0
packed tags obj 268435717 chunk -2147483647 byte 0 seq 4097
ext.tags eccres 0 blkbad 0 chused 1 obj 261 chunk0 byte 0 del 0 ser 0 seq 4097
line 4661 delete of chunk 64
yaffs: yaffs_GutsInitialise() done.


[root at PMPBoard /]# df
....
/dev/mtdblock/4          80384      1596     78788   2% /mnt

Comparing to the avaialbe space after copying a file to the flash, the number of used
 space is the same, but now there are no files in the flash!
 If I repeated cp, rm, umount, mount again and again, my available space becomes lower.

why no block could became dirty and be erased???
When does these deleted block become avaialable again??





More information about the yaffs mailing list