Hi all, I'm debugging a system where I get occasional failures of a NAND verify when enabling CONFIG_MTD_NAND_VERIFY_WRITE. If I perform a stack dump on the verify failure I see : [ 275.078800] mt29f2g08aadwp_nand_verifybuf: Stack that brought us to the verify failure : [ 275.087956] [] (unwind_backtrace+0x0/0xec) from [] (dump_stack+0x18/0x1c) [ 275.097638] [] (dump_stack+0x18/0x1c) from [] (mt29f2g08aadwp_nand_verifybuf+0x100/0x124) [ 275.109212] [] (mt29f2g08aadwp_nand_verifybuf+0x100/0x124) from [] (nand_write_page+0xd8/0x194) [ 275.120848] [] (nand_write_page+0xd8/0x194) from [] (nand_do_write_ops+0x230/0x3a4) [ 275.131358] [] (nand_do_write_ops+0x230/0x3a4) from [] (nand_write_oob+0x78/0xe4) [ 275.141731] [] (nand_write_oob+0x78/0xe4) from [] (part_write_oob+0x8c/0xb8) [ 275.152098] [] (part_write_oob+0x8c/0xb8) from [] (nandmtd2_WriteChunkWithTagsToNAND+0xd0/0x14c) [ 275.163844] [] (nandmtd2_WriteChunkWithTagsToNAND+0xd0/0x14c) from [] (yaffs_CheckpointFlushBuffer+0x100/0x2e0) [ 275.177803] [] (yaffs_CheckpointFlushBuffer+0x100/0x2e0) from [] (yaffs_CheckpointWrite+0xbc/0xd4) [ 275.189976] [] (yaffs_CheckpointWrite+0xbc/0xd4) from [] (yaffs_CheckpointTnodeWorker+0xdc/0xec) [ 275.201717] [] (yaffs_CheckpointTnodeWorker+0xdc/0xec) from [] (yaffs_CheckpointSave+0x4e4/0x578) [ 275.213486] [] (yaffs_CheckpointSave+0x4e4/0x578) from [] (yaffs_do_sync_fs+0xf0/0x120) [ 275.224388] [] (yaffs_do_sync_fs+0xf0/0x120) from [] (yaffs_sync_fs+0x34/0x50) [ 275.234719] [] (yaffs_sync_fs+0x34/0x50) from [] (__sync_filesystem+0x34/0x44) [ 275.245827] [] (__sync_filesystem+0x34/0x44) from [] (sync_filesystem+0x34/0x60) [ 275.256108] [] (sync_filesystem+0x34/0x60) from [] (generic_shutdown_super+0x38/0x11c) [ 275.267182] [] (generic_shutdown_super+0x38/0x11c) from [] (kill_block_super+0x20/0x38) [ 275.278050] [] (kill_block_super+0x20/0x38) from [] (deactivate_super+0x50/0x68) [ 275.288314] [] (deactivate_super+0x50/0x68) from [] (mntput_no_expire+0x74/0xac) [ 275.298612] [] (mntput_no_expire+0x74/0xac) from [] (sys_umount+0x58/0x364) [ 275.308883] [] (sys_umount+0x58/0x364) from [] (ret_fast_syscall+0x0/0x28) We know that we're failing with -EFAULT from mt29f2g08aadwp_nand_verifybuf() so looking at how it gets passed up I see : mt29f2g08aadwp_nand_verifybuf .............. Has failed. Returns -EFAULT nand_write_page ............................ Has failed. Returns -EIO. nand_do_write_ops .......................... Returns the return value of nand_write_page() : -EIO nand_write_oob ............................. Returns the return value of nand_do_write_ops() : -EIO part_write_oob ............................. Returns the return value of nand_write_oob() : -EIO nandmtd2_WriteChunkWithTagsToNAND .......... Returns the return value of mtd->write() : -EIO yaffs_CheckpointFlushBuffer ................ Returns 1 (success) as nandmtd2_WriteChunkWithTagsToNAND() not checked for return value This concerns me as the actual operation in progress from the sync was yaffs_CheckpointSave() which will think it has successfully completed due to this which I think is a Bad Thing. My initial instinct is to return a failure from yaffs_CheckpointFlushBuffer() on the write failure. Would this make sense to you guys? I know that we're using an old version of YAFFS but we have deployed systems running this version and don't want to cause version conflicts! Checking in the GIT head, the return value is still ignored so this is still possible. Cheers! ~Pev