From 7b07b821da023ce9003d4ff65e9a29f6b8262317 Mon Sep 17 00:00:00 2001 From: =?utf8?q?=E9=BB=84=E6=B6=9B?= Date: Sat, 30 Jul 2011 22:45:08 +0800 Subject: [PATCH] Revert "Fix yaffs checkpoint out of space crash" This reverts commit 8ff4860c2778c0be92a63808036de337d13fa864. --- fs/yaffs2/yaffs_checkptrw.c | 26 ++++++++++++++------------ fs/yaffs2/yaffs_guts.c | 3 --- 2 files changed, 14 insertions(+), 15 deletions(-) diff --git a/fs/yaffs2/yaffs_checkptrw.c b/fs/yaffs2/yaffs_checkptrw.c index 7b69a640f4b0..66a4e7d9f0f9 100644 --- a/fs/yaffs2/yaffs_checkptrw.c +++ b/fs/yaffs2/yaffs_checkptrw.c @@ -130,9 +130,6 @@ static void yaffs_CheckpointFindNextCheckpointBlock(yaffs_Device *dev) int yaffs_CheckpointOpen(yaffs_Device *dev, int forWriting) { - - dev->checkpointOpenForWrite = forWriting; - /* Got the functions we need? */ if (!dev->writeChunkWithTagsToNAND || !dev->readChunkWithTagsFromNAND || @@ -150,6 +147,9 @@ int yaffs_CheckpointOpen(yaffs_Device *dev, int forWriting) dev->checkpointPageSequence = 0; + + dev->checkpointOpenForWrite = forWriting; + dev->checkpointByteCount = 0; dev->checkpointSum = 0; dev->checkpointXor = 0; @@ -358,14 +358,11 @@ int yaffs_CheckpointClose(yaffs_Device *dev) if (dev->checkpointOpenForWrite) { if (dev->checkpointByteOffset != 0) yaffs_CheckpointFlushBuffer(dev); - } else if(dev->checkpointBlockList){ + } else { int i; for (i = 0; i < dev->blocksInCheckpoint && dev->checkpointBlockList[i] >= 0; i++) { - int blk = dev->checkpointBlockList[i]; - yaffs_BlockInfo *bi = NULL; - if( dev->internalStartBlock <= blk && blk <= dev->internalEndBlock) - bi = yaffs_GetBlockInfo(dev, blk); - if (bi && bi->blockState == YAFFS_BLOCK_STATE_EMPTY) + yaffs_BlockInfo *bi = yaffs_GetBlockInfo(dev, dev->checkpointBlockList[i]); + if (bi->blockState == YAFFS_BLOCK_STATE_EMPTY) bi->blockState = YAFFS_BLOCK_STATE_CHECKPOINT; else { /* Todo this looks odd... */ @@ -393,10 +390,15 @@ int yaffs_CheckpointClose(yaffs_Device *dev) int yaffs_CheckpointInvalidateStream(yaffs_Device *dev) { - /* Erase the checkpoint data */ + /* Erase the first checksum block */ + + T(YAFFS_TRACE_CHECKPOINT, (TSTR("checkpoint invalidate"TENDSTR))); - T(YAFFS_TRACE_CHECKPOINT, (TSTR("checkpoint invalidate of %d blocks"TENDSTR), - dev->blocksInCheckpoint)); + if (!yaffs_CheckpointSpaceOk(dev)) + return 0; return yaffs_CheckpointErase(dev); } + + + diff --git a/fs/yaffs2/yaffs_guts.c b/fs/yaffs2/yaffs_guts.c index 05ff48d1bc46..155b74643eb8 100644 --- a/fs/yaffs2/yaffs_guts.c +++ b/fs/yaffs2/yaffs_guts.c @@ -7436,9 +7436,6 @@ int yaffs_GutsInitialise(yaffs_Device *dev) yaffs_VerifyFreeChunks(dev); yaffs_VerifyBlocks(dev); - /* Clean up any aborted checkpoint data */ - if (!dev->isCheckpointed && dev->blocksInCheckpoint > 0) - yaffs_InvalidateCheckpoint(dev); T(YAFFS_TRACE_TRACING, (TSTR("yaffs: yaffs_GutsInitialise() done.\n" TENDSTR))); -- 2.34.1