Hi guys,
I made progress today, now I’m at the point where
yaffs could be used as a boot RO filesystem. I can mount it, write to it
(I’ll get yaffs chunk not erased messages but the files are good even
after remounting). But I have to mount read-only otherwise all hell
breaks loose.
I enabled tracing and I think I see what’s wrong...
(to enable trace, “echo all > /proc/yaffs”)
During the mount process, everything is clean, for each
block I have the following:
[4294767.300000] Block scanning block 62 state 3 seq 0
[4294767.305000] Block empty
[4294767.308000] nandmtd2_QueryNANDBlock 62
[4294767.312000] nandmtd2_ReadChunkWithTagsFromNAND chunk
3968 data 00000000 tags 810e3b78
[4294767.320000] packed tags obj -1 chunk -1 byte -1 seq -1
[4294767.325000] ext.tags eccres 0 blkbad 0 chused 0 obj 0
chunk0 byte 0 del 0 ser 0 seq 0
[4294767.333000] block is bad seq 0 state 3
(I know last line says block is bad but the trace call is
executed anyway).. blocks are good
During the actual write of the file I have the following:
[4294763.952000] Writing chunk 0 tags 261 0
[4294763.956000] nandmtd2_WriteChunkWithTagsToNAND chunk 0
data 8114b000 tags 810ddc08
[4294763.964000] packed tags obj 268435717 chunk -2147483647
byte 0 seq 4097
[4294763.971000] ext.tags eccres 0 blkbad 0 chused 1 obj 261
chunk0 byte 0 del 0 ser 1 seq 4097
I’m not sure about the “packed tags” line,
are these values valid? (268435717 and -2147483647) Is it because the tags are
packed? Because the ext.tags line looks ok? Can anyone confirm?
Now, the unmount doesn’t look good at all:
# umount /mnt
[4294950.219000] yaffs_put_inode: ino 261, count 1
[4294950.224000] yaffs_put_inode: ino 1, count 1
[4294950.229000] yaffs_clear_inode: ino 1, count 0 object
exists
[4294950.235000] yaffs_clear_inode: ino 261, count 0 object
exists
[4294950.241000] save entry: isCheckpointed 0
[4294950.245000] checkpt blocks available = 58
[4294950.249000] checking blocks 0 to 63
[4294950.253000] allocating checkpt block 1
[4294950.257000] nandmtd2_WriteChunkWithTagsToNAND chunk 64
data 803ec000 tags 810ddd38
[4294950.265000] packed tags obj 2 chunk 1 byte 2048 seq 33
[4294950.270000] ext.tags eccres 0 blkbad 268497208 chused
-2129276928 obj 2 chunk1 byte 2048 del 0 ser -2129473536 seq 33
[4294950.284000] checkpoint byte count 1304
[4294950.288000] save exit: isCheckpointed 1
As you see here, even the ext.tags line has blkbad, chused
and ser values all messed up. Could someone confirm that I should be
seeing *normal* values here…
Thanks a lot
Boris