From: 黄涛 Date: Sat, 30 Jul 2011 14:45:08 +0000 (+0800) Subject: Revert "Fix yaffs checkpoint out of space crash" X-Git-Tag: firefly_0821_release~9935 X-Git-Url: http://demsky.eecs.uci.edu/git/?a=commitdiff_plain;h=7b07b821da023ce9003d4ff65e9a29f6b8262317;p=firefly-linux-kernel-4.4.55.git Revert "Fix yaffs checkpoint out of space crash" This reverts commit 8ff4860c2778c0be92a63808036de337d13fa864. --- 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)));