On Mon, 2010-08-02 at 15:24 -0400, Peter Barada wrote:
I have a filesystem - I've created it from scratch, copied one file into it, unmounted the filesystem, remounted it and created a new version of the file.  I then reboot and remount the filesystem in read-only, and yaffs attempts to clean up the filesystem by calline yaffs_DeleteFile from yaffs_StripDeletedObjects.

Unfortunately with the filesystem in this state, nandmtd2_WriteChunkWithTagsToNAND is called (and returns -EROFS) which yaffs treats as a write error, tries to retire the block and eventually complains that the allocator is out.

I added a dump_stack into yaffs_VerifyChunkWritten to see how its called from mount on a read-only filesystem and I get:

[<c0037584>] (unwind_backtrace+0x0/0xdc) from [<c0168684>] (yaffs_WriteNewChunkWithTagsToNAND+0x470/0x5e8)
[<c0168684>] (yaffs_WriteNewChunkWithTagsToNAND+0x470/0x5e8) from [<c0169644>] (yaffs_CheckGarbageCollection+0xa18/0xd08)
[<c0169644>] (yaffs_CheckGarbageCollection+0xa18/0xd08) from [<c016ab2c>] (yaffs_ResizeFile+0x30/0xe8)
[<c016ab2c>] (yaffs_ResizeFile+0x30/0xe8) from [<c016ae10>] (yaffs_DeleteFile+0x3c/0x188)
[<c016ae10>] (yaffs_DeleteFile+0x3c/0x188) from [<c016d9cc>] (yaffs_GutsInitialise+0x13b0/0x15c8)
[<c016d9cc>] (yaffs_GutsInitialise+0x13b0/0x15c8) from [<c0163df0>] (yaffs_internal_read_super+0x8e0/0xb6c)
[<c0163df0>] (yaffs_internal_read_super+0x8e0/0xb6c) from [<c01640c4>] (yaffs_internal_read_super_mtd+0x1c/0x2c)
[<c01640c4>] (yaffs_internal_read_super_mtd+0x1c/0x2c) from [<c00b1794>] (get_sb_bdev+0x114/0x16c)
[<c00b1794>] (get_sb_bdev+0x114/0x16c) from [<c01613f8>] (yaffs_read_super+0x18/0x20)
[<c01613f8>] (yaffs_read_super+0x18/0x20) from [<c00b0814>] (vfs_kern_mount+0x4c/0xd0)
[<c00b0814>] (vfs_kern_mount+0x4c/0xd0) from [<c00b08dc>] (do_kern_mount+0x34/0xd8)
[<c00b08dc>] (do_kern_mount+0x34/0xd8) from [<c00c4fdc>] (do_mount+0x5ec/0x64c)
[<c00c4fdc>] (do_mount+0x5ec/0x64c) from [<c00c50c0>] (sys_mount+0x84/0xc4)
[<c00c50c0>] (sys_mount+0x84/0xc4) from [<c0031ec0>] (ret_fast_syscall+0x0/0x2c)
**>> Block 5 needs retiring

If I mount the filesystem read-write, then its cleaned up.  So the question is, how can I fix YAFFS such that it doesn't attempt to write to a read-only filesystem?

Ping?

Thanks in advance!

--
Peter Barada <peterb@logicpd.com>
Logic Product Development, Inc.