Hi guys:
Currently, if an error happens when yaffs2_CheckpointErase() erases a block,
The wrong address is used to mark the bad block, I think that it is a bug ,
Fix this by subtracting the proper block offset from the address. the code is as follows:
--- a/fs/yaffs2/yaffs_checkptrw.c
+++ b/fs/yaffs2/yaffs_checkptrw.c
@@ -47,7 +47,7 @@ static int yaffs2_CheckpointErase(yaffs_Device *dev)
if (dev->param.eraseBlockInNAND(dev, i - dev->blockOffset /* realign */)) {
dev->nErasedBlocks++;
dev->nFreeChunks += dev->param.nChunksPerBlock;
} else {
- dev->param.markNANDBlockBad(dev, i);
+ dev->param.markNANDBlockBad(dev, i - dev->blockOffset);
bi->blockState = YAFFS_BLOCK_STATE_DEAD;
}
}
Thanks
senk